1. 程式人生 > >Nginx 配置TCP代理

Nginx 配置TCP代理

proxy worker timeout code 通過 啟動 Language sbin 查看

Nginx 配置TCP代理

nginx 的功能非常強大,其中作為代理服務器是非常常用的功能,但是之前的nginx代理只能做七層代理,也就說是基於應用層面的代理,TCP層面的代理一般會配合haproxy 來使用。但是自從nginx 1.9 以後通過stream模塊實現了tcp 代理功能,無需其他軟件配合即可實現四層代理和七層代理,即:訪問該服務器的指定端口,nginx就可以充當端口轉發的作用將流量導向另一個服務器,同時獲取目標服務器的返回數據並返回給請求者。nginx的TCP代理功能跟nginx的反向代理不同的是:請求該端口的所有流量都會轉發到目標服務器,而在反向代理中可以細化哪些請求分發給哪些服務器;另一個不同的是,nginx做TCP代理並不僅僅局限於WEB的URL請求,還可以轉發如memcached、MySQL等點到點的請求

環境

ip 主機名 端口 說明
192.168.1.101 node1 3389 nginx服務器
192.168.1.102 node2 ~ 客戶端
8.8.8.8 ~ 389 目標服務器

1.安裝nginx服務

1.1 安裝nginx

默認安裝stream模塊,我寫文檔時nginx版本為1.14.0
參考:RHEL/CentOS 安裝 nginx

1.2 對於已經安裝nginx的,檢查是否編譯時帶with-stream參數

[root@node1 ~]# nginx -V |grep with-stream

有with-stream參數,可以代理tcp協議

2 配置nginx的tcp代理

2.1 修改主配置文件,添加stream目錄

stream不屬於http模塊內的,需要配置在http 括號外層

[root@node1 ~]# cd /etc/nginx/
[root@node1 ~]# cp -a nginx.conf{,_$(date +%F)}
[root@node1 ~]# vim nginx.conf
# 最後追加如下內容
# tcp/ip proxy
include /etc/nginx/tcp_proxy.d/*.conf;

2.2 添加tcp轉發配置

[root@node1 ~]# mkdir tcp_proxy.d
[root@node1 ~]# cd tcp_proxy.d

在新建的 tcp_proxy.d 目錄下創建 conf 文件新建一個 tcp 配置,例如我轉發到IP為8.8.8.8的389端口

[root@node1 ~]# vim openldap.conf
stream{
    upstream testssh{
        hash $remote_addr consistent;
        server  8.8.8.8:389 max_fails=3 fail_timeout=10s;  
    }
    server{
        listen 3389;
        proxy_connect_timeout 20s;
        proxy_timeout 5m;
        proxy_pass testssh;
    }
}

這裏就是配置的監聽本地3389端口,會將流量相應轉發到8.8.8.8服務器的389端口上

測試配置文件是否正確

[root@node1 ~]# nginx -t -c /etc/nginx/nginx.conf
[root@node1 ~]# nginx -t -c /etc/nginx/tcp_proxy.d/openldap.conf

2.3 啟動nginx服務

啟動nginx服務

[root@node1 ~]# systemctl start nginx.service

查看是否啟動

[root@node1 ~]# systemctl status nginx.service
● nginx.service - nginx - high performance web server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
   Active: active (running) since Sat 2018-09-29 11:34:01 CST; 5h 37min ago
     Docs: http://nginx.org/en/docs/
 Main PID: 26114 (nginx)
   CGroup: /system.slice/nginx.service
           ├─26114 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
           └─26115 nginx: worker process

Sep 29 11:34:01 node1 systemd[1]: Starting nginx - high performance web server...
Sep 29 11:34:01 node1 systemd[1]: Started nginx - high performance web server.
[root@node1 ~]# 

3 客戶端配置

3.1 測試連接目標端口:

[root@node2 ~]# telnet 192.168.1.101 3389
Trying 192.168.1.101...
Connected to 192.168.1.101.
Escape character is ‘^]‘.

出現"Connected to 192.168.1.101",說明連接成功
測試完成,"Ctrl+C"結束

3.2 相關業務軟件配置

把要連接8.8.8.8:389的配置改為nginx服務器ip(192.168.1.101),及代理端口3389。

如果業務沒有出現問題的話,則說明已經配置完成了

END

Nginx 配置TCP代理