error_page 404 и ngx_http_index_module
Gena Makhomed
gmm at csdoc.com
Fri Aug 22 19:10:13 UTC 2014
On 18.10.2013 16:50, Maxim Dounin wrote:
> Отдельно печалит, что в результате конфигурации с error_page 404
> @fallback - практически исчезли, хотя аналог на try_files -
> гарантированно хуже.
server {
server_name www.example.com;
root /home/www/example.com/static.www/;
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 тратит
ресурсы сервера впустую, пытясь открыть заведомо не существующие
индексные файлы.
Каким способом будет более правильно отключить модуль
ngx_http_index_module ? сделать workaround
через регулярное выражение:
location / {
location ~ /$ {
return 404;
}
error_page 404 = @php;
}
Или путем патча, который добавляет возможность полного отключения
этого модуля через указание в конфиге директивы "index off;" ?
http {
index off;
...
server {
...
location / {
error_page 404 = @php;
}
}
}
- тогда сразу возвращается 404 для всех uri, оканчивающихся слэшом ('/')
без попыток что-либо искать ни диске и без необходимости применять
регулярные выражения для каждого клиентского запроса к сайту.
--
Best regards,
Gena
Подробная информация о списке рассылки nginx-ru