Tengo problemas para ejecutar archivos PHP en mi máquina de desarrollo local. Parece que lo he instalado exitosamentenginxyphp-fpmTambién parece estar correctamente instalado y ejecutándose, pero no puedo entender por qué los archivos PHP se descargan en lugar de ejecutarse.
Después de muchas, muchas horas defrustración¡Pensé que sería mejor preguntarle a alguien que tal vez hubiera hecho esto antes! He hecho todo lo posible para brindar toda la información, pero si hay algo que pueda ser útil o que me haya perdido,por favor no dudes en preguntaren los comentarios.
Tenga en cuenta:Lea atentamente sobre el problema que tengo. La razón por la que digo esto es porque he leído casi todos los artículos posibles relacionados con este problema que Google puede brindarme y he probado varias formas diferentes, correcciones, sugerencias, reinstalaciones, configuraciones, etc. Ninguno de ellos ha podido ayudar. solucionar o incluso depurar el problema que estoy experimentando. En otras palabras, esta definitivamente no es una pregunta duplicada. ¡He pasado algunas horas leyendo para asegurarme!
Lo he instalado exitosamentenginxyphp-fpmusando https://github.com/josegonzalez/homebrew-php
. El buen y confiable brew doctor
confirma que todo está actualizado y que tengo todo lo necesario instalado (XQuartz, herramientas de línea de comandos Xcode, etc.).
A continuación se muestran algunos extractos de archivos que pueden resultar útiles al intentar comprender mi configuración:
registro de php-fpm
tail -f /usr/local/var/log/php-fpm.log
[24-Dec-2013 00:05:59] NOTICE: [pool www] 'user' directive is ignored when FPM is not running as root
[24-Dec-2013 00:05:59] NOTICE: [pool www] 'group' directive is ignored when FPM is not running as root
[24-Dec-2013 00:05:59] NOTICE: fpm is running, pid 31745
[24-Dec-2013 00:05:59] NOTICE: ready to handle connections
Corríjame si me equivoco, pero esto parece mostrar que php-fpm se está ejecutando correctamente.
el único cambio en mi archivo de configuración php-fpm
/usr/local/etc/php/5.4/php-fpm.conf
de la línea 145
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
user = myusername
group = staff
La razón por la que he cambiado esto myusername:staff
es porque así es como se configura usuario:grupo en mi ~
directorio. Esto puede ser parte del problema, no estoy seguro.
De hecho, me he encontrado con todos los problemas habituales de permisos de archivos y puedo confirmar que todos mis archivos dentro de /clients/mywebsite/local han solucionado este problema usando chown -R myusername:staff ./
y chmod -R 0755 ./
. Teniendo esto en cuenta, con suerte, esto no debería ser un problema de permisos.
archivo de configuración nginx
/usr/local/etc/nginx/nginx.config
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 8080;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.php index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443;
# server_name localhost;
# ssl on;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_timeout 5m;
# ssl_protocols SSLv2 SSLv3 TLSv1;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
Las únicas partes que he cambiado del archivo original ubicado en /usr/local/etc/nginx/nginx.conf.default es agregar index.php al location / {
bloque y descomentar el location ~ \.php$ {
bloque para permitir el procesamiento php-fpm de .php
los archivos.
También vale la pena mencionar que creé un /usr/local/etc/nginx/conf.d/mywebsite.conf
archivo y lo agregué 127.0.0.1 mywebsite.local
a mi archivo de hosts que me permite acceder http://mywebsite.local
.
Nginx parece estar configurado correctamente ya que puedo acceder a http://mywebsite.local/test.html
todos los archivos de mi /clients/mywebsite/local/web/test.html
carpeta, pero para los archivos PHP, esta es una historia diferente. El navegador simplemente los descarga como un archivo PHP, no se ejecutan en absoluto.
archivo de configuración de mi sitio web
/usr/local/etc/nginx/conf.d/mywebsite.conf
server {
listen 80;
listen [::]:80 default ipv6only=on;
server_name mywebsite.local;
location / {
root /clients/mywebsite/local/web;
index index.php index.html index.htm;
}
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
Supongo que se sobrescribirán todas las partes aquí http://mywebsite.local
y que todo lo que no esté aquí se tomará del /usr/local/etc/nginx/nginx.conf
archivo normal.
También vale la pena decir que mi /usr/local/var/log/nginx/error.log
archivo no devuelve ningún error. Cada vez que hago un cambio en los .conf
archivos, reinicio nginx usando el comando sudo nginx -s reload
y puedo confirmar php-fpm
que nginx
los procesos se están ejecutando.
También leí sobre cambiar 127.0.0.1:9000
a /var/run/php5-fpm/php5-fpm.sock
lo que no parece estar en mi configuración. Intenté usar find
incluso usar ack
para buscar su existencia pero no está en mi máquina. También leí acerca de cambiar este puerto a otro que no sea :9000
si ya se está utilizando. Como esta es mi primera instalación, estoy bastante seguro de que este no es el caso, pero ¿cómo haría para probarlo?
También leí sobre otro archivo ubicado en /usr/share/nginx/html
pero nuevamente este no existe.
Bueno, has leído hasta aquí, ¡así que gracias! Si puedes ayudar de alguna manera, realmente aprecio tu tiempo para hacerlo.
Respuesta1
En lugar de especificar la sección PHP en el archivo nginx.conf, ¿puede especificar una ubicación del servidor en el archivo predeterminado (dentro del directorio de sitios disponibles) y recargar o reiniciar nginx?
server {
listen 80;
listen [::]:820; #ipv6only=on;
root /var/www/; ##assuming your PHP application is in /var/www/
index index.php index.html index.htm;
server_name PHPApp;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
Además, asegúrese de que su archivo nginx.conf tenga la siguiente directiva:
include /etc/nginx/sites-enabled/*;
Respuesta2
Creo que el problema es que no tienes un upstream para decirle a nginx dónde enviar archivos php, algo como esto en tu bloque http:
upstream php {
server unix:/var/run/php-fpm.socket;
}
donde unix:/var/run/php-fpm.socket
se debe indicar en la directiva listening de php config.
Por cierto: no es una buena práctica tenerraíz dentro de un bloque de ubicaciónnimúltiples directivas de índice.