miércoles, 6 de marzo de 2019

nginx: [emerg] unknown directive "stream"



Cómo solucionar el error nginx: [emerg] unknown directive "stream" in /etc/nginx/nginx.conf:72



Recientemente me han pedido realizar un cambio de configuración en un nginx que usamos como reverse proxy. Antes de incluir los nuevos parámetros en el archivo nginx.conf, he decidido actualizar todos los paquetes del sistema operativo que sirve de base, ya que hacía días que no se actualizaba. Al hacerlo, me he encontrado con el siguiente cambio, al cual no he dado importancia:

The following package is going to change vendor: nginx Nginx, Inc. -> openSUSE

Una vez actualizado el sistema operativo, he añadido los parámetros que me han pedido a la configuración de nginx y al ejecutar nginx -s reload me he encontrado con el siguiente error:

HOST# nginx -s reload nginx: [emerg] unknown directive "stream" in /etc/nginx/nginx.conf:72

He probado entonces a reiniciar el servicio nginx, y el servicio ha fallado:

HOST# service nginx restart Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.

Llegados a este punto, he buscado por internet y he visto que la forma en que la nueva versión de nginx ha sido compilada carga el módulo stream de forma dinámica en vez de hacerlo de forma estática.
Lo podemos ver mirando los parámetros de la versión de nginx que tenemos instalada:

HOST# nginx -V nginx version: nginx/1.14.2 built by gcc 4.8.3 20140627 [gcc-4_8-branch revision 212064] (SUSE Linux) built with OpenSSL 1.0.1i-fips 6 Aug 2014 (running with OpenSSL 1.0.2j-fips 26 Sep 2016) TLS SNI support enabled [...] --with-stream=dynamic

Lo que nos interesa es:

--with-stream=dynamic

Para hacer que nginx cargue el módulo stream de forma estática en vez de hacerlo de forma dinámica, debemos llamar al módulo desde nginx.conf con la siguiente línea:

load_module /usr/lib64/nginx/modules/ngx_stream_module.so;

Luego de añadir esta línea en nginx.conf, ya podremos realizar un reinicio del servicio normalmente:

HOST# nginx -s reload HOST# service nginx restart

A partir de este momento, ya podremos hacer reloads de nginx o reiniciar el servicio sin problemas.


Fuentes:

https://serverfault.com/questions/858067/unknown-directive-stream-in-etc-nginx-nginx-conf86
0

0 comentarios:

Publicar un comentario