@4upik

Как настроить fastcgi_read_timeout 1000 для определенного URL в Nginx?

Необходимо настроить fastcgi_read_timeout 1000 для /etrade_http_tunnel/etrade_http_tunnel.php

Пробовал location задавать так
location /etrade_http_tunnel/
location /etrade_http_tunnel/etrade_http_tunnel.php
location ^~ /etrade_http_tunnel/

В одних случаях срабатывает общее правило для .php в других дает ошибку 404

Прошу помочь.

Nginx code

server {
    listen     ************:443;
    server_name site.ru;
    root        /home/4upik/web/site.ru/public_html;
    index       index.php index.html index.htm;
    access_log  /var/log/nginx/domains/site.ru.log combined;
    access_log  /var/log/nginx/domains/site.ru.bytes bytes;
    error_log   /var/log/nginx/domains/site.ru.error.log error;

    ssl         on;
    ssl_certificate      /home/4upik/conf/web/ssl.site.ru.pem;
    ssl_certificate_key  /home/4upik/conf/web/ssl.site.ru.key;

    location / {
      if (!-e $request_filename ) { rewrite ^(.*)$ /index.php?q=$1; }

        location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ {
            expires     max;
        }

location /etrade_http_tunnel/ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
fastcgi_pass 127.0.0.1:9001;
fastcgi_read_timeout 100000;
}

location ~* ^.*(naltovar).* {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
fastcgi_pass 127.0.0.1:9001;
fastcgi_read_timeout 100000;
}

        location ~ [^/]\.php(/|$) {
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            if (!-f $document_root$fastcgi_script_name) {
                return  404;
            }

            fastcgi_pass    127.0.0.1:9001;
            fastcgi_index   index.php;
            include         /etc/nginx/fastcgi_params;
        }
    }
  error_page  403 /error/404.html;
    error_page  404 /error/404.html;
    error_page  500 502 503 504 /error/50x.html;

    location /error/ {
        alias   /home/4upik/web/site.ru/document_errors/;
    }

    location ~* "/\.(htaccess|htpasswd)$" {
        deny    all;
        return  404;
    }

    location /vstats/ {
        alias   /home/4upik/web/site.ru/stats/;
        include /home/4upik/conf/web/site.ru.auth*;
    }

    include     /etc/nginx/conf.d/phpmyadmin.inc*;
    include     /etc/nginx/conf.d/phppgadmin.inc*;
    include     /etc/nginx/conf.d/webmail.inc*;

    include     /home/4upik/conf/web/snginx.site.ru.conf*;
}
  • Вопрос задан
  • 2841 просмотр
Пригласить эксперта
Ответы на вопрос 1
@dodo512
В доке подробно описана очерёдность проверки location nginx.org/ru/docs/http/ngx_http_core_module.html#l...
Чтобы найти location, соответствующий запросу, вначале проверяются location’ы, заданные префиксными строками (префиксные location’ы). Среди них ищется location с совпадающим префиксом максимальной длины и запоминается. Затем проверяются регулярные выражения, в порядке их следования в конфигурационном файле. Проверка регулярных выражений прекращается после первого же совпадения, и используется соответствующая конфигурация. Если совпадение с регулярным выражением не найдено, то используется конфигурация запомненного ранее префиксного location’а.

Если у совпавшего префиксного location’а максимальной длины указан модификатор “^~”, то регулярные выражения не проверяются.

Кроме того, с помощью модификатора “=” можно задать точное совпадение URI и location. При точном совпадении поиск сразу же прекращается.

Таким образом запрос /etrade_http_tunnel/etrade_http_tunnel.php попадёт в location ~ [^/]\.php(/|$)
даже при наличии префиксных:
location /etrade_http_tunnel/
location /etrade_http_tunnel/etrade_http_tunnel.php

Нужно применить = или ^~, чтобы поиск сразу же прекратился и регулярные выражения не проверялись.
location = /etrade_http_tunnel/etrade_http_tunnel.php {
    fastcgi_read_timeout 1000;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы