题 /etc/nginx/nginx.conf:86中的未知指令“stream”


我有nginx / 1.12.0,并且根据文档它包含流模块。我已经使用以下命令安装了nginx。

sudo add-apt-repository ppa:nginx/stable
sudo apt-get update
sudo apt-get install nginx
nginx -v
nginx version: nginx/1.12.0

我试图在nginx.conf中添加stream指令

stream {
    upstream sys {
        server 172.x.x.x:9516;
        server 172.x.x.x:9516;
    }
    server {
        listen 9516 udp;
        proxy_pass sys;
    }
}

但是当我重新启动nginx时,我在nginx日志中遇到错误

unknown directive "stream" in /etc/nginx/nginx.conf:86

nginx -V output

nginx版本:nginx / 1.12.0 使用OpenSSL 1.0.1f构建2014年1月6日 启用了TLS SNI支持 配置参数: - with-cc-opt =' - g -O2 -fPIE -fstack-protector --param = ssp -buffer-size = 4 -Wformat -Werror = format-security -fPIC -D_FORTIFY_SOURCE = 2' - with-ld-opt =' - Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now -fPIC'-prefix = / usr / share / nginx --conf- path = / etc / nginx / nginx.conf --http-log-path = / var / log / nginx / access.log --error-log-path = / var / log / nginx / error.log --lock- path = / var / lock / nginx.lock --pid-path = / run / nginx.pid --modules-path = / usr / lib / nginx / modules --http-client-body-temp-path = / var / lib / nginx / body --http-fastcgi-temp-p ath = / var / lib / nginx / fastcgi --http-proxy-temp-path = / var / lib / nginx / proxy --http-scgi-temp-path = / var / lib / nginx / scgi --http-uwsgi-temp-path = / var / lib / nginx / uwsgi --with-debug - -with-pcre-jit --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_v2 _module --with-http_dav_module --with-http_slice_module --with-threads - 与 - http_addition_module --with-http_geoip_module = dynamic --with-http_gunzip_modul e --with-http_gzip_static_module --with-http_image_filter_module = dynamic --wit h-http_sub_module --with-http_xslt_module = dynamic --with-stream = dynamic --with - stream_ssl_module --with-stream_ssl_preread_module --with-mail = dynamic --with -mail_ssl_module --add-dynamic-module = / build / nginx-ZgS12K / nginx-1.12.0 / debian / modules / nginx-auth-pam - 附加动态模块= /建造/ nginx的-ZgS12K / nginx的-1.12.0 / d ebian / modules / nginx-dav-ext-module --add-dynamic-module = / build / nginx-ZgS12K / ng inx-1.12.0 / debian / modules / nginx-echo --add-dynamic-module = / build / nginx-ZgS12K / nginx-1.12.0 / debian / modules / nginx-upstream-fair --add-dynamic-module = / build / ng inx-ZgS12K / nginx-1.12.0 / debian / modules / ngx_http_substitutions_filter_module

我搜索了这个错误,有些人说我必须单独安装/配置这个模块。有人说它附带nginx 1.12.0版本。有些人可以建议我如何在已经安装的Nginx上安装/配置这个模块。

问候 VG


5
2018-06-27 07:45




Nginx是否启用了流模块?请发布输出 nginx -V。 - Joe Brailsford
谢谢Joe,所以我更新了我的问题并粘贴了我的nginx -V输出。 - user3332404
在/ usr / LIB / nginx的/模块I可以看到以下模块ngx_http_image_filter_module.so ngx_http_geoip_module.so ngx_http_echo_module.so ngx_http_dav_ext_module.so ngx_http_auth_pam_module.so ngx_stream_module.so ngx_mail_module.so ngx_http_xslt_filter_module.so ngx_http_upstream_fair_module.so ngx_http_subs_filter_module.so - user3332404


答案:


流模块将按动态添加,如下所示:

--with-stream=dynamic

你需要它是'静态' - 所以直接加载模块。为此,请在nginx.conf的最顶部添加以下内容:

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

然后:

nginx -t

如果一切顺利:

nginx -s reload
service nginx restart

编辑:

-s signal' Send signal to the master process. The argument signal can be one of: stop, quit, reopen, reload. The following table shows the corresponding system signals.

stop' SIGTERM
quit' SIGQUIT
reopen' SIGUSR1
reload' SIGHUP

9
2018-06-27 08:17



真棒!没有更多的错误。非常感谢Joe,你是我的救世主.BTW什么是nginx -s实际上在运行时我得到以下错误nginx:选项“-s”需要参数 - user3332404
我编辑了我的答案,我错过了一点。 nginx -s reload重新加载主进程 - 服务重启基本上做同样的事情。 - Joe Brailsford
什么是 stream 模块要去做什么?有什么用呢 - Satish
@JoeBrailsford有没有什么方法可以自动化这个过程bcoz EC2实例对于EBS来说不是永久性的,如果你能解释为什么Steam模块需要静态工作 - Bikash


没有足够的声誉评论乔的答案,所以写在这里:

在CentOS7上,模块路径位于lib64文件夹下。所以,你需要添加这一行:

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

0
2017-07-23 12:16