it-roy-ru.com

Отсутствует фрагмент Nginx fastcgi-php.conf

Я пытаюсь обслуживать PHP с помощью nginx, я следовал этому учебнику успешно раньше, но на новом сервере по какой-то причине я получаю следующую ошибку:

 nginx: [emerg] open() "/etc/nginx/snippets/fastcgi-php.conf" failed (2: No such file or directory) 

Фактически, весь каталог snippets установки nginx отсутствует. 

Я установил PHP с помощью следующих команд:
- Sudo apt-get install -y php7.0-cli php7.0-cgi php-fpm php-mysql
- Sudo systemctl restart php7.0-fpm 

Я установил самый современный доступный nginx, но каталог и файл по-прежнему отсутствуют.

Как это можно исправить? 

Бонус: что могло вызвать это?

4
Ulad Kasach

я думаю, это зависит от используемой вами версии Nginx.

Для ответа Нейта nginx-full установит для вас 1.10.3.

Я использую Nginx 1.12.2 в Ubuntu 16.04, с этой версией у него нет sites-enabled и sites-available с ним; и он также имеет другую настройку PHP CGI.

Вы можете использовать решение Ulad Kasach или начать использовать новый способ.

Вот официальный документ о том, как это сделать: https://www.nginx.com/resources/wiki/start/topics/recipes/wordpress/

Кстати, в приведенном выше сообщении вы также должны заменить fastcgi.conf на fastcgi_params.

И добавьте еще одну строку по умолчанию:

fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;

Это все новые изменения в Nginx 1.12.2 :(

Финальная версия:

location ~ \.php$ {
    #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
    include fastcgi_params;                
    fastcgi_intercept_errors on;
    fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
}
13
Yang_2333

Закончилось тем, что нужно было посмотреть на предыдущий рабочий файл конфигурации и скопировать его вручную. Просто создал каталог snippets и добавил файл fastcgi-php.conf со следующим содержимым:

# regex to split $uri to $fastcgi_script_name and $fastcgi_path
fastcgi_split_path_info ^(.+\.php)(/.+)$;

# Check that the PHP script exists before passing it
try_files $fastcgi_script_name =404;

# Bypass the fact that try_files resets $fastcgi_path_info
# see: http://trac.nginx.org/nginx/ticket/321
set $path_info $fastcgi_path_info;
fastcgi_param PATH_INFO $path_info;

fastcgi_index index.php;
include fastcgi.conf;

Вам также необходимо заменить последнюю строку, include fastcgi.conf; на include fastcgi_params;

Я бы порекомендовал создать файл fastcgi.conf;, если бы он не был буквально тем же файлом с дополнительной строкой fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; в случае fastcgi.conf 

4
Ulad Kasach

Меня тоже озадачило на мгновение. Вы хотите установить пакет nginx-full в Ubuntu, а не просто nginx. nginx-full содержит биты, которые вы пропустили.

4
Nate

я использую 

  1. nginx/1.4.6
  2. Ubuntu 14.04.5 LTS

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

server {
    listen 3010;

    root /usr/share/nginx/docs;

    # Add index.php to the list if you are using PHP
    index index.php index.html index.htm index.nginx-debian.html;   

    server_name phpSetup;


    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}

и работает хорошо . поэтому я рекомендую обновить ваш config include snippets/fastcgi-php.conf; К 

включить fastcgi_params;

поэтому блок локации

location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }

НАДЕЮСЬ, ПОМОЖЕТ

читать дальше: https://www.nginx.com/resources/wiki/start/topics/recipes/wordpress/

спасибо,

1
insCode