varnish и no-cache

От разработчиков поступил запрос, чтобы varnish не кешировал страницы с заголовком Cache-control: no-cache. После некоторых поисков, обнаружил, что версия 4.0, которую мы используем, должна уметь это из коробки, как видно из этого коммита. Увы, мой 4.0.3 из epel такого не делал, неясно по какой причине. Решение с vcl нашлось только для 3 версии:

sub vcl_fetch {
  if (req.http.Cache-Control ~ "(private|no-cache|no-store)" || req.http.Pragma == "no-cache") {
    return (pass);
  }
}

В 4 версии поменялись названия переменных и vcl, так что после некоторых замен конструкция выглядит так:

sub vcl_backend_response {
  if (beresp.http.Cache-Control ~ "(private|no-cache|no-store)" || beresp.http.Pragma == "no-cache") {
    set beresp.uncacheable = true;
  }
}

Либо поместить это в уже существующий vcl_backend_response. Вроде бы работает. 🙂

Самоподписанный сертификат с sha256

Потребовалось обновить самоподписанный сертификат, т.к. браузеры начинают ругаться на подпись sha1. Команда, на самом деле, достаточно тривиальна:

openssl req -new -newkey rsa:4096 -days 3650 -nodes -x509 -keyout server.key -out server.crt -sha256

Нужно ответить на традиционные вопросы и все, в server.key лежит ключ на 4096 бит, в server.crt сертификат с подписью sha256, можно пользоваться.

mod_rpaf и Debian Jessie

Похоже, модуль апача rpaf в Jessie сломан. Подключается, в лог пишет правильный адрес, но вот, например, в $_SERVER[«REMOTE_ADDR»] по-прежнему адрес прокси, а не клиента. К счастью, в комплекте апача есть замена — это mod_remoteip. Конфигурируется достаточно просто:

  1. Нужно создать файл /etc/apache2/mods-available/remoteip.conf с примерно таким содержимым
    <IfModule mod_remoteip.c>
      RemoteIPHeader X-Forwarded-For
      RemoteIPInternalProxy 127.0.0.1 # тут должен быть адрес своего прокси
    </IfModule>
  2. Затем a2enmod remoteip и systemctl apache2 restart. Все, правильный адрес будет и в логах, и в переменных.

Зависающие lvm-снапшоты

Периодически при бэкапах у меня подвисали lvm-снапшоты, при попытке их удаления после окончания копирования вылезало что-то вроде:

  Unable to deactivate open srv01-backup-cow (253:4)
  Failed to resume hb.
  libdevmapper exiting with 1 device(s) still suspended.

После этого нельзя было ни удалить снапшот, ни сделать что-либо, затрагивающее lvm, все процессы просто повисали в состоянии D. Приходилось перегружать сервер через ресет или /proc/sysrq-trigger, увы.

К счастью, теперь я знаю, как можно избавиться и от процессов в D, и от ненужного ребута 🙂 Всего лишь пара команд и сервер продолжает работать как ни в чем не бывало.

dmsetup resume /dev/mapper/srv01-root
dmsetup remove /dev/mapper/srv01-root-real

первый день yandex-root-2015

0. проблемы вылезли с запуском виртуалки у двоих из трех членов нашей команды: в hyper-v почему-то диск виделся как fd0. работали с одной, запущеной в kvm, причем с virtio драйвером диска она так же стартовать не хотела. вход на виртуалку получить было несложно через init=/bin/sh

1. ssl

первая сложность — понять тот момент, что нужен ссл-сервер со своим сертификатом, а не тем, что приложен к заданию.
при подписывании своего сертификата могла возникнуть ошибка с тем, что не совпадают subj у ca и подписываемого сертификата, лечилось заменой string_mask в конфиге с utf8only на pkix.
так же в системе была установлена поломанная версия openssl, в связи с этим ни апач, ни нжинкс не стартовали, лечится установкой пакета из репозитория.
конфиг ссл-вхоста написать, думаю, может каждый.

2. MariaDB repair

сложностей не вызывает, поставить пакет из репозитория, добавить в skip-grant-tables режиме нужного пользователя, создать от него временную таблицу, подсунуть frm от этой таблицы в нужную.
во время проверки создается правило ната на ип 192.168…, достаточно добавить его, например, на lo интерфейс.

3. Binary

поставить mono и strace, запускать бинарник через strace и ставить нужные либы до победного.

4. Mongo

поставить mongodb и mongodb-tools, запустить монго с данными из задачи, сдампить его, после этого можно этот монго отключить (не знаю, возможно, можно было преобразовать его).
затем запустить 2 шарда в своих каталогах и на своих портах (мы использовали 10001 и 10002), запустить конфигдб и монгос, собрать кластер, сделать в нем бд, загрузить в нее дамп и создать шарденую коллекцию по ключу _id, далее достаточно дождаться отработки балансировщика.

5. Strange protocol

самая стремная задача 🙁
реально ничего особенного, работает по ПРОТОКОЛУ enet, который живет по адресу http://enet.bespin.org/, именно в этом протоколе надо было делать эхо-сервер, а не просто в udp.

6. File

файл цепляется через лупбек, это будет lvm-раздел с 2 btrfs subvolume, на втором искомый файл.

7. MariaDB tuning

достаточно создать ключи на колонки hits и size, проблема только в том, что /tmp подмонтирован в tmpfs, на которой по умолчанию места всего 256М, решается либо отмонтированием tmpfs, либо правкой переменной tmpdir.

8. HG

операция называется delete large file from history, делается через convert старого репа в новый с исключением 2.scm.gz, *.gz исключать нельзя, далее просто hg serve -d в каталоге нового репа.

9. Strange file

тут два слова: immutable file. sapienti sat.

 

в итоге заняли 22 место 🙁 надо было внимательнее читать дамп в strange protocol.

Бесплатная почта на своем домене

Печально, но outlook.com последовал за гуглом и теперь тоже не позволяет бесплатно размещать свой домен для получения почты. Остались только яндекс и некий zoho mail, попробую их.

Страничка для тестирования отправки писем

Пишу, чтобы самому не забыть.

Есть такой удобный инструмент для тестирования всяких там SPF и DKIM заголовков. Заодно проверяет через SpamAssassin. При входе на страницу выдает рандомный ящик, на который нужно отправить письмо для проверки.

http://www.brandonchecketts.com/emailtest.php

UPD: теперь редиректит на dkimvalidator.com, который по идее должен делать то же самое. Увы, это не так. Не работает в принципе.