by administrador
Share
Hace un tiempo tuve que actualizar versiones de php5 y nginx en una serie de servidores y según los iba actualizando empezaban a aparecer errores 502 Bad Gateway en los servidores Nginx. Por lo general los errores 502 Bad Gateway responden a un intento de conectar a un backend que no está levantado o escuchando en donde le decimos.
Viendo que esto ocurría de repente, me fijé en que nginx estaba soltando los siguientes errores de permission denied en php5-fpm.sock:
connect() to unix:/var/run/php5-fpm.sock failed (13: Permission denied) while connecting to upstream
Sabiendo que estos servidores habían estado funcionando correctamente con anterioridad, el error de permisos en php5-fpm.sock debía de venir de la actualización propiamente.
En concreto lo que me encontré es que nginx había pasado de ejecutarse como www-data a un nuevo usuario nginx. El unix socket de php5 tenía permisos para www-data y ahí aparecía el conflicto. Para recapitular, veremos a continuación donde se configura el usuario con que se ejecutan tanto php5 como nginx en nuestro servidor:
Configurar usuario de nginx
Nginx se ejecuta con el usuario que le indiquemos en la directiva user dentro del archivo nginx.conf
user www-data;
Configurar usuario de PHP-FPM
PHP-FPM creará un socket con los permisos correspondientes a lo que le especifiquemos en las variables listen.owner, listen.group y listen.mode del archivo /etc/php5/fpm/pool.d/www.conf
listen = /var/run/php5-fpm.sock listen.owner = www-data listen.group = www-data listen.mode = 0666
Es importante conocer de antemano los cambios que introducen las actualizaciones de paquetes antes de subirlos a entornos de producción. En mi caso me encontré con estos problemas en un entorno de desarrollo.
Otra opción para sacar adelante el servicio de forma rápida habría sido levantar el PHP-FPM escuchando en un puerto TCP en vez de en un unix socket, pero eso exigiría editar todos los sites que tengamos configurados para cambiarles el backend php.
Este error también se puede manifestar con el siguiente mensaje en las peticiones de Nginx:
502 Bad Gateway
Nos encantaría recibir tus comentarios
Como resolver el Error 504 Gateway Timeout en Nginx. Cuales son las causas mas habituales y como resolverlo de forma rapida
Ordenar logs de visitas web por user agent.
Como sacar las cabeceras HTTP de respuesta con curl, wget y telnet
En nuestros primeros pasos con NginX a veces podemos encontrarnos los errores de server_names_hash y server_names_hash_bucket_size, que esta relacionado con la cantidad de virtual hosts que vamos a poder manejar.