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