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