-
當(dāng)前位置:首頁 > 創(chuàng)意學(xué)院 > 技術(shù) > 專題列表 > 正文
nginx代理訪問外網(wǎng)(nginx代理其他網(wǎng)站)
大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關(guān)于nginx代理訪問外網(wǎng)的問題,以下是小編對(duì)此問題的歸納整理,讓我們一起來看看吧。
ChatGPT國(guó)內(nèi)免費(fèi)在線使用,一鍵生成原創(chuàng)文章、方案、文案、工作計(jì)劃、工作報(bào)告、論文、代碼、作文、做題和對(duì)話答疑等等
只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準(zhǔn),寫出的就越詳細(xì),有微信小程序端、在線網(wǎng)頁版、PC客戶端
官網(wǎng):https://ai.de1919.com
本文目錄:
一、nginx代理常用配置
1. 最簡(jiǎn)反向代理配置
在http節(jié)點(diǎn)下,使用upstream配置服務(wù)地址,使用server的location配置代理映射。
upstream my_server {
server 10.0.0.2:8080;
keepalive 2000;
}
server {
listen 80;
server_name 10.0.0.1;
client_max_body_size 1024M;
location /my/ {
proxy_pass http://my_server/;
proxy_set_header Host $host:$server_port;
}
}
通過該配置,訪問nginx地址http://10.0.0.1:80/my的請(qǐng)求會(huì)被轉(zhuǎn)發(fā)到my_server服務(wù)地址http://10.0.0.2:8080/。
需要注意的是,如果按照如下配置:
upstream my_server {
server 10.0.0.2:8080;
keepalive 2000;
}
server {
listen 80;
server_name 10.0.0.1;
client_max_body_size 1024M;
location /my/ {
proxy_pass http://my_server;
proxy_set_header Host $host:$server_port;
}
}
那么,訪問nginx地址http://10.0.0.1:80/my的請(qǐng)求會(huì)被轉(zhuǎn)發(fā)到my_server服務(wù)地址http://10.0.0.2:8080/my。這是因?yàn)閜roxy_pass參數(shù)中如果不包含url的路徑,則會(huì)將location的pattern識(shí)別的路徑作為絕對(duì)路徑。
2. 重定向報(bào)文代理
即便配置了nginx代理,當(dāng)服務(wù)返回重定向報(bào)文時(shí)(http code為301或302),會(huì)將重定向的目標(biāo)url地址放入http response報(bào)文的header的location字段內(nèi)。用戶瀏覽器收到重定向報(bào)文時(shí),會(huì)解析出該字段并作跳轉(zhuǎn)。此時(shí)新的請(qǐng)求報(bào)文將直接發(fā)送給服務(wù)地址,而非nginx地址。為了能讓nginx攔截此類請(qǐng)求,必須修改重定向報(bào)文的location信息。
location /my/ {
proxy_pass http://my_server;
proxy_set_header Host $host:$server_port;
proxy_redirect / /my/;
}
使用proxy_redirect可以修改重定向報(bào)文的location字段,例子中會(huì)將所有的根路徑下的url代理到nginx的/my/路徑下返回給用戶。比如服務(wù)返回的重定向報(bào)文的location原始值為/login,那么經(jīng)過nginx代理后,用戶收到的報(bào)文的location字段為/my/login。此時(shí),瀏覽器將會(huì)跳轉(zhuǎn)到nginx的/my/login地址進(jìn)行訪問。
需要注意的是,服務(wù)返回的重定向報(bào)文的location字段有時(shí)會(huì)填寫絕對(duì)路徑(包含服務(wù)的ip/域名和端口),有時(shí)候會(huì)填寫相對(duì)路徑,此時(shí)需要根據(jù)實(shí)際情況進(jìn)行甄別。
location /my/ {
proxy_pass http://my_server;
proxy_set_header Host $host:$server_port;
proxy_redirect http://my_server/ http://$host:$server_port/my/;
}
上述配置便是將my_server服務(wù)的根路徑下的所有路徑代理到nginx地址的/my/路徑下。當(dāng)nginx配置只有一個(gè)server時(shí),http://$host:$server_port前綴可以省略。
3. 報(bào)文數(shù)據(jù)替換
使用nginx代理最牛(dan)逼(sui)的情況就是http響應(yīng)報(bào)文內(nèi)寫死了服務(wù)地址或web絕對(duì)路徑。寫死服務(wù)地址的情況比較少見,但也偶爾存在。最棘手的是寫死了web絕對(duì)路徑,尤其是絕對(duì)路徑都沒有公共前綴。舉個(gè)例子來說:
一般的web頁面會(huì)包含如下類似路徑:
/public:用于靜態(tài)頁面資源,如js腳本/public/js,樣式表/public/css,圖片/public/img等。
/static:和/public類似。
/api:用于后臺(tái)服務(wù)API接口。
/login:用于登錄驗(yàn)證。
其他。
對(duì)于這樣的服務(wù),可能的代理配置如下:
location /my/ {
proxy_pass http://my_server/;
proxy_set_header Host $host:$server_port;
proxy_redirect / /my/;
}
location /login/ {
proxy_pass http://my_server/public;
proxy_set_header Host $host:$server_port;
}
location /public/ {
proxy_pass http://my_server/public;
proxy_set_header Host $host:$server_port;
}
location /api/ {
proxy_pass http://my_server/api;
proxy_set_header Host $host:$server_port;
}
由于web頁面或靜態(tài)資源內(nèi)寫死了類似的絕對(duì)路徑,那么對(duì)于用戶來說,通過頁面內(nèi)的鏈接進(jìn)行跳轉(zhuǎn)時(shí),都會(huì)請(qǐng)求到nginx服務(wù)對(duì)應(yīng)的路徑上。一旦存在另一個(gè)服務(wù)也包含類似的路徑,也需要nginx進(jìn)行代理,那么矛盾就出現(xiàn)了:訪問nginx的同一個(gè)路徑下的請(qǐng)求究竟轉(zhuǎn)發(fā)給哪一個(gè)服務(wù)?
要解決這個(gè)問題,必須在用戶收到報(bào)文前,將報(bào)文的數(shù)據(jù)中包含的絕對(duì)路徑都添加統(tǒng)一的前綴,如/my/public,/my/api,/my/login,這樣nginx代理配置則可以簡(jiǎn)化為:
location /my/ {
proxy_pass http://my_server/;
proxy_set_header Host $host:$server_port;
proxy_redirect / /my/;
}
location /other/ {
proxy_pass http://other_server/;
proxy_set_header Host $host:$server_port;
proxy_redirect / /other/;
}
nginx的ngx_http_sub_module模塊提供了類似的報(bào)文數(shù)據(jù)替換功能,該模塊默認(rèn)不會(huì)安裝,需要在編譯nginx時(shí)添加--with-http_sub_module參數(shù),或者直接下載nginx的rpm包。
使用sub_filter對(duì)數(shù)據(jù)包進(jìn)行替換的語法如下:
location /my/ {
proxy_pass http://my_server/;
proxy_set_header Host $host:$server_port;
sub_filter 'href="/' 'href="/my/';
sub_filter 'src="/' 'src="/my/';
sub_filter_types text/html;
sub_filter_once off;
}
上述配置會(huì)將/my/下的所有響應(yīng)報(bào)文內(nèi)容的href="/替換為href="/my,以及src="/替換為src="/my,即為所有的絕對(duì)路徑添加公共前綴。
注意,如果需要配置多個(gè)sub_filter,必須保證nginx是1.9.4版本之上的。
二、Nginx 能正向代理 https get 請(qǐng)求嗎
可以根據(jù)域名設(shè)置正向代理,這樣的話無論post,get都可以
三、怎么訪問nginx代理的服務(wù)器
1.1
反向代理初印象
反向代理(Reverse
Proxy)方式是指以代理服務(wù)器來接受Internet上的連接請(qǐng)求,然后將請(qǐng)求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給Internet上請(qǐng)求連接的客戶端,此時(shí)代理服務(wù)器對(duì)外就表現(xiàn)為一個(gè)服務(wù)器。
從上圖可以看出:反向代理服務(wù)器位于網(wǎng)站機(jī)房,代理網(wǎng)站W(wǎng)eb服務(wù)器接收Http請(qǐng)求,對(duì)請(qǐng)求進(jìn)行轉(zhuǎn)發(fā)。
1.2
反向代理的作用
①保護(hù)網(wǎng)站安全:任何來自Internet的請(qǐng)求都必須先經(jīng)過代理服務(wù)器;
②通過配置緩存功能加速Web請(qǐng)求:可以緩存真實(shí)Web服務(wù)器上的某些靜態(tài)資源,減輕真實(shí)Web服務(wù)器的負(fù)載壓力;
③實(shí)現(xiàn)負(fù)載均衡:充當(dāng)負(fù)載均衡服務(wù)器均衡地分發(fā)請(qǐng)求,平衡集群中各個(gè)服務(wù)器的負(fù)載壓力;
四、為什么nginx配置的https 內(nèi)網(wǎng)可以訪問外網(wǎng)訪問不了
1、首先檢查的配置是否正確,443端口是否打開。
2、檢查的防火墻設(shè)置
3、安裝上傳的nginx ssl證書配置指南重新部署一遍。
以上就是關(guān)于nginx代理訪問外網(wǎng)相關(guān)問題的回答。希望能幫到你,如有更多相關(guān)問題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會(huì)為您講解更多精彩的知識(shí)和內(nèi)容。
推薦閱讀:
5.22樂居Morning Call丨本周末6盤推新 仙林湖速度盤真的來了
網(wǎng)絡(luò)營(yíng)銷難不(網(wǎng)絡(luò)營(yíng)銷難不難學(xué))
觀城景觀設(shè)計(jì)培訓(xùn)(觀景設(shè)計(jì)有限公司)