Linux

在沒有 DNS 或靜態 IP 的情況下將 HTTP 重定向到 HTTPS

  • April 4, 2021

我過去設置過 Web 伺服器,但現在我正在研究一個有點不同的嵌入式 Linux 項目。我需要嵌入式 Linux 設備

  • 執行 Apache 伺服器
  • 支持DHCP
  • 不需要任何 DNS 設置
  • (需要基本上是即插即用和白痴證明)。

我有點不確定如何進行 HTTP 到 HTTPS 的重定向。困難的是我不知道 DNS 或 IP。mod-rewrite 有沒有辦法像這樣動態檢測目前 IP 並重定向到 HTTP:

RewriteRule ^(.*)$ https://[(currentDHCPIPAddress)/$1 [L,R=301]

大部分流量將來自內部 LAN,所以我不能做某種防火牆魔法。

如果其他人有任何想法來實現這一點,我很想听聽建議。它與您想要設置大多數伺服器的方式有點不同,所以它暫時難住了我,大多數文件並沒有為這種案例做好準備。

這是一個簡單的重定向,所以讓我們首先避免使用 mod_rewrite並改用mod_aliasRedirect

如果該 Redirect指令在 <Location> or <LocationMatch> 部分中使用而省略了 URL 路徑 ,則 URL 參數將使用 表達式語法進行解釋。

使用表達式語法,您可以使用變數,並%{HTTP_HOST}包含Host:標題中的任何內容,即瀏覽器地址欄上的主機名,無論是 DNS 名稱還是 IP 地址。這正是你要找的。

讓我們把它放在一起。您的預設(第一個或唯一)基於名稱的虛擬主機可能具有:

NameVirtualHost *:80
<VirtualHost *:80> 
   <Location "/">
       Redirect "https://%{HTTP_HOST}%{REQUEST_URI}"
   </Location>
</VirtualHost>

這將使埠 80 上的任何 HTTP 請求重定向到其 HTTPS 等效項,除非有一個匹配的基於名稱的虛擬主機配置不同。

引用自:https://serverfault.com/questions/1059307