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