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端口。