5

Пытаюсь изменить значение параметра fastcgi_read_timeout для админского раздела, но не выходит.

Вот как выглядит мой конфиг:

server {
    listen 443 ssl default_server;

    root /srv/www/site/public;
    index index.php index.html;

    ssl                 on;
    ssl_certificate     /etc/letsencrypt/live/site/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/site/privkey.pem;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;
    add_header Strict-Transport-Security 'max-age=15552000';

    location /admin/ {
        fastcgi_read_timeout 2;
        add_header X-debug-message-1 "Admin Location" always;
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location / {
        add_header X-debug-message-2 "Global Location" always;
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        add_header X-debug-message-3 "PHP Location" always;
        try_files $uri /index.php =404;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_read_timeout 300;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }

    include snippets/expires.conf;
    include snippets/gzip.conf;
    include snippets/protect-system-files.conf;
}

Файл fastcgi_params стандартный, там про таймаут ничего нет.

В конфиге видно, что я вывожу заголовки для дебага - в браузер отдаётся только X-debug-message-3. При этом если в location /admin/ убрать из try_files последний вариант (с /index.php), то отдаётся заголовок X-debug-message-1, но раздел, разумеется, не работает.

Как добиться нужного результата и изменить fastcgi_read_timeout для админского раздела?

  • А он таки в index.php в результате попадает? – Alexey Ten May 31 '17 at 17:12
  • @AlexeyTen с тем конфигом, который я приложил, попадает и весь код отрабатывает как нужно, но параметр fastcgi_read_timeout из /admin/ не применяется. А если там в try_files убрать index.php, то не попадает, что ожидаемо. – Алексей Уколов Jun 01 '17 at 06:36

1 Answers1

0

В блоке /admin/ вы ставите параметру fastcgi_read_timeout одно значение, а потом директивой try_files просите nginx обратиться к другому location, в котором параметру fastcgi_read_timeout ставится другое значение.

Попробуйте так:

location /admin/ {
    fastcgi_read_timeout 2;
    try_files $uri $uri/ /index.php$is_args$args;
}

location / {
    fastcgi_read_timeout 300;
    try_files $uri $uri/ /index.php$is_args$args;
}

location ~ \.php$ {
    # здесь уберём эту директиву:
    # fastcgi_read_timeout 300;
    # ...остальное как есть
}
sanmai
  • 12,320
  • Не похоже, что проблема в порядке обработки location - ведь если убрать try_files, то заголовки ставятся. Да и в документации по вашей ссылке есть пример, похожий на мой случай, который опровергает ваши слова. Скорее, дело в том, что try_files работает как некий редирект, который чистит все поставленные до этого заголовки и настройки. У меня используется ЧПУ и в URL вообще нет .php, а все запросы обрабатываются одним файлов index.php в корне. – Алексей Уколов Jun 13 '17 at 08:24
  • Так получается? – sanmai Jun 13 '17 at 08:32
  • Нет, так тоже не работает. – Алексей Уколов Jun 19 '17 at 12:45