proxy_temp_path - ¿Cómo desactivar o especificar la ubicación del registro de errores nginx?
proxy_pass nginx example (6)
Yo mismo compilé el nginx en Ubuntu. Comienzo mi nginx con el parámetro -c nginx.conf. En mi archivo nginx.conf, trato de desactivar el registro de errores pero falló.
error_log /dev/null crit;
Aún recibí el mensaje de error: nginx: [alerta] no se pudo abrir el archivo de registro de errores: open () "/usr/nginx/logs/error.log" (2: no existe tal archivo o directorio)
¿Cómo podría desactivar este registro o cambiar su ubicación?
Acabo de resolver esto usando este parámetro de configuración:
./configure --prefix="$HOME/nginx" --error-log-path=/dev/stderr
Como nunca uso este nginx como demonio y siempre lo ejecuto en un shell, tiene sentido que registre errores en stderr.
La sintaxis para deshabilitar el registro de errores está bien, pero los docs indican que se usa un archivo de registro predeterminado antes de que se lea la configuración. (lo que parece razonable porque, de otro modo, ¿cómo le diría que tiene un error en su configuración)
Intente crear este archivo a mano con los permisos correctos para el usuario que ejecuta nginx. O intente iniciar el servidor como root.
No hay necesidad de usar un parámetro de línea de comando. Simplemente asegúrese de agregar la directiva error_log en la parte superior de nginx.conf o al menos antes de que se produzcan mensajes de error.
El comentario de nh2 de enero de 2016 sugiere que esta opción hubiera estado disponible durante al menos un par de años. Puedo confirmar que funciona y es menos molesto. La personalización de nginx.conf es menos probable que cause problemas con las actualizaciones de una instalación nginx empaquetada que las alternativas.
No puedes resolver el problema especificando un prefijo -p
; porque eso solo se aplicaría a las directivas en el archivo de configuración; y como RickyA ya notó, el problema es que hay un registro de errores compilado que nginx desea abrir incluso antes de que abra la configuración. Cambiar los permisos del registro de errores compilado no es ideal por razones obvias.
Una solución es especificar el registro de errores como una configuración en la línea de comandos:
$ nginx -p . -g ''error_log error.log;''
o
$ nginx -p . -g ''error_log stderr;''
Seguirá recibiendo una [alerta] pero al menos me permitió iniciar nginx como no root en Ubuntu.
Resolví este problema usando el parámetro -p al iniciar nginx, por ejemplo:
/home/ubuntu/nginx/sbin/nginx -c /home/ubuntu/nginx/conf/nginx.conf -p /home/ubuntu/nginx
Esto antepondrá cualquier ruta de registro especificada en la configuración con el directorio de prefijo.
Según esta publicación en la lista de correo de nginx.org (extracto citado a continuación), el %%ERROR_LOG_PATH%%
se establece como una opción de compilación, y se verifica inmediatamente en el inicio, lo que provoca la alerta "No se pudo abrir". Especificar el prefijo (con -p
) puede ayudar a suprimir la alerta, pero solo si el %%ERROR_LOG_PATH%%
se especificó como una ruta relativa en el momento de la compilación.
Puedes verificar cómo está especificado en tu ejecutable actual con
nginx -V 2>&1 | grep -oE ''error-log-path=/S*''
Es por eso que la solución propuesta por @Michael funciona para algunos, pero no para otros.
Ver registro de cambios:
Cambios con nginx 0.7.53
...
*) Cambio: ahora se crea un registro establecido por --error-log-path desde el inicio.
*) Característica: ahora los errores y advertencias de inicio se envían a error_log y stderr.
...
Ahora se compila en el valor error_log que siempre se usa para registrar errores en el momento de inicio (y emite una advertencia si nginx no puede abrirlo). Una vez que se haya leído el archivo de configuración, se utilizará error_log de configuración en su lugar.
Si ha compilado nginx con la ruta de error_log en relación con el prefijo, debería ser posible anular el inicio error_log mediante el interruptor -p.
Maxim Dounin