вторник, 25 сентября 2012 г.

FastCGI "Primary script unknown"

Столкнулся сегодня с сабжевой проблемой, косяк произошел после обновления nginx с 0.7.67 на 1.2.3.
Сайты стали отдаваться с ошибкой 404 и текстом "File not found". Что интересно, не все сайты.. Некоторые работали.
Долго бил во всяческие бубны, поднимал php-cgi на локальном порту вместо php-fpm через сокет, права проверял, конфиги пересмотрел раз 10, включал логи php-fpm, nginx-а. Вырисовывалось, что работают сайты, которые не используют ЧПУ (у них ссылки ведут на реальные скрипты, старые совсем сайтики).

ЧПУ сайтов у меня основано на обработке 404й ошибки и подмене SCRIPT_FILENAME на конкретный файл MVC-контроллера.

В итоге собака была зарыта в include fastcgi_params;
Раньше эта строка стояла под определением SCRIPT_FILENAME, и как то это работало, несмотря на то, что include fastcgi_params шло ниже и по идее должно было переопределять SCRIPT_FILENAME. После обновления же nginx видимо поменялось поведение.
Была мысль, что обновленный nginx и файл fastcgi_params обновил, однако время изменения файла было далеко в прошлом.

В общем проблема решилась установлением строки include fastcgi_params; на первое место во всех секциях по обработке php.

2 комментария:

  1. Не помогло -(

    server {
    server_name xxxxx.by;
    root /home/maximus/www/xxxxx.by;
    index index.php index.html index.htm;

    location ~ ^(.+\.php)$ {
    try_files $uri =404;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    include /etc/nginx/fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $request_filename;


    }

    }

    ОтветитьУдалить