Estoy ejecutando un servidor con nginx 1.12.2 y PHP 7.0.27 en Debian 8.10, estoy ejecutando dos sitios web con grupos PHP-FPM separados para cada aplicación PHP separada que ejecuta cada sitio. Cada grupo PHP-FPM y, por lo tanto, cada aplicación PHP se ejecuta bajo su propio usuario con nginx ejecutándose como www-data.
A veces (creo que son momentos de alta carga) recibo ráfagas de errores de PHP sobre problemas al leer y escribir los archivos de sesión en permisos, por ejemplo:
2018/02/21 02:07:19 [error] 11723#11723: *804992 FastCGI sent in stderr: "PHP message: PHP Warning: Unknown: open(/var/lib/php/sessions/sess_<session id here>, O_RDWR) failed: Permission denied (13) in Unknown on line 0 PHP message: PHP Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/var/lib/php/sessions) in Unknown on line 0" while reading upstream, client: 34.242.193.225, server: example.org, request: "GET /somepage HTTP/1.1", upstream: "fastcgi://unix:/run/php/php7.0-fpm-site-app.sock:", host: "example.org"
Hasta donde puedo decir, los permisos son correctos ya que veo sesiones en la carpeta de ambos usuarios de PHP.
Si ejecuto ls -alF en el nombre de archivo proporcionado en el mensaje de error poco después de que aparezca en el archivo de registro, el archivo estará allí pero será propiedad del usuario del otro sitio (con contenidos que sugieren que es para una sesión de el otro sitio), lo que me sugiere que ambas aplicaciones que se ejecutan en dominios separados han generado el mismo ID de sesión y una logra escribir correctamente su archivo, y la otra falla porque el archivo es propiedad del usuario del otro sitio. Según tengo entendido, las posibilidades de que ambos sitios generen el mismo ID de sesión sean prácticamente imposibles.
Si bien creo que puedo resolver los síntomas configurando rutas de sesión separadas para cada grupo, no creo que esto resuelva el problema subyacente que podría estar causando otros problemas en el servidor que aún no he notado.
Respuesta1
En realidad, esto es un problema de software, no nginx
o php-fpm
, y si está ejecutando el mismo software en dos procesos, no sería imposible causar colisiones. Un vistazo rápido a la documentación sugiere que si bien existe una detección de colisiones para una sola aplicación, dos procesos separados en diferentes espacios de usuario no harían esto. La solución más sencilla sería configurar session.save_path
de forma diferente para cada grupo.