Про стандартные грабли в Nginx
В mailing-листе nginx народ постоянно и с редким упорством наступает на одни и те же грабли. Вот некоторые из них:
$query_string
(она же$args
- аргументы в строке запроса) не тестируется при поиске подходящего location, матчится только URI директиваerror_log off
не отключит лог ошибок, а создаст файл с именемoff
в дефолтовом месте для логов. Для отключения логов можно сказать нечто вродеerror_log /dev/null
;- nginx не умел, не умеет и, по словам разработчика, никогда не будет уметь писать логи в pipe. Вместо этого принято ротировать логи с нужной частотой и уже после этого выполнять их парсинг;
- Директиву
if
(в силу того, что она де-факто создает фейковый location и является своего рода хаком в nginx) гарантированно безопасно можно использовать лишь в сочетании сrewrite
илиreturn
. Все прочие варианты использования могут привести как к “неправильной” с точки зрения логики работе содержимогоif {}
, так и к падению; - В nginx, в отличие от apache, нет макросов и глобальных локейшнов. Для минимизации размера конфига можно воспользоваться метаразметкой и генератором конфига своего изготовления. Либо директивой
include
; - Использование мемори-дисков для хранения часто запрашиваемой статики бессмысленно, так как для современных ОС “эмпирическим путём давно выяснено, что при использовании nginx’а оптимальный размер мемори диска равен нулю.” (Игорь Сысоев). Часто потребляемые файлы и так попадут в кеш.
2010-03-02