簡體   English   中英

連接到IP地址但不在域名中時出現404錯誤

[英]404 error when connecting to IP address but not in domain name

我在 Lightsail 上使用 Nginx 和 NodeJS 運行了一個網站。

當我訪問 mywebsite.com 時,我的網站可以訪問並且是安全的。 但是,當我嘗試輸入該網站的公共 IP 時,Nginx 返回 404 錯誤頁面。 該網站由 LetsEncrypt 認證。

我確實設法通過在 IP 地址前添加 http:// 來訪問瀏覽器上的 IP 地址。 但是,當我正常訪問我的 IP 地址時,Nginx 返回 404 錯誤。 為什么會這樣?

我對無法訪問 IP 感到滿意。 但是我的 CDN 無法正常工作。 我認為它需要可訪問並且不返回 404 頁面?

我為什么要診斷和解決這個問題?

提前致謝。

Host:標頭標識當 Web 服務器在同一 TCP 綁定(IP 地址 + 端口號 + 協議)上為多個網站提供服務時瀏覽器用於訪問網站的主機名/域名。 然后,網絡服務器使用它來確定要提供的內容。

Web 瀏覽器從地址欄中的 URI 生成Host:標頭。

當您訪問http://1.2.3.4/foobar您的瀏覽器會發送此請求:

GET /foobar
Host: 1.2.3.4

當您訪問http://example.com/foobar您的瀏覽器會發送此請求:

GET /foobar
Host: example.com

當您訪問http://www.example.com/foobar您的瀏覽器會發送此請求:

GET /foobar
Host: www.example.com

當您訪問https://example.com/foobarhttps://www.example.com/foobar ,請求是相同的,但底層 HTTP 連接包裝在 TLS(以前稱為 SSL)連接中。 HTTP/2 (SPDY) 和 HTTP/3 (QUIC) 使事情變得復雜,所以我不會解釋它們是如何工作的。

在您的情況下,您需要編輯 nginx 配置以添加另一個綁定到您的網站,將http://<IP-address>映射到您的網站,以及https://<IP-address> 您需要檢查 Web 應用程序的代碼以確保它可以使用意外的Host:標頭處理請求 - 您還可以配置 nginx 將傳入請求的Host標頭修改為您常用的標頭。

如果您使用的是 HTTPS,那么您需要將您的 IP 地址作為 SAN(主題備用名稱)添加到您的 TLS 證書中 - 這通常是一個壞主意,因為 IP 地址會更改並且 LetsEncrypt 無論如何都不為 IP 地址提供證書所以這是沒有實際意義的。

出於開發目的,當您在本地運行 nginx(即http://localhost )時,您不再需要localhost的 TLS 證書,因為自 2020 年初以來,基於 Chromium 的瀏覽器現在將http://localhost識別為“安全的" 網站,即使它通過http://而不是https://


為了立即解決,當您通過 IP 地址訪問站點時,您可以使用瀏覽器擴展來覆蓋Host:標頭。

例如:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM