nginx反向代理后無限重定向的問題解決方法
先說說奇葩的需求:https轉其他網(wǎng)站的http
在項目里用iframe內嵌其他網(wǎng)站,這個“其他網(wǎng)站”不是我們開發(fā)的,并且是http,
但瀏覽器會默認阻止從https網(wǎng)站向http地址發(fā)起請求
因此初步的解決方案是:用我們自己的服務器nginx轉發(fā)一次,雖然服務器到“其他網(wǎng)站”的傳輸還是明文,但至少可以做到甩鍋(至少用戶到我們的服務器的傳輸是SSL......)
然后這個“其他網(wǎng)站”就出現(xiàn)了無限重定向問題。
另外,根據(jù)以往的經歷,在給WordPress加https的時候,也可能會遇到無限重定向的問題。
原因
本質上是因為:“其他網(wǎng)站”的服務程序具有請求頭校驗。
通常來說,nginx轉發(fā)的請求,是帶有原始請求頭信息的請求。
比如:
nginx服務器的地址是https://server1.domin:1111
生產服務器的地址是http://server2.domin:2222
瀏覽器向https://server1.domin:1111發(fā)起請求
此時,雖然nginx把請求代理到了http://server2.domin:2222但由于一系列的參數(shù)設置,http請求頭中的信息還是https://server1.domin:1111
這種情況下,如果“其他網(wǎng)站”的服務程序(Apache或nginx)中加入了請求頭校驗,也就是說,如果端口不是2222,就重定向;
如果地址不是server2.domin,就重定向。
而我們的nginx已經把請求頭改成了原始信息,自然不能通過他們的驗證,所以就會被強制重定向了。
如圖,它把我的38004端口的請求重定向到了默認的443,說明對方服務器有地址校驗,而且重定向只改變了端口。
而如果我的nginx恰好也用的443,就會無限重定向了。
解決
我們先來看看通常使用的nginx的重寫參數(shù):
server { listen 38002 ssl; server_name server1.domin; ssl_certificate server1.domin.cer; ssl_certificate_key server1.domin.key; location / { proxy_set_header Host $host; proxy_set_header X-Real_IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr:$remote_port; proxy_pass http://server2.domin:2222/; } }
這種情況下,就是直接在代理的請求中,加入原始請求頭信息
那么我們怎么改呢?
我們要讓對方服務器認為,nginx發(fā)過去的請求不是代理過去的,而是直接發(fā)過去的。
再換種方式說,此時nginx的作用不再是反向代理,而是正向代理,目的是隱藏真正的請求信息,讓對方服
務器認為就是nginx直接請求的對方服務器。
所以我們要把ip、端口等等參數(shù)直接寫死。
server { listen 443 ssl; server_name server1.domin; ssl_certificate server1.domin.cer; ssl_certificate_key server1.domin.key; location / { proxy_set_header Host server2.domin; // 對方服務器的域名 proxy_set_header X-Real-IP 123.123.123.123; // 對方服務器的真實地址,從控制臺中找到 proxy_set_header X-Forwarded-For $123.123.123.123:80; proxy_set_header X-Forwarded-Host server2.domin; // 對方服務器的域名 proxy_set_header X-Forwarded-Port 80; // 對方服務器的端口 proxy_pass http://server2.domin:2222/; } }
于是代理過程就變成了這樣:
總結
在我們不得不用nginx代理,并且無法讓對方配合的情況下
只要把http中的請求頭信息替換為對方網(wǎng)站的請求頭信息(而不是使用原始信息)
就可以通過對方服務器的host驗證了。
時間倉促,有些地方可能說的不準,但目前能用,如有錯誤歡迎指正。
以上就是nginx反向代理后無限重定向的問題解決方法的詳細內容,更多關于nginx反向代理重定向的資料請關注腳本之家其它相關文章!
相關文章
nginx使用nginx-rtmp-module模塊實現(xiàn)直播間功能
做的過程出現(xiàn)很多問題,環(huán)境其實就需要nginx就可以,然后就是在播放的問題,m3u8的格式,mac直接訪問就支持,蘋果系統(tǒng)原生H5支持m3u8,還有就是手機直接訪問也支持!但是其他其他系統(tǒng)PC端不支持,嘗試了好多都不行,最后終于找到了一個支持m3u8格式H5播放2017-10-10Nginx 安裝筆記(含PHP支持、虛擬主機、反向代理負載均衡)
Nginx安裝簡記(含PHP支持、虛擬主機、反向代理負載均衡) Nginx,據(jù)說高性能和穩(wěn)定性比Apache還牛,并發(fā)連接處理能力強,低系統(tǒng)資源消耗。目前已有250多萬web站點在使用2009-10-10Nginx設置目錄的訪問權限實現(xiàn)訪問靜態(tài)資源
遇到Permission denied錯誤,通常是Nginx用戶權限不足,本文就來介紹一下Nginx設置目錄的訪問權限實現(xiàn)訪問靜態(tài)資源2024-10-10