Nginx配置四層、七層網絡代理轉發(fā)的方法示例
寫在前面
最近工作中有個需求,三個網絡區(qū)域A、B、C。A可以和B互通,A與C不互通,B與C互通?,F在需要從A區(qū)域發(fā)送數據到C區(qū)域固定地址。顯而易見,搭建一個網絡代理就可以了。
但是又有兩種請求,一種是加密的七層GRPC協(xié)議的數據,一種是七層HTTP請求的數據。研究之后,GRPC協(xié)議的數據需要做四層透明代理轉發(fā)到目的地址,HTTP就正常走七層轉發(fā)。于是決定使用Nginx來滿足需求。
GRPC四層代理配置
首先GPRC協(xié)議是一個基于HTTP2的七層協(xié)議,所以它是需要證書加解密的。客戶端加密,服務端解密,所以在傳輸過程中我并不需要做什么操作,直接讓數據傳遞過去就行了,僅僅是提供一個網絡隧道。
(這里之前踩了坑,一直想通過配置GRPC協(xié)議來進行轉發(fā),實際上壓根沒必要)
所以,這種場景下,只需要提供一個四層的透明代理就可以了,只要讓它經過代理送到目的地就行了。
在Nginx的配置文件中,與http同級別作如下配置
stream { log_format proxy '$remote_addr - [$time_local] $status $protocol' '"$upstream_addr" "$upstream_bytes_sent" "$upstream_connect_time"' ; #調用日志,使用proxy格式 access_log /var/log/nginx/tcp_proxy.log proxy; upstream grpcservers { server ip1:port; server ip2:port; } server { listen 12345; proxy_pass grpcservers; } } http { ... }
結構大概如上,如果沒有http需求可以直接刪掉,寫出來只是為了表達與http同級別。
stream
就是配置四層代理的,在例子中我通過upstream
來定義多個目的server用來達到負載均衡的效果。然后在下面的server
中監(jiān)聽了12345端口,同時通過proxy_pass
指向了轉發(fā)目的地址即上述的upstream
的內容。
如此一來,所有發(fā)向該Nginx IP 12345端口的數據都會被轉發(fā)到對應的地址,即完成了四層透明代理。
HTTP七層代理配置
七層的就相對簡單多了,直接在http中添加即可
http{ ... server { listen 80; server_name test.example.com; location / { proxy_pass http://test.target.com ; } } ... }
如上配置,監(jiān)聽了80端口,同時設置了server_name
,這代表來源請求Host為test.example.com
的都會走下面的這層location跳轉,即代理到http://test.target.com
這個地址,并包含路由path。
例如:A區(qū)域的機器請求到B中的該Nginx,請求內容為GET一下http://test.target.com/admin/test
,那么相應的,經過Nginx代理之后變?yōu)?code>http://test.target.com/admin/test。
最后
本篇文章主要涉及Nginx的一些代理使用,來源于工作時,設計的一個方案中碰到的一個跨網數據傳輸的問題,上述方法已經滿足需求。
到此這篇關于Nginx配置四層、七層網絡代理轉發(fā)的方法示例的文章就介紹到這了,更多相關Nginx配置四層、七層網絡代理轉發(fā)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Nginx配置PATHINFO隱藏thinkphp index.php
這篇文章主要介紹了Nginx配置PATHINFO隱藏thinkphp index.php,本文直接給出配置示例,需要的朋友可以參考下2015-07-07windows系統(tǒng)下關閉Nignx的多種方式總結
這篇文章主要給大家總結介紹了windows系統(tǒng)下關閉Nignx的多種方式, 在Windows中啟動Nginx是簡單的,但有許多小伙伴不會關閉,這里給大家介紹下,需要的朋友可以參考下2023-08-08Nginx could not build the server_names_hash 錯誤的解決辦法
這篇文章主要介紹了Nginx could not build the server_names_hash 錯誤的解決辦法,需要的朋友可以參考下2014-03-03nginx代理多次302的解決方法(nginx Follow 302)
這篇文章主要介紹了nginx代理多次302的解決方法(nginx Follow 302),詳細的介紹了解決方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12詳解Nginx服務器中配置Sysguard模塊預防高負載的方案
這篇文章主要介紹了詳解Nginx服務器中配置Sysguard模塊預防高負載的方案,該模塊由阿里巴巴的團隊開發(fā),能夠設置負載閥值,比較強大,需要的朋友可以參考下2016-01-01