如何使用Nginx轉發非80埠的非HTTP請求?
01-15
為了能說明我的需求,畫了上面的圖。nginx所在伺服器有一個外網域名可以訪問,在北京辦公室開發可以直接訪問內網mysql,redis等服務,現在希望在家通過域名和nginx可以訪問到nginx後面的所有服務(黃線表示)(web應用里需要配置redis,mysql的ip地址,密碼才能啟動tomcat),請大家支招,謝謝。
用nginx轉發非HTTP請求可以使用我們團隊的姚偉斌(文景)同學開發的tcp_proxy模塊:yaoweibin/nginx_tcp_proxy_module · GitHub妥妥的。
nginx 不能轉發非 http/smtp 協議,你這種情況應該考慮走 VPN。
Nginx是HTTP伺服器,不是路由器,轉發非HTTP的流量只能走路由器。
redis,memcached,mysql可以使用ngx_lua,參考openresty。
是時候update一下了!!!官方nginx自1.9.0版本起開始支持tcp轉發,自帶輪詢、哈希及最少連接的調度演算法。有需要的朋友請參考這個官方文檔 Module ngx_stream_core_module親測好用,請叫我雷鋒……
如果你有nginx機器的root許可權,並且埠無限制。可以通過ssh或iptable命令實現。不過最簡單還是用socat命令。
nginx有個stream模塊,不知道是否能夠滿足你的需求
這是想把nginx當七層交換機用?
nginx 只能做http分發用吧。要是直接訪問後台服務,真的要用vpn
nginx使用tcp_proxy模塊是可以實現對tcp埠轉發的,前提是埠不能被佔用!
推薦閱讀:
※基於 HTTP 連接下 token 安全問題?
※如何讓html img標籤發送的http請求附加某個http header?
※怎樣學習 HTTP 協議?
※大家在工作中那些地方用到了http協議的細節?