Estoy intentando servir PHP con nginx, he seguido este tutorial con éxito antes, pero en un servidor nuevo, por alguna razón, aparece el siguiente error:
nginx: [emerg] open() "/etc/nginx/snippets/fastcgi-php.conf" failed (2: No such file or directory) De hecho, falta todo el directorio de snippets de la instalación de nginx.
He instalado PHP con los siguientes comandos:
- sudo apt-get install -y php7.0-cli php7.0-cgi php-fpm php-mysql
- sudo systemctl restart php7.0-fpm
Instalé el nginx más actualizado que está disponible y, sin embargo, el directorio y el archivo aún no están presentes.
¿Cómo puede ser remediada?
Bono: ¿Qué pudo haber causado esto?
TLDR:
La versión final es:
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; }Creo que depende de la versión de Nginx que estés usando.
Para la respuesta de Nate, nginx-full instalará 1.10.3 por usted.
Estoy usando Nginx 1.12.2 en Ubuntu 16.04, con esta versión, no tiene sites-enabled ni sites-available ; y también tiene una configuración PHP CGI diferente.
Puede usar la solución de Ulad Kasach o comenzar a usar la nueva forma.
Aquí hay un documento oficial sobre cómo hacerlo: https://www.nginx.com/resources/wiki/start/topics/recipes/wordpress/
Por cierto, en la publicación anterior, también debe reemplazar fastcgi.conf con fastcgi_params .
Y agregue una línea más que originalmente está predeterminada:
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
Todos estos son cambios nuevos con Nginx 1.12.2 :(
La versión final es:
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; }Terminé teniendo que mirar un archivo de configuración anterior que funcionaba y replicarlo manualmente. Simplemente creó el directorio de snippets y agregó un archivo fastcgi-php.conf con el siguiente contenido:
# 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; También deberá reemplazar la última línea, include fastcgi.conf; con include fastcgi_params; .
Hubiera recomendado crear el archivo fastcgi.conf; si no fuera literalmente el mismo archivo con la línea adicional fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; en el caso de fastcgi.conf
También me dejó perplejo por un momento. Desea instalar el paquete nginx-full en ubuntu en lugar de solo nginx . nginx-full contiene los bits que te faltaban.