42
сообщение и оно появлялось только после нажатия кнопки «Обновить
страницу». Такое поведение создавало впечатление неработоспособной.
Важную роль при кэшировании играет ключ страницы, задающийся
директивой proxy_cache_key. Можно заметить, что для каких-то страниц
используется комбинация $host$uri$is_args$args, а для других (все из локации
@fastcache) добавляется куки, идентифицирующий пользователя. Важно
делать так, чтобы кэш разных пользователей не пересекался. Соответственно,
персонифицированные страницы должны быть уникальны в кэше[7, 32].
Для распределения по локациям нельзя использовать директиву if. В
конфигурировании nginx ее использование для этих целей считается дурным
тоном, так как результаты ее использования порой бывают непредсказуемы.
Для этих целей следует использовать map и механизм, предоставляемый
средствами обработки ошибок, как сделано в этой работе[2,14].
Также следует отметить небольшой нюанс, связанный с ведением
журналов access_log. Не стоит логировать целиком запрос, который
находится в переменной @request, по крайней мере для таких целей, какие
преследовались в этой работе. Имеет смысл записывать отдельными полями
метод запроса $request_method, $request_uri и, если нужно, версию
протокола. Такой журнал легче обрабатывать, систематизировать и получать
статистику.
Во всех директивах proxy_pass помимо сервера бек-энда и порта, на
который нужно передать запрос был добавлен uri, который должен
передаваться. Это было сделано во всех локациях, кроме @midcache. По
умолчанию на сервер должно передаваться значение, соответствующее
$request_uri, но приложение в некоторых случаях вело себя неадекватно –
через раз вместо запрашиваемой страницы выдавало ту, которая должна
открываться без указания аргументов или если они неверно распознаны.
Добавление к адресу сервера переменных $uri,$is_args и $args исправило это
поведение (например, proxy_pass http://@rms/$uri$is_args$args;)