On 25.08.2014 15:47, Maxim Dounin wrote:
location / {
error_page 404 = @php;
log_not_found off;
}
location @php {
fastcgi_param SCRIPT_FILENAME /home/www/example.com/engine/index.php;
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
}
}
www.example.com - это динамика, и $uri для 99.999% запросов к этому
домену оканчиваются символом '/', например: /support/ или /about/
В каталоге static.www лежит всего несколько файлов, которые должны
быть на домене www.example.com - favicon.ico, robots.txt, sitemap.xml,
googlexxxxxxxxxxxxxxxxxx.html и yandex_xxxxxxxxxxxxxxxxxxxx.html,
а вся остальная статика для сайта www.example.com раздается
с отдельного домена example.com
Модуль ngx_http_index_module в nginx - сейчас неотключаемый.
В результате, в 100% случаев модуль ngx_http_index_module тратит
ресурсы сервера впустую, пытясь открыть заведомо не существующие
индексные файлы.
Just for record: приведённая конфигурация не будет работать, если
индексных файлов нет. Для URI, заканчивающихся на "/", выдаётся
403 в случае, если обработчик не найден (и логгируется сообщение
"directory index of ... is forbidden" в error_log), так что в
директиву error_page надо добавить 403.
Только я не весь конфиг процитировал, там есть еще и такой location:
location = / {
error_page 404 = @php;
return 404;
}
А для всех остальных URI, заканчивающихся на "/" - модуль index всегда
возвращает 404, потому что в каталоге /home/www/example.com/static.www/
нет соответствующих этим URI подкаталогов. Если бы каталог существовал,
но в нем не было бы индексного файла, тогда возвращался бы 403 статус.
Кроме того, в данном конкретном случае я бы не пытался делать
fallback, а вместо этого сделал location'ы под существующую
статику по списку. Чтобы не пытаться открывать "заведомо не
существующие файлы".
Да, это лучший вариант. Только тогда придется делать генератор конфига,
и какой-то сервис, который будет по запросу перегенерировать конфиг
сайта и делать service nginx reload, потому что обновления сайта
выкладываются на сервер скриптом под пользователем www.
Пока что "location ~ /$ { return 404; }" - это вполне рабочий вариант,
который позволяет обойтись без генератора конфига nginx и без релоадов.
С точки зрения эффективности - самым правильным способом будет
убрать fallback из схемы вообще, см. выше. Отключения индексов
тем или иным способом - это в любом случае полумеры.
Да, при использовании Docker надо будет так и сделать, всеравно там
будет генерироваться новый контейнер для каждой новой версии сайта.
Благодарю за помощь!
--
Best regards,
Gena
_______________________________________________
nginx-ru mailing list
[email protected]
http://mailman.nginx.org/mailman/listinfo/nginx-ru