最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Nginx正向代理實(shí)現(xiàn)局域網(wǎng)電腦訪問(wèn)外網(wǎng)的過(guò)程詳解

 更新時(shí)間:2024年03月13日 09:01:41   作者:lucky_fd  
在工作中我遇到了一個(gè)類似的情況:在公司網(wǎng)絡(luò)中,由于管理要求,局域網(wǎng)內(nèi)的電腦不能直接訪問(wèn)外網(wǎng),但是,工作上領(lǐng)導(dǎo)吩咐需要讓局域網(wǎng)內(nèi)的電腦能夠訪問(wèn)外網(wǎng)上的某個(gè)網(wǎng)站,這時(shí)候就需要用到正向代理,本文將介紹如何配置 Nginx 實(shí)現(xiàn)這一功能,需要的朋友可以參考下

引言

在網(wǎng)絡(luò)環(huán)境中,有時(shí)候我們需要讓局域網(wǎng)內(nèi)的電腦訪問(wèn)外網(wǎng),但是由于網(wǎng)絡(luò)策略或其他原因,直接訪問(wèn)外網(wǎng)是不可行的。這時(shí)候,可以借助 Nginx 來(lái)搭建一個(gè)正向代理服務(wù)器,實(shí)現(xiàn)局域網(wǎng)內(nèi)電腦通過(guò) Nginx 轉(zhuǎn)發(fā)訪問(wèn)外網(wǎng)的需求。

在工作中我遇到了一個(gè)類似的情況:在公司網(wǎng)絡(luò)中,由于管理要求,局域網(wǎng)內(nèi)的電腦不能直接訪問(wèn)外網(wǎng)。但是,工作上領(lǐng)導(dǎo)吩咐需要讓局域網(wǎng)內(nèi)的電腦能夠訪問(wèn)外網(wǎng)上的某個(gè)網(wǎng)站,這時(shí)候就需要用到正向代理。本文將介紹如何配置 Nginx 實(shí)現(xiàn)這一功能。

準(zhǔn)備工作

首先,我們需要一臺(tái)可以訪問(wèn)外網(wǎng)的服務(wù)器,例如一臺(tái)服務(wù)器、電腦或者虛擬機(jī)。確保該服務(wù)器已經(jīng)安裝了 Nginx,并且網(wǎng)絡(luò)配置正確。

我這里是有一臺(tái)服務(wù)器是可以正常訪問(wèn)外網(wǎng)的(IP:192.168.0.10),同時(shí)局域網(wǎng)內(nèi)的其他電腦也可以訪問(wèn)這臺(tái)服務(wù)器。

修改nginx.conf

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
	# 正向代理配置內(nèi)容
	server {
		 listen 9000;	# 監(jiān)聽(tīng)端口
		 server_name localhost;
		set $url "proxy_server_doman_or_ip";	# 設(shè)置代理的域名或IP變量,這里替換成自己需要代理的網(wǎng)站
		 location / {
		     proxy_pass http://$url:8082;	# 將請(qǐng)求轉(zhuǎn)發(fā)到由 $url 變量表示的地址。
		 }
	}
}

重啟nginx,打開(kāi)局域網(wǎng)電腦測(cè)試訪問(wèn):192.168.0.10:9000,網(wǎng)頁(yè)跳轉(zhuǎn)成功。不就是請(qǐng)求轉(zhuǎn)發(fā)嘛,so easy!

問(wèn)題解決?如果這么簡(jiǎn)單我就不寫(xiě)這篇文章了??

果然第二天就出問(wèn)題了,有同事反饋網(wǎng)站進(jìn)不去了。我想不可能吧,一測(cè)試果然不行。果斷查閱了一下資料,找到問(wèn)題原因:nginx在進(jìn)行域名轉(zhuǎn)發(fā)時(shí)會(huì)先把域名解析成IP保存在內(nèi)存中,后面的訪問(wèn)都是通過(guò)IP直接訪問(wèn),如果目標(biāo)網(wǎng)站的 IP 地址發(fā)生變化,我們的代理就會(huì)失效。

找到原因就好辦了,添加域名解析功能嘛

域名解析

為了解決 IP 地址變化的問(wèn)題,我們可以使用域名解析來(lái)動(dòng)態(tài)獲取目標(biāo)網(wǎng)站的 IP 地址。直接奉上完整配置,修改 Nginx 配置如下:

# 設(shè)置Nginx啟動(dòng)一個(gè)工作進(jìn)程,這是Nginx的一個(gè)核心設(shè)置,它決定了Nginx會(huì)使用多少個(gè)工作進(jìn)程來(lái)處理客戶端請(qǐng)求。
worker_processes  1;		
# 配置定義了Nginx如何處理事件,例如連接請(qǐng)求,數(shù)據(jù)傳輸?shù)?
events {
    worker_connections  1024;		# 定義了每個(gè)工作進(jìn)程允許的最大并發(fā)連接數(shù)。
}
# HTTP模塊的配置塊,包含了HTTP服務(wù)器的一般配置
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
	# 正向代理配置內(nèi)容
	server {
		 listen 9000;	# 監(jiān)聽(tīng)端口
		 server_name localhost;
		# 設(shè)置DNS解析器的地址為8.8.8.8,并且設(shè)置了解析器的緩存時(shí)間為300秒(這樣每隔300s就會(huì)重新解析一次)。ipv6=off 是關(guān)閉IPv6的解析支持。
		resolver 8.8.8.8 valid=300 ipv6=off; 
		resolver_timeout 3s;	# 設(shè)置解析DNS的超時(shí)時(shí)間為3秒
		proxy_read_timeout 60s;
		proxy_send_timeout 60s;
		proxy_connect_timeout 60s;
		set $url "proxy_server_doman_or_ip";	# 設(shè)置代理的域名或IP變量,這里替換成自己需要代理的網(wǎng)站
		 location / {
			proxy_pass http://$url:9000;	# 將請(qǐng)求轉(zhuǎn)發(fā)到由 $url 變量表示的地址。9000是目標(biāo)網(wǎng)站的端口。
			proxy_buffers 256 4K;		# 設(shè)置用于緩存后端響應(yīng)的緩沖區(qū)大小為256個(gè),每個(gè)大小為4K。
			proxy_max_temp_file_size 0;		# 設(shè)置Nginx暫存響應(yīng)數(shù)據(jù)的最大臨時(shí)文件大小為0,即不使用臨時(shí)文件。
			proxy_cache_valid 200 302 1m; 	# 針對(duì)狀態(tài)碼為200和302的響應(yīng),設(shè)置緩存有效期為1分鐘。
			proxy_cache_valid 301 1h;		# 針對(duì)狀態(tài)碼為301的響應(yīng),設(shè)置緩存有效期為1小時(shí)。
			proxy_cache_valid any 1m;	# 對(duì)于其他任何響應(yīng)狀態(tài)碼,設(shè)置緩存有效期為1分鐘。
		 }
	}
}

重啟nginx,問(wèn)題解決。到這里,正向代理功能就實(shí)現(xiàn)了。如果只想實(shí)現(xiàn)正向代理功能看到這里就可以了。后面是我在遇到問(wèn)題時(shí)的一些調(diào)試經(jīng)驗(yàn)技巧!

轉(zhuǎn)發(fā)代理調(diào)試

我在實(shí)現(xiàn)代理后,發(fā)現(xiàn)正向代理響應(yīng)的速度非常慢有時(shí)候需要一分鐘才能響應(yīng)結(jié)果。但有時(shí)候又很快。就好奇為啥會(huì)這樣,為了方便調(diào)試和監(jiān)控,我設(shè)置添加了Nginx 的訪問(wèn)日志。

修改 Nginx 配置如下:

# 設(shè)置日志記錄格式
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"' 'upstreamIP: $upstream_addr' 'upgrade: $http_upgrade';
# 正向代理配置內(nèi)容
	server {
		 listen 9000;	# 監(jiān)聽(tīng)端口
		 server_name localhost;
		# 設(shè)置DNS解析器的地址為8.8.8.8,并且設(shè)置了解析器的緩存時(shí)間為300秒(這樣每隔300s就會(huì)重新解析一次)。ipv6=off 是關(guān)閉IPv6的解析支持。
		resolver 8.8.8.8 valid=300 ipv6=off; 
		resolver_timeout 3s;	# 設(shè)置解析DNS的超時(shí)時(shí)間為3秒
		proxy_read_timeout 60s;
		proxy_send_timeout 60s;
		proxy_connect_timeout 60s;
		set $url "proxy_server_doman_or_ip";	# 設(shè)置代理的域名或IP變量,這里替換成自己需要代理的網(wǎng)站
		 location / {
			proxy_pass http://$url:9000;	# 將請(qǐng)求轉(zhuǎn)發(fā)到由 $url 變量表示的地址。9000是目標(biāo)網(wǎng)站的端口。
			proxy_buffers 256 4K;		
			proxy_max_temp_file_size 0;		
			proxy_cache_valid 200 302 1m; 
			proxy_cache_valid 301 1h;		
			proxy_cache_valid any 1m;	
			access_log logs/proxy/access.log main;		# 定義了訪問(wèn)日志的路徑和格式。
		    error_log logs/proxy/error.log;		# 定義了錯(cuò)誤日志的路徑
		 }
	}

這樣,Nginx 將會(huì)在nginx項(xiàng)目下的 logs/proxy/access.log 文件中記錄所有代理轉(zhuǎn)發(fā)日志。

日志信息:

192.168.0.28 - - [27/Feb/2024:17:02:03 +0800] "GET /prod-api/system/todo/listAll?pageNum=1&pageSize=10&active=true HTTP/1.1" 200 64 "http://192.168.20.2:8082/user-task/todo" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:123.0) Gecko/20100101 Firefox/123.0" "-"upstreamIP: 182.148.159.30:8082
192.168.0.28 - - [27/Feb/2024:17:02:03 +0800] "GET /prod-api/process/business/listAll?pageNum=1&pageSize=10&active=true HTTP/1.1" 200 979 "http://192.168.20.2:8082/user-task/todo" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:123.0) Gecko/20100101 Firefox/123.0" "-"upstreamIP: 182.148.159.30:8082
192.168.0.28 - - [27/Feb/2024:17:02:06 +0800] "GET /prod-api/system/user/select HTTP/1.1" 499 0 "http://192.168.20.2:8082/login?redirect=%2Findex" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:123.0) Gecko/20100101 Firefox/123.0" "-"upstreamIP: 172.16.30.6:8082

通過(guò)日志信息可以看到,請(qǐng)求轉(zhuǎn)發(fā)后的upstreamIP有兩個(gè)不同的IP:182.148.159.30和172.16.30.6,說(shuō)明請(qǐng)求被轉(zhuǎn)發(fā)到了兩個(gè)不同的IP,當(dāng)請(qǐng)求IP為182.148.159.30時(shí),響應(yīng)正常;當(dāng)請(qǐng)求IP為172.16.30.6時(shí),響應(yīng)失敗導(dǎo)致等待。

發(fā)現(xiàn)這個(gè)情況后,我也是很疑惑為啥會(huì)將域名解析出兩個(gè)IP,第一反應(yīng)是域名解析錯(cuò)誤,為了驗(yàn)證我將DNS解析的服務(wù)器換成了離我最近的四川電信服務(wù)器:61.139.2.69,測(cè)試發(fā)現(xiàn)結(jié)果也是一樣的。雖然感覺(jué)解析是沒(méi)有問(wèn)題的,保險(xiǎn)起見(jiàn)我還是自己在網(wǎng)上通過(guò)解析網(wǎng)站測(cè)試了一下域名解析的結(jié)果:結(jié)果顯示域名確實(shí)綁定了兩個(gè)IP,一個(gè)是正常的一個(gè)是不行的。

然后我就聯(lián)系我們這個(gè)域名對(duì)應(yīng)網(wǎng)站的負(fù)責(zé)人,得出的結(jié)果就是他們確實(shí)綁定了兩個(gè)IP,有一個(gè)IP是綁定的內(nèi)網(wǎng)IP,所以才導(dǎo)致外網(wǎng)請(qǐng)求時(shí)失效。

失敗的原因:nginx獲取解析后的IP是通過(guò)輪詢往IP轉(zhuǎn)發(fā)請(qǐng)求,如果輪詢到內(nèi)網(wǎng)IP就會(huì)導(dǎo)致請(qǐng)求失敗。

解決辦法:

  • 手動(dòng)選擇IP地址:在Nginx配置中,你可以手動(dòng)指定代理的目標(biāo)IP地址,而不是使用解析出的IP地址。這樣可以避免將請(qǐng)求發(fā)送到內(nèi)網(wǎng)IP。

  • 使用域名解析出的IP地址進(jìn)行請(qǐng)求:你可以通過(guò)解析域名獲取到的IP地址列表,然后使用一些方法(比如按照某種規(guī)則選擇IP地址)來(lái)保證請(qǐng)求不會(huì)發(fā)送到內(nèi)網(wǎng)IP地址。

  • 使用nginx的upstream模塊進(jìn)行負(fù)載均衡:通過(guò)upstream模塊,你可以指定多個(gè)代理服務(wù)器,然后使用一定的負(fù)載均衡策略,比如輪詢、權(quán)重等,來(lái)分配請(qǐng)求到不同的服務(wù)器。在這里,你可以手動(dòng)配置upstream模塊,指定外網(wǎng)IP,而不包括內(nèi)網(wǎng)IP。

  • 修改DNS設(shè)置:聯(lián)系網(wǎng)站負(fù)責(zé)人,修改域名解析,只將外網(wǎng)IP綁定到域名上,而不包括內(nèi)網(wǎng)IP。

你們猜我最后咋解決的???

必須是第四條?。。。?/p>

到此這篇關(guān)于利用Nginx正向代理實(shí)現(xiàn)局域網(wǎng)電腦訪問(wèn)外網(wǎng)的文章就介紹到這了,更多相關(guān)Nginx局域網(wǎng)電腦訪問(wèn)外網(wǎng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Nginx緩存文件與動(dòng)態(tài)文件自動(dòng)均衡的配置腳本

    Nginx緩存文件與動(dòng)態(tài)文件自動(dòng)均衡的配置腳本

    Nginx (engine x) 是一個(gè)高性能的HTTP和反向代理服務(wù),也是一個(gè)IMAP/POP3/SMTP服務(wù)。這篇文章主要介紹了Nignx緩存文件與動(dòng)態(tài)文件自動(dòng)均衡的配置,需要的朋友可以參考下
    2018-09-09
  • 讓Nginx支持shtml格式的配置方法

    讓Nginx支持shtml格式的配置方法

    這篇文章主要介紹了讓Nginx支持shtml格式的配置方法,shtml格式可以包含一些服務(wù)端指令,同PHP中的include功能類似,需要的朋友可以參考下
    2014-08-08
  • 查看nginx日志的實(shí)現(xiàn)

    查看nginx日志的實(shí)現(xiàn)

    在 Nginx 中,查看日志是診斷問(wèn)題和監(jiān)控 Nginx 服務(wù)狀態(tài)的重要手段,本文主要介紹了查看nginx日志的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • filebeat收集多個(gè)域名網(wǎng)站日志并存儲(chǔ)到不同es索引庫(kù)過(guò)程

    filebeat收集多個(gè)域名網(wǎng)站日志并存儲(chǔ)到不同es索引庫(kù)過(guò)程

    這篇文章主要為大家介紹了filebeat收集多個(gè)域名網(wǎng)站日志并存儲(chǔ)到不同es索引庫(kù)過(guò)程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 利用nginx如何匹配多個(gè)條件

    利用nginx如何匹配多個(gè)條件

    這篇文章主要給大家介紹了利用nginx如何匹配多個(gè)條件的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-06-06
  • Nginx實(shí)現(xiàn)灰度發(fā)布的多種策略分享

    Nginx實(shí)現(xiàn)灰度發(fā)布的多種策略分享

    灰度發(fā)布是一種重要的策略,它允許我們?cè)诓挥绊懰杏脩舻那闆r下逐步推出新功能或更新,本文介紹了Nginx實(shí)現(xiàn)灰度發(fā)布的多種策略,有需要的小伙伴可以了解下
    2026-04-04
  • 分布式限流之Nginx層限流方式

    分布式限流之Nginx層限流方式

    這篇文章主要介紹了分布式限流之Nginx層限流方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Nginx實(shí)現(xiàn)UDP四層轉(zhuǎn)發(fā)的過(guò)程

    Nginx實(shí)現(xiàn)UDP四層轉(zhuǎn)發(fā)的過(guò)程

    為了解決VPN連接速度慢的問(wèn)題,可以通過(guò)Nginx實(shí)現(xiàn)UDP的四層轉(zhuǎn)發(fā),首先檢查Nginx是否安裝了with-stream模塊,然后修改nginx.conf配置文件進(jìn)行UDP端口的轉(zhuǎn)發(fā)設(shè)置,使用nginx-t檢查配置文件語(yǔ)法,無(wú)誤后重新加載Nginx,這樣通過(guò)國(guó)內(nèi)服務(wù)器中轉(zhuǎn),可以提升連接到國(guó)外服務(wù)器的速率
    2024-09-09
  • Nginx訪問(wèn)限制配置詳解

    Nginx訪問(wèn)限制配置詳解

    nginx訪問(wèn)限制可以基于兩個(gè)方面,一個(gè)是基于ip的訪問(wèn)控制,另一個(gè)是基于用戶的信任登陸控制,本文就詳細(xì)的介紹了這兩種方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • Nginx服務(wù)器中l(wèi)ocation配置的一些基本要點(diǎn)解析

    Nginx服務(wù)器中l(wèi)ocation配置的一些基本要點(diǎn)解析

    這篇文章主要介紹了Nginx服務(wù)器中l(wèi)ocation配置的一些基本要點(diǎn)解析,特別對(duì)管理以及查找匹配作出了詳細(xì)的講解,需要的朋友可以參考下
    2015-12-12

最新評(píng)論

成武县| 洛宁县| 天峻县| 井冈山市| 应城市| 会宁县| 扎赉特旗| 长宁县| 海丰县| 新建县| 鞍山市| 扶风县| 曲阜市| 新宾| 若尔盖县| 崇义县| 弥渡县| 广平县| 衡阳县| 腾冲县| 宝应县| 苗栗县| 岳西县| 永平县| 潮安县| 佳木斯市| 龙门县| 武功县| 越西县| 合作市| 大理市| 舒城县| 淮阳县| 固镇县| 察雅县| 托克托县| 定陶县| 蒲城县| 舞钢市| 宁蒗| 宜宾县|