Назад | Перейти на главную страницу

fastcgi_param SCRIPT_NAME не работает при включении из внешнего файла конфигурации

После обновления nginx на моем сервере все PHP-сайты перестали работать. Раньше у меня в файле fastcgi_params было только это:

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;

А внутри конфигурационных файлов PHP-сайта был такой блок:

    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        include        fastcgi_params;
    }

Однако это больше не работает. Это работает, только если у меня есть это в файлах конфигурации для каждого сайта:

    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

Я должен установить SCRIPT_FILENAME здесь, а не в "fastcgi_params". Перед ним также должен быть $ document_root. Ни "$ document_root $ fastcgi_script_name", ни "$ fastcgi_script_name" не работают, если они установлены во включенном файле fastcgi_params.

Меня не особо беспокоит то, что теперь мне нужно добавить к нему $ document_root (но мне любопытно, знает ли кто-нибудь, почему это сломалось или почему оно работало раньше), но я бы предпочел сохранить общие функции в файле fastcgi_params для простота, поэтому я хотел бы знать, почему это не работает.

Я собираюсь предположить, что ваша конфигурация, вероятно, представляет собой "серию" плохих приемов, поэтому я рекомендую вам прочитать это: http://blog.martinfjordvald.com/2010/07/nginx-primer/

Короче можно (и нужно) поставить fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; в ваш fastcgi_params (или просто включите вместо него файл fastcgi.conf), но из-за того, как nginx наследует значения конфигурации между уровнями, вам необходимо убедиться, что ваша корневая директива определена в блоке сервера, а не в location /.

В общем, это очень хороший совет, поместите как можно больше на самый верхний уровень, и вы избежите тонны дублирования.

Что-то сломалось после последнего обновления до "передачи выполнения в php-fpm". 0.8.53-0ppa5 ~ ясный версия для моего launchpad.net/~nginx/+archive/stable ppa версия nginx. Я использую 10.04 LTS x64. Проблема возникла на всех моих серверах Ubuntu 10.04 LTS и VPS, когда я автоматически обновил nginx из указанного выше репозитория ppa. https://launchpad.net/~nginx/+archive/stable

Я исправил это на время, понизив версию Ubuntu 10.04 LTS Canonical до версии 7.65. http://packages.ubuntu.com/lucid/nginx

Я пробовал много перестановок затронутого параметра -> $ script_filename , без Удачи.

Как ни странно, я подумал, что это связано с тем, что они добавили строку для определения $ SCRIPT_FILENAME внутри fastcgi_params .

  • Исправление: добавлен SCRIPT_FILENAME в fastcgi_params

(из https://launchpad.net/~nginx/+archive/stable/+packages нажмите на пакет lucid, чтобы увидеть список изменений со строкой выше) Похоже, что это не имеет никакого эффекта; Я сдался и перешел на более раннюю версию, чтобы сохранить свои производственные PHP-сайты.

Я хотел бы знать, может ли кто-нибудь получить еще один POV по этому вопросу.

Пожалуйста, проголосуйте за, если вас это тоже коснется.

Я не уверен, какой тип QA используется для репозиториев ppa, отмеченных как стабильные на панели запуска. (Я относительный новичок в мире Launchpad.)