前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >nginx平滑添加stream模块

nginx平滑添加stream模块

作者头像
随心助手
发布2019-10-15 11:22:38
8.9K0
发布2019-10-15 11:22:38
举报
文章被收录于专栏:nginx遇上redisnginx遇上redis

1、操作背景

代码语言:javascript
复制
操作系统版本:CentOS Linux release 7.4.1708 (Core)
nginx版本:1.13.4
nginx从1.9.0版本开始,新增了ngx_stream_core_module模块,使nginx支持四层负载均衡。默认编译的时候该模块并未编译进去,需要编译的时候添加--with-stream,使其支持stream代理。

2、nginx编译添加stream模块

2.1、查看原nginx编译参数

代码语言:javascript
复制
[root@test-server sbin]# nginx -V
nginx version: nginx/1.13.4
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module 
--with-http_gzip_static_module --http-client-body-temp-path=/usr/local/nginx/tmp/client/ 
--http-proxy-temp-path=/usr/local/nginx/tmp/proxy/ --http-fastcgi-temp-path=/usr/local/nginx/tmp/fcgi/ 
--with-poll_module --with-file-aio --with-http_realip_module --with-http_addition_module 
--with-http_addition_module --with-http_random_index_module --with-http_stub_status_module 
--http-uwsgi-temp-path=/usr/local/nginx/uwsgi_temp --http-scgi-temp-path=/usr/local/nginx/scgi_temp 
--with-pcre=/usr/local/src/pcre-8.41

2.2、添加stream模块进行重新编译

代码语言:javascript
复制
此处nginx源码目录为:/usr/local/src/nginx-1.13.4,即为编译命令执行目录。
 
编译命令如下:./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module 
--with-http_gzip_static_module --http-client-body-temp-path=/usr/local/nginx/tmp/client/ 
--http-proxy-temp-path=/usr/local/nginx/tmp/proxy/ --http-fastcgi-temp-path=/usr/local/nginx/tmp/fcgi/ 
--with-poll_module --with-file-aio --with-http_realip_module --with-http_addition_module 
--with-http_addition_module --with-http_random_index_module --with-http_stub_status_module 
--http-uwsgi-temp-path=/usr/local/nginx/uwsgi_temp 
--http-scgi-temp-path=/usr/local/nginx/scgi_temp --with-pcre=/usr/local/src/pcre-8.41 --with-stream

2.3、进行make操作

代码语言:javascript
复制
此处nginx源码目录为:/usr/local/src/nginx-1.13.4,即为编译命令执行目录。
make

此处一定不能使用make install命令,执行该命令会将原有nginx目录进行覆盖。

3、关停nginx同时复制新的nginx启动文件

代码语言:javascript
复制
关闭nginx服务
systemctl stop nginx
 
备份原有nginx二进制文件。
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx-no-strem
 
复制新编译好的nginx二进制文件。从此处nginx源码目录为:/usr/local/nginx-1.13.4。即为编译命令执行目录。
cp ./objs/nginx /usr/local/nginx/sbin/nginx

4、启动测试

代码语言:javascript
复制
启动nginx。
systemctl start nginx

查看nginx模块信息。
nginx -V
nginx version: nginx/1.13.4
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --user=www --group=www 
--with-http_ssl_module --with-http_gzip_static_module 
--http-client-body-temp-path=/usr/local/nginx/tmp/client/ 
--http-proxy-temp-path=/usr/local/nginx/tmp/proxy/ 
--http-fastcgi-temp-path=/usr/local/nginx/tmp/fcgi/ 
--with-poll_module --with-file-aio --with-http_realip_module 
--with-http_addition_module --with-http_addition_module 
--with-http_random_index_module --with-http_stub_status_module 
--http-uwsgi-temp-path=/usr/local/nginx/uwsgi_temp 
--http-scgi-temp-path=/usr/local/nginx/scgi_temp 
--with-pcre=/usr/local/src/pcre-8.41 --with-stream

可以看到stream模块已经编译到nginx内了。

5、nginx stream模块配置简析

代码语言:javascript
复制
stream段的配置要与http段在同级目录。此处引用的为官方nginx说明配置。
stream {
    upstream backend {
        hash $remote_addr consistent;

        server backend1.example.com:12345 weight=5;
        server 127.0.0.1:12345            max_fails=3 fail_timeout=30s;
        server unix:/tmp/backend3;
    }

    upstream dns {
       server 192.168.0.1:53535;
       server dns.example.com:53;
    }

    server {
        listen 12345;
        proxy_connect_timeout 1s;
        proxy_timeout 3s;
        proxy_pass backend;
    }

    server {
        listen 127.0.0.1:53 udp reuseport;
        proxy_timeout 20s;
        proxy_pass dns;
    }

    server {
        listen [::1]:12345;
        proxy_pass unix:/tmp/stream.socket;
    }}

举一个栗子,利用stream模块代理 zk服务的2181端口

代码语言:javascript
复制
stream {
    upstream zk_server {
        server 172.16.3.8:2181 weight=5;
    }
    server {
        listen 2181 tcp;
        proxy_responses 1;
        proxy_timeout 20s;
        proxy_pass zk_server;
    }}

6、编译nignx systemd服务启动文件

代码语言:javascript
复制
[Unit]Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/After=network.target remote-fs.target nss-lookup.target

[Service]Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true[Install]
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 nginx遇上redis 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档