nginx的tcp/udp代理


nginx從1.9.0版本開始,新增了ngx_stream_core_module模塊,使nginx支持四層代理和負載均衡。
默認編譯時該模塊未編譯進去,需要編譯時添加 --with-stream,--with-stream_ssl_module,使其支持stream代理。
在之前的版本如果想支持,需要打補丁,安裝模塊nginx_tcp_proxy_module。

http代理,通常就是我們說的七層代理,工作在第七層應用層。
而tcp代理,就是我們常說的四層代理,工作在網絡層和傳輸層。

一、查看nginx是否安裝stream模塊

2>&1 nginx -V | tr ' ' '\n'|grep stream

如果出現下面兩項,說明支持

--with-stream
--with-stream_ssl_module

  

二、tcp代理(代理mysql為例)

1、tcp代理與我們平常說的網站反向代理不一樣,它是基於tcp,udp協議。
2、stream反向代理模塊與http和events是平級的,不要把配置寫到http里面了。

為了方便添加stream配置,我們單獨在nginx/conf目錄創建一個stream目錄,存放tcp代理配置文件。


然后在 nginx.conf 中加入如下:

stream {
    proxy_connect_timeout 3s;
    include stream/*conf;
}

注意,不要加在http配置里了。

然后我們在nginx/conf/stream下創建一個mysql.conf配置文件。

upstream mysql {
    server 192.168.10.46:3306;
}
server {
    listen 3306;
    proxy_connect_timeout 3s;
    proxy_timeout 3s;
    proxy_pass mysql;
}

然后重載nginx

/usr/local/nginx/sbin/nginx -s reload  

當我們訪問本地的3306端口時,會自動代理到192.168.10.46主機的3306端口上。

 

三、實現SSH轉發

在nginx/conf/stream下創建一個ssh.conf配置文件。

upstream ssh {
    server 0.0.0.0:22;
}

server {
    listen 22122;
    proxy_pass ssh; 
}

實現了訪問主機的22122端口,會自動代理到22端口。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM