nginx: [emerg] unknown directive “stream“ in /etc/nginx/nginx.conf

在nginx中做tcp端口转发时,在nginx中加入

# 四层负载不在http模块里面,和http模块同级别
stream {
    upstream mysql {
	server 127.0.0.1:3306;
    }

    upstream redis {
        server 127.0.0.1:6379;
    }

    upstream mongodb {
        server 127.0.0.1:27017;
    }

    server {
        listen 61306;
        proxy_connect_timeout  10s;
        proxy_timeout  30s;
        proxy_pass  mysql;
    }

    server {
        listen 61379;
        proxy_connect_timeout  10s;
        proxy_timeout  30s;
        proxy_pass  redis;
    }

    server {
        listen 27018;
        proxy_connect_timeout  10s;
        proxy_timeout  30s;
        proxy_pass  mongodb;
    }

}

nginx默认不带stream的,或者默认不加载stream,直接添加可能会有如下错误提示:

image

解决方法:

网上的解决方案都是说要根据nginx源码重新编译什么的,这个不太适合与正在运行的项目,可以采用以下方案实施

(1)第一步:yum -y install epel-release
(2)第二步:yum -y install nginx-all-modules.noarch

执行完成后,会得到如下内容:
image

查看nginx.conf是否有此项:

include /usr/share/nginx/modules/*.conf;
# /usr/share/nginx/modules 应该包含有 mod-stream.conf

如果没有,可手动增加至nginx.conf:

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

配置好后:
image

就可以执行nginx重载了

posted @ 2024-08-29 13:19  ddgo's  阅读(1281)  评论(0编辑  收藏  举报
.