背景
nginx從1.9.0開始,新增加了一個stream模塊,用來實現四層協議的轉發、代理或者負載均衡等。比如在內網有一個mysql服務,想暴露到公網上去使用,就可以通過nginx代理的方式通過nginx來進行內網mysql的訪問。
實驗環境
nginx1.12.1 : 192.168.1.19
mysql : 192.168.1.20:3306
1:編譯或者升級nginx至版本1.9.0以上,編譯過程中需帶上--with-stream。
# ./configure --prefix=/opt/apps/nginx --with-stream # make && make install
2:配置stream,定義代理192.168.1.20的3306端口映射爲端口2333。
# vi /opt/apps/nginx/conf/nginx.conf …… …… events { use epoll; worker_connections 65535; } #stream配置 stream { server { listen 2333; proxy_connect_timeout 1s; proxy_timeout 3s; proxy_pass 192.168.1.20:3306; } } http { …… …… }
3:開啓nginx,驗證代理是否生效。
可以看到我們現在可以通過nginx代理的端口訪問到內網的mysql服務了。這也直接避免了mysql直接暴露到公網,增加些許的安全。當然,利用stream也可以實現後端服務的負載均衡。