que - php fpm nginx
Nginx sirve archivos.php como descargas, en lugar de ejecutarlos (25)
Primero debes
Remove cache
en tu navegador
Luego abra la terminal y ejecute el siguiente comando:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html;
index index.php index.html index.htm;
server_name localhost;
location / {
try_files $uri $uri/ =404;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ /.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+/.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Luego agregue el siguiente código en el archivo
default
:
location ~ [^/]/.php(/|$) {
fastcgi_split_path_info ^(.+/.php)(/.+)$;
fastcgi_index index.php;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
include fastcgi_params;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
Si no coincide, solo corrija y reinicie Nginx desde la terminal con el siguiente comando
sudo systemctl restart nginx
Luego ve al navegador y disfruta ...
Estoy instalando un sitio web en una gota (Océano Digital).
Tengo un problema para instalar NGINX con PHP correctamente.
Hice un tutorial
https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu-14-04
pero cuando intento ejecutar algunos .php solo lo está descargando ... por ejemplo ...
http://5.101.99.123/info.php
está funcionando pero ... Si voy al
http://5.101.99.123
principal, está descargando mi índice. php: /
¿Alguna idea?
-rw-r--r-- 1 agitar_user www-data 418 Jul 31 18:27 index.php
-rw-r--r-- 1 agitar_user www-data 21 Aug 31 11:20 info.php
Mi / etc / nginx / sites-available / default
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /var/www/html;
index index.html index.htm index.php;
# Make site accessible from http://localhost/
server_name agitarycompartir.com;
location ~ /.php$ {
fastcgi_split_path_info ^(.+/.php)(/.+)$;
# # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
#
# # With php5-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# # With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
location / {
try_files $uri $uri/ =404;
# Uncomment to enable naxsi on this location
# include /etc/nginx/naxsi.rules
}
... Otros "ubicación" están comentados (#)
Debe agregar esto a / etc / nginx / sites-enabled / default para ejecutar archivos php en el servidor Nginx:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html;
index index.php index.html index.htm;
location ~ /.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+/.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
En mi caso, no estaba usando
/etc/nginx/sites-available/default
Estaba usando un archivo de configuración de bloque de servidor diferente (por ejemplo, example.com), y la única forma en que pude solucionar este problema fue eliminando el servidor predeterminado enlace simbólico del archivo de configuración de bloque:
$ rm /etc/nginx/sites-enabled/default
luego recarga Nginx:
$ sudo systemctl reload nginx
Entonces, esto es lo que finalmente funcionó en mi caso como reescribir las reglas donde el culpable
Cambié las reglas de reescritura de nginx de la siguiente manera ...
location /vendors { rewrite ^/vendors/?$ /vendors.php last; }
se convierte en ...
location / {
access_log off;
log_not_found off;
client_max_body_size 2000m;
client_body_buffer_size 512k;
proxy_buffering on;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
proxy_buffer_size 64k;
proxy_buffers 32 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
proxy_connect_timeout 300s;
proxy_http_version 1.1;
proxy_set_header Range "";
proxy_pass https://123.123.123.123:444;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
}
Aparentemente, sin la
última
palabra clave, la solicitud no se reinició, por lo que nunca llegó al segmento de ubicación
.php
, y simplemente se interpretó como una descarga:
Estaba a punto de volverme loco tratando de arreglar esto, para mí el problema era que Cloudflare había almacenado en caché el archivo php y seguía haciéndome descargarlo.
La solución para mí fue purgar el caché en Cloudflare.
Esto funcionó para mí.
1) archivo MyApp
vi / etc / nginx / sites-available / myApp
server {
listen 80;
listen [::]:80;
root /var/www/myApp;
index index.php index.html index.htm;
location ~ /.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+/.php)(/.+)$;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Usuarios PHP5
Cambio
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
a
fastcgi_pass unix:/var/run/php5-fpm.sock;
2) Configurar cgi.fix_pathinfo
Establezca cgi.fix_pathinfo en 0
Ubicación:
PHP5 /etc/php5/fpm/php.ini
PHP7 /etc/php/7.0/fpm/php.ini
3) Reiniciar servicios
FPM
php5
sudo service php5-fpm restart
php7
sudo service php7.0-fpm restart
NGINX
sudo service nginx restart
La respuesta anterior parecía comentar demasiado para la solución a la que llegué. Así es como se veía mi archivo:
/ etc / nginx / sites-available / default
location ~ /.php$ {
# fastcgi_split_path_info ^(.+/.php)(/.+)$;
# # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
#
# # With php5-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
Espero que esto ayude a algunas personas que están frustradas un domingo por la tarde (c:
Lo que funcionó para mí con Ubuntu 16.04, y php7 fue eliminar esta línea
fastcgi_split_path_info ^(.+/.php)(/.+)$;
Dejó de descargar archivos php después de eso.
Mi solución fue agregar
location ~ /.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+/.php)(/.+)$;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
a mi archivo de configuración personalizado, por ejemplo,
etc/nginx/sites-available/example.com.conf
Agregar a
/etc/nginx/sites-available/default
no funcionó para mí.
Para cualquiera que tenga el mismo problema con PHP 7, esto es lo que hice para que nginx ejecute los archivos php correctamente en CentOS 7, publicado aquí, así que en caso de que alguien tenga el mismo problema:
-
Siga paso a paso este documento sobre Digital Ocean .
-
Abra
/etc/nginx/conf.d/default.conf
(por defecto no tengo sitios habilitados ni sitios disponibles, puede editar en consecuencia). -
Edite el parámetro de
location
siguiente manera:
default.conf :
location ~ /.php$ {
try_files $uri =404;
#fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
#instruct nginx execute php7 files instead download them :D
fastcgi_pass unix:/var/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
-
Reinicie los servicios Nginx y PHP
sudo systemctl restart php-fpm
ysudo systemctl restart nginx
. -
Por último, pero lo más importante, borrar la memoria caché del navegador o ejecutarse en modo
incognito (Chrome)
oPrivate Browsing (Firefox)
etc.
Espero que esta útil y feliz codificación
Para mí fue la línea: fastcgi_pass unix: /var/run/php5-fpm.sock;
que tenía que ser solo: fastcgi_pass unix: /run/php5-fpm.sock;
Para mí, me ayudó agregar
?$query_string
al final de /index.php, como a continuación:
location / {
try_files $uri $uri/ /index.php?$query_string;
}
Prueba esto:
-
Editar
/etc/nginx/sites-available/default
-
Elimine el comentario de ambas líneas de escucha para que nginx escuche en el puerto 80 IPv4 e IPv6.
listen 80; ## listen for ipv4; this line is default and implied listen [::]:80 default_server ipv6only=on; ## listen for ipv6
-
Deje solo
server_name
# Make site accessible (...) server_name localhost;
-
Agregue
index.php
a la línea deindex
root /usr/share/nginx/www; index index.php index.html index.htm;
-
location ~ /.php$ {}
comentarioslocation ~ /.php$ {}
# pass the PHP scripts to FastCGI server listening on (...) # location ~ /.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+/.php)(/.+)$; # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini # With php5-cgi alone: #fastcgi_pass 127.0.0.1:9000; # With php5-fpm: fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; }
-
Edite
/etc/php5/fpm/php.ini
y asegúrese de quecgi.fix_pathinfo
esté establecido en0
-
Reinicie nginx y php5-fpm
sudo service nginx restart && sudo service php5-fpm restart
Acabo de comenzar a usar Linux hace una semana, así que realmente espero ayudarte en esto. Estoy usando nano editor de texto para editar los archivos. ejecute apt-get install nano si no lo tiene. Google en él para saber más.
Resolví mi problema ahora con este código (cambie su IP):
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /var/www/html;
index index.php index.html index.htm;
location ~ /.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
}
}
Si algo más no te ayuda. Y tal vez antes instaló apache2 con el archivo de prueba info.php. Simplemente borre los Datos de la aplicación (caché, cookie) para localhost.
Si alguna de las respuestas propuestas no funciona, intente esto:
1.fix www.conf en etc / php5 / fpm / pool.d:
listen = 127.0.0.1:9000;(delete all line contain listen= )
2.fix nginx.conf en usr / local / nginx / conf:
remove server block server{} (if exist) in block html{} because we use server{} in default (config file in etc/nginx/site-available) which was included in nginx.conf.
3. corrige el archivo predeterminado en etc / nginx / site-available
location ~ /.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi_params; }
4. reinicie el servicio nginx
sudo service nginx restart
5. reiniciar el servicio de php
servicio php5-fpm reiniciar
6 disfruta
Cree cualquier archivo php en / usr / share / nginx / html y ejecútelo en "server_name / file_name.php" (server_name depende de su configuración, normalmente es localhost, file_name.php es el nombre del archivo que se creó en / usr / share / nginx / html).
Estoy usando Ubuntu 14.04
Tuve el mismo problema y ninguna de las respuestas resolvió el problema.
Corrí:
sudo nginx -t
para probar el archivo de configuración en / etc / nginx / sites-available / default.
Me dio estos errores:
nginx: [emerg] unexpected end of file, expecting "}" in /etc/nginx/sites-enabled/default:115
nginx: configuration file /etc/nginx/nginx.conf test failed
Así que entré en el archivo de configuración y en la última línea había
#}
Descomenté, ejecuté el comando de prueba nuevamente y funcionó
Tuve el mismo problema, lo que resolvió fue que este bloque de servidor también tiene este bloque por encima de otros bloques de ubicación si tiene problemas de carga de CSS. Lo que agregué a mi archivo de conf de sitios disponibles.
location /vendors { rewrite ^/vendors/?$ /vendors.php break; }
Tuve un problema similar que se resolvió vaciando la memoria caché del navegador (también funcionó bien con un navegador diferente).
Veo muchas soluciones arriba y muchas funcionaron correctamente para mí, pero no entendí lo que estaban haciendo y me preocupaba simplemente copiar y pegar el código, específicamente fastcgi . Así que aquí están mis 2 centavos,
- nginx es un navegador web (y no un navegador de aplicaciones ) y, por lo tanto, solo puede servir páginas estáticas.
- cada vez que intentemos renderizar / devolver un archivo .php, por ejemplo index.php, nginx no sabe qué hacer, ya que simplemente no puede entender un archivo .php (o para el caso, cualquier extensión aparte de unos pocos seleccionados como .html, .js, etc., que son archivos estáticos)
- Por lo tanto, para ejecutar otros tipos de archivos, necesitamos algo que se encuentre entre nginx y la aplicación (aquí la aplicación php). Aquí es donde entra en juego la interfaz de puerta de enlace común (CGI). Es un software que gestiona esta comunicación. Los CGI se pueden implementar en cualquier lenguaje posible Python (uWSGI), PHP (FPM) e incluso C. FastCGI es básicamente una versión mejorada de CGI que es mucho más rápido que CGI.
Para algunos, servidores como Apache, hay soporte incorporado para interpretar PHP y, por lo tanto, no es necesario un CGI.
Este enlace digital del océano explica los pasos para instalar FPM bastante bien y no estoy escribiendo los pasos necesarios para resolver el problema de la descarga de archivos php en lugar de renderizar, ya que el otro responde en mi humilde opinión bastante bien.
compruebe que su extensión de archivo de configuración nginx es * .conf.
por ejemplo: /etc/nginx/conf.d/myfoo.conf
Tengo la misma situación. Después de cambiar el nombre de mi archivo de configuración de myfoo a myfoo.conf, se solucionó. No olvide reiniciar nginx después de cambiarle el nombre.
para un registro, descubrí que mi php-fpm no se estaba ejecutando y lo arreglé con el
service php7.2-fpm stop
Actualice nginx config / etc / nginx / sites-available / default o su archivo de configuración
si estás usando php7 usa esto
location ~ /.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
si estás usando php5 usa esto
location ~ /.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
Visite aquí para obtener detalles completos Detalle aquí
Descomente la ubicación .php en / etc / nginx / sites-available / default
sudo vi / etc / nginx / sites-available / default:
sudo apt-get install php-gettext
sudo nano /etc/nginx/sites-available/default
location ~ /.php$ {
include snippets/fastcgi-php.conf;
# With php5-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
Los fragmentos anteriores funcionaron para mí en caso de php7.2