ec2 - nginx is available in amazon linux extra s nginx1 12
PHP-FPM y Nginx: 502 Bad Gateway (14)
Antes de jugar con la configuración de Nginx, intente desactivar ChromePHP primero.
1 - Abrir app / config / config_dev.yml
2 - Comenta estas líneas:
chromephp:
type: chromephp
level: info
ChromePHP incluye la información de depuración json codificada en el encabezado X-ChromePhp-Data, que es demasiado grande para la configuración predeterminada de nginx con fastcgi.
Configuración
- Ubuntu Server 11.10 64 bit
- Amazon AWS, Ec2, alojado en la nube
- instancia de t1.micro
Antes de escribir algo más, me gustaría decir que he comprobado tanto la pasarela Nginx 502 como la Nginx + PHP-FPM 502 Bad Gateway , que desafortunadamente no me han ayudado a este respecto.
El problema parece ser bastante común: una configuración incorrecta de nginx o php-fpm puede conducir a un error 502 Bad Gateway
, que es algo de lo que no he podido deshacerme. Tenga en cuenta que esto aparece incluso cuando voy a la raíz de mi dominio , sin especificar ningún directorio en particular.
Estoy ejecutando un servidor web Amazon EC2, con el puerto 9000 habilitado, el puerto 80 abierto, etc.
La pregunta en particular es, ¿cómo puedo deshacerme de este desagradable error? O mejor aún, ¿cómo puedo obtener php5-fpm
para que realmente funcione ?
Lo que he intentado hasta ahora
La mayoría consiste en la edición de archivos de configuración, especialmente php-fpm.conf
y nginx.conf
.
yo. php-fpm.conf
He agregado lo siguiente, que no ha ayudado mucho:
;;;;;;;;;;;;;
; Fpm Start ;
;;;;;;;;;;;;;
;pm.start_servers = 20
;pm.min_spare_servers = 5
;pm.max_spare_servers = 35
Ahora, después intenté incluir mis archivos de configuración:
include=/etc/php5/fpm/*.conf
Lo cual solo me fastidió aún más.
Configuración completa
;;;;;;;;;;;;;;;;;;;;;
; FPM Configuration ;
;;;;;;;;;;;;;;;;;;;;;
; All relative paths in this configuration file are relative to PHP''s install
; prefix (/usr). This prefix can be dynamicaly changed by using the
; ''-p'' argument from the command line.
; Include one or more files. If glob(3) exists, it is used to include a bunch of
; files from a glob(3) pattern. This directive can be used everywhere in the
; file.
; Relative path can also be used. They will be prefixed by:
; - the global prefix if it''s been set (-p arguement)
; - /usr otherwise
;include=/etc/php5/fpm/*.conf
;;;;;;;;;;;;;;;;;;
; Global Options ;
;;;;;;;;;;;;;;;;;;
[global]
; Pid file
; Note: the default prefix is /var
; Default Value: none
pid = /var/run/php5-fpm.pid
; Error log file
; Note: the default prefix is /var
; Default Value: log/php-fpm.log
error_log = /var/log/php5-fpm.log
; Log level
; Possible Values: alert, error, warning, notice, debug
; Default Value: notice
log_level = notice
; If this number of child processes exit with SIGSEGV or SIGBUS within the time
; interval set by emergency_restart_interval then FPM will restart. A value
; of ''0'' means ''Off''.
; Default Value: 0
;emergency_restart_threshold = 0
; Interval of time used by emergency_restart_interval to determine when
; a graceful restart will be initiated. This can be useful to work around
; accidental corruptions in an accelerator''s shared memory.
; Available Units: s(econds), m(inutes), h(ours), or d(ays)
; Default Unit: seconds
; Default Value: 0
emergency_restart_interval = 0
; Time limit for child processes to wait for a reaction on signals from master.
; Available units: s(econds), m(inutes), h(ours), or d(ays)
; Default Unit: seconds
; Default Value: 0
;process_control_timeout = 0
; Send FPM to background. Set to ''no'' to keep FPM in foreground for debugging.
; Default Value: yes
daemonize = no
;;;;;;;;;;;;;
; Fpm Start ;
;;;;;;;;;;;;;
;pm.start_servers = 20
;pm.min_spare_servers = 5
;pm.max_spare_servers = 35
;;;;;;;;;;;;;;;;;;;;
; Pool Definitions ;
;;;;;;;;;;;;;;;;;;;;
; Multiple pools of child processes may be started with different listening
; ports and different management options. The name of the pool will be
; used in logs and stats. There is no limitation on the number of pools which
; FPM can handle. Your system will tell you anyway :)
; To configure the pools it is recommended to have one .conf file per
; pool in the following directory:
include=/etc/php5/fpm/pool.d/*.conf
ii . nginx.conf
Honestamente, esta configuración es un puñado de algunos sitios web que he visitado, pero puedo decirles que antes de este 502 negocio de Bad Gateway, el servidor funcionaba bien (sin PHP funcionando. Período).
El problema radica principalmente en el hecho de que algo es terriblemente, terriblemente mal. Y ahora, cuando trato de hacer un service php5-fpm restart
, se cuelga en lo que supongo que es un bucle infinito o algo así, del cual ni siquiera puedo salir CTRL - C .
Configuración completa
user www-data;
worker_processes 1;
pid /var/run/nginx.pid;
events {
worker_connections 64;
# multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush off;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
server {
listen 80;
server_name ec2-xx-xx-xx-xx.compute-x.amazonaws.com;
location ~ ^(.+/.php)(.*)$ {
root /home/wayvac/public;
fastcgi_pass unix:/var/run/php5-fpm.pid;
#fastcgi_pass 127.0.0.1:9000; #Un-comment this and comment "fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;" if you are not using php-fpm.
fastcgi_index index.php;
set $document_root2 $document_root;
if ($document_root2 ~ "^(.*////).*?[////|//]/././/(.*)$") { set $document_root2 $1$2; }
if ($document_root2 ~ "^(.*////).*?[////|//]/././/(.*)$") { set $document_root2 $1$2; }
if ($document_root2 ~ "^(.*////).*?[////|//]/././/(.*)$") { set $document_root2 $1$2; }
if ($document_root2 ~ "^(.*////).*?[////|//]/././/(.*)$") { set $document_root2 $1$2; }
if ($document_root2 ~ "^(.*////).*?[////|//]/././/(.*)$") { set $document_root2 $1$2; }
fastcgi_split_path_info ^(.+/.php)(.*)$;
fastcgi_param SCRIPT_FILENAME $document_root2$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root2$fastcgi_path_info;
include fastcgi_params;
fastcgi_param DOCUMENT_ROOT $document_root2;
}
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
root /home/wayvac/public;
index index.html index.htm index.php;
}
location ~* /.(?:ico|css|js|gif|jpe?g|png)$ {
# Some basic cache-control for static files to be sent to the browser
expires max;
add_header Pragma public;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
}
#include drop.conf;
#include php.conf;
}
}
Bien, después de probar cada solución en la web, termine investigando el problema usando un método muy simple, primero hice una prueba de php-fpm err log
cat /var/log/php5-fpm.log
y el error más repetido fue
" WARNING: [pool www] server reached pm.max_children setting (5), consider raising it "
Edito la configuración de pools PHP-fpm
nano /etc/php5/fpm/pool.d/www.conf
Yo chenged This Line
pm.max_children = 5
Al nuevo valor
pm.max_children = 10
Por cierto, estoy usando un VPS de gama baja con 128 MB de ram. Como todos los demás pensé en utilizar el pm.max_children
, mi servidor se ejecutará más rápido, consumiría menos memoria, pero los ajustes que usamos son demasiado bajos, incluso si iniciamos el proceso PHP-fpm. Espero que esto ayude a otros ya que encontré esto después de 24 horas de pruebas y fallas, nunca mi soporte de webhost fue capaz de resolver el problema.
Debería ver el registro de errores. Por defecto, su ubicación está en /var/log/nginx/error.log
En mi caso, 502 se abre camino debido a:
GET /app_dev.php HTTP/1.1", upstream: "fastcgi://unix:/run/php/php7.0-fpm.sock:", host: "symfony2.local"
2016/05/25 11:57:28 [error] 22889#22889: *3 upstream sent too big header while reading response header from upstream, client: 127.0.0.1, server: symfony2.local, request: "GET /app_dev.php HTTP/1.1", upstream: "fastcgi://unix:/run/php/php7.0-fpm.sock:", host: "symfony2.local"
2016/05/25 11:57:29 [error] 22889#22889: *3 upstream sent too big header while reading response header from upstream, client: 127.0.0.1, server: symfony2.local, request: "GET /app_dev.php HTTP/1.1", upstream: "fastcgi://unix:/run/php/php7.0-fpm.sock:", host: "symfony2.local"
2016/05/25 11:57:29 [error] 22889#22889: *3 upstream sent too big header while reading response header from upstream, client: 127.0.0.1, server: symfony2.local, request: "GET /app_dev.php HTTP/1.1", upstream: "fastcgi://unix:/run/php/php7.0-fpm.sock:", host: "symfony2.local"
Cuando sepamos exactamente qué es lo que está mal, arreglemoslo. Para estos errores, simplemente modifique el búfer:
fastcgi_buffers 16 512k;
fastcgi_buffer_size 512k;
El puerto se cambió a 9001 en 5.4, simplemente cambiando el puerto de 9000 a 9001 en nginx conf y en la configuración de php-fpm funcionó para mí.
En su archivo NGINX vhost, en el bloque de ubicación que procesa sus archivos PHP (generalmente location ~ /.php$ {
) a través de FastCGI, asegúrese de tener las siguientes líneas:
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
fastcgi_buffer_size 16k;
fastcgi_buffers 4 16k;
Después de eso, no te olvides de reiniciar fpm y nginx.
Adicional:
Vías de acceso de NGINX vhost
-
/etc/nginx/sites-enabled/
- Linux - ''/ usr / local / etc / nginx / sites-enabled /'' - Mac
Reinicie NGINX:
-
sudo service nginx restart
- Linux -
brew service restart nginx
- Mac
Reiniciar FPM:
Determine el nombre del proceso fpm: - systemctl list-unit-files | grep fpm
systemctl list-unit-files | grep fpm
- Linux - brew services list | grep php
brew services list | grep php
- Mac
y luego reiniciarlo con:
-
sudo service <service-name> restart
- Linux -
brew services restart <service-name>
- Mac
Espero que este consejo salve la vida de otra persona. En mi caso, el problema fue que me quedé sin memoria, pero solo ligeramente, era difícil pensarlo. Perdió 3 horas en eso. Recomiendo ejecutar:
sudo htop
o
sudo free -m
... junto con ejecutar solicitudes problemáticas en el servidor para ver si su memoria no se agota. Y si le gusta en mi caso, necesita crear un archivo de intercambio (a menos que ya tenga uno).
He seguido este tutorial para crear un archivo swap en Ubuntu Server 14.04 y funcionó perfectamente: http://www.cyberciti.biz/faq/ubuntu-linux-create-add-swap-file/
Hice todos estos ajustes similares, pero de vez en cuando recibía 501/502 errores (a diario).
Esta es mi configuración en /etc/php5/fpm/pool.d/www.conf para evitar los errores nginx 501 y 502 ... El servidor tiene 16 GB de RAM. Esta configuración es para un servidor de RAM de 8 Gb así que ...
sudo nano /etc/php5/fpm/pool.d/www.conf
luego configure los siguientes valores para
pm.max_children = 70
pm.start_servers = 20
pm.min_spare_servers = 20
pm.max_spare_servers = 35
pm.max_requests = 500
Después de esto, reinicie php-fpm
sudo service php-fpm restart
Intenta configurar estos valores, resuelve el problema en fast-cgi
fastcgi_buffer_size 16k;
fastcgi_buffers 4 16k;
Llego muy tarde a este juego, pero mi problema comenzó cuando actualicé php en mi servidor. Pude simplemente eliminar el archivo .socket y reiniciar mis servicios. Entonces, todo funcionó. No estoy seguro de por qué marcó la diferencia, ya que el archivo tiene el tamaño 0 y la propiedad y los permisos son los mismos, pero funcionó.
No olvides que php-fpm
es un servicio. Después de instalarlo, asegúrese de iniciarlo:
# service php-fpm start
# chkconfig php-fpm on
Para cualquier otra persona que esté luchando por llegar al fondo de esto, traté de ajustar los tiempos de espera según lo sugerido, ya que no quería dejar de usar los zócalos de Unix ... después de mucha resolución de problemas y no mucho más, descubrí que este problema estaba siendo causado por la extensión de APC que habilité en php-fpm hace unos meses. La desactivación de esta extensión resolvió los errores intermitentes 502, la manera más fácil de hacerlo fue comentando la siguiente línea:
;extension = apc.so
¡Esto hizo el truco para mí!
Si alguien encuentra esta página al encontrar el mismo problema que yo tuve, encontré la respuesta aquí: http://www.howtoforge.com/installing-nginx-with-php5-and-php-fpm-and-mysql-support-lemp-on-ubuntu-12.04-lts
Para aquellos de ustedes que no pueden molestarse en hacer clic y resolverlo por sí mismos ...;)
La condición:
El servidor Ubuntu o Debian con NGINX y PHP 5.3 funciona bien, pero actualizar PHP a 5.4 da 502 errores de puerta de enlace incorrecta. Buscar servicios que se ejecutan en el puerto 9000 (normalmente ejecutando netstat -lp
o similar) no devuelve nada.
La solución:
Abra /etc/php5/fpm/pool.d/www.conf
y anote el parámetro ''escuchar'' (en mi caso /var/run/php5-fpm.sock
):
; The address on which to accept FastCGI requests.
; Valid syntaxes are:
; ''ip.add.re.ss:port'' - to listen on a TCP socket to a specific address on
; a specific port;
; ''port'' - to listen on a TCP socket to all addresses on a
; specific port;
; ''/path/to/unix/socket'' - to listen on a unix socket.
; Note: This value is mandatory.
listen = /var/run/php5-fpm.sock
y reemplace la variable fastcgi_pass en su vhost con la ubicación que acaba de anotar.
Entonces, esta configuración de ejemplo de symfony2 (tomada de aquí: http://wiki.nginx.org/Symfony ):
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ ^/(app|app_dev)/.php(/|$) {
fastcgi_pass 127.0.0.1:9000;
fastcgi_split_path_info ^(.+/.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS off;
}
se convierte en esto:
# pass the PHP scripts to FastCGI server at /var/run/php5-fpm.sock
location ~ ^/(app|app_dev)/.php(/|$) {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_split_path_info ^(.+/.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS off;
}
Luego reinicie nginx:
sudo /etc/init.d/nginx restart
Nota: reemplace ~ ^/(app|app_dev)/.php(/|$) {
con ~ ^/index/.php(/|$) {
si no está en SF2 **
Espero que esto le ahorre a alguien un poco de tiempo :)
Editar
Por supuesto, puede cambiar listen = /var/run/php5-fpm.sock
para listen = 127.0.0.1:9000
en /etc/php5/fpm/pool.d/www.conf
y reiniciar php5-fpm (lo que haría evitará tener que cambiar sus fantasmas), pero debe suponer que cambiaron php5-fpm para ejecutar a través de un socket en lugar de escuchar en el puerto 9000 por algún motivo.
Edit2
Si todavía experimenta el error 502, vea esta respuesta: error de nginx connect to php5-fpm.sock failed (13: Permiso denegado)
Si se encontró con el problema después de actualizar php-fpm como yo, intente esto: abra /etc/php5/fpm/pool.d/www.conf descomenta las siguientes líneas:
listen.owner = www-data
listen.group = www-data
listen.mode = 0666
luego reinicie php-fpm.
También descubrí que este error puede deberse a la escritura de datos json_encoded () en MySQL. Para evitarlo, base64_encode () el JSON. Por favor, no cuando decodifica, la codificación JSON puede cambiar los valores. Nótese bien. 24 puede convertirse en 24.00