Я пытаюсь обслуживать 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, но каталог и файл по-прежнему отсутствуют.
Как это можно исправить?
Бонус: что могло вызвать это?
Я думаю, это зависит от используемой вами версии 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;
}
Закончилось тем, что нужно было посмотреть на предыдущий рабочий файл конфигурации и скопировать его вручную. Просто сделал 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
Меня тоже озадачило на мгновение. Вы хотите установить nginx-full
пакет на Ubuntu, в отличие от просто nginx
, nginx-full
содержит биты, которые вы пропустили.
я использую
и мой конфиг сайта выглядит так
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;
}
}
и работает хорошо.
поэтому я рекомендую обновить ваш
конфиг
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/
Спасибо,