Nginx 反向代理到 IP 位址時停用 https

Nginx 反向代理到 IP 位址時停用 https

我將 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 的文檔

相關內容