我將 Nginx 設定為網站伺服器上的反向代理,例如 example.com
我希望客戶端使用 IP 位址存取我的網站,例如http://192.0.2.67
問題在於 example.com 網站上有一個重定向,將 HTTP 設定為重定向到 HTTPS。 (此 example.com 使用 Cloudflare)
當客戶端造訪我的網站時,http://192.0.2.67
他們會被重新導向到https://example.com
如何在 Nginx 反向代理程式上停用 HTTP 重新導向到 HTTPS?
我的程式碼如下:
server {
listen 80;
location / {
proxy_pass http://example.com;
}
}
答案1
我在問題中發布的程式碼中沒有看到重定向。這意味著重定向是在 example.com 上完成的。
取決於重定向如何完成。如果重定向只是簡單地完成“http TCP/80 => https TCP/433”並且沒有進行以下檢查,您可以嘗試直接代理到 https:
server {
listen 80;
location / {
proxy_pass https://example.com;
}
}
如果這沒有幫助,我擔心您成功的機會不大,因為您不是實現 https 重定向力量的節點。
如果頁面中存在 HTTP 嚴格傳輸安全性 (HSTS) 標頭,則重定向是在瀏覽器層級完成的,而您跳過 ip 的機會也很小(理論上您可以嘗試過濾掉此標頭)。
答案2
在我看來,頁面正在進行重定向,而不是網頁伺服器。透過 PHP,可以透過以下方式實現:
<?php header('Location: http://google.com') ?>
在這種情況下,很難透過網路伺服器本身來禁止這種行為。
答案3
Nginx 不會重新導向到這裡。發送此 HTTP 重定向的是來源伺服器。使用 Nginx,您可以用您自己的重新導向目標替換發送的重新導向:
server {
listen 80;
location / {
proxy_pass http://example.com;
# replace redirects
proxy_redirect http://example.com http://192.0.2.67;
}
}
如欲了解更多詳情,請參閱ngx_http_proxy_module 的文檔