Apache-2.4

Apache HTTP 到 HTTPS 重定向適用於別名但不適用於伺服器名稱

  • March 2, 2020

我使用 Let’s Encrypt 創建了一個 SSL 證書。

證書已安裝並在 Apache 配置文件中引用。

Apache 配置提供了一個 ServerName(例如,example.com)和一個 ServerAlias(例如,www.example.com)。兩者都在 SSL 證書中引用,由certbot certificates命令的輸出驗證。

Apache 配置還包含從 HTTP 到 HTTPS 的重定向。

RedirectMatch permanent ^/(.*) https://example.com/$1

問題是重定向只發生在別名 (www.example.com) 上。對 example.com 的請求會產生一個簡單的 200 OK 響應。

請求別名:

$ curl -I www.example.com
HTTP/1.1 301 Moved Permanently
Date: Sun, 01 Mar 2020 19:13:57 GMT
Server: Apache/2.4.29 (Ubuntu)
Location: https://example.com/
Content-Length: 325
Content-Type: text/html; charset=iso-8859-1

請求實際的 ServerName 值:

curl -I example.com
HTTP/1.1 200 OK
Date: Sun, 01 Mar 2020 19:16:43 GMT
Server: Apache/2.4.29 (Ubuntu)
Last-Modified: Sun, 23 Feb 2020 00:03:31 GMT
ETag: "2aa6-59f32fc296ba5"
Accept-Ranges: bytes
Content-Length: 10918
Vary: Accept-Encoding
Content-Type: text/html

除了 *:80 部分中的重定向和 *:443 部分中的 SSL 行之外,配置文件的<VirtualHost *:80>和部分相同:<VirtualHost *:443>

SSLCertificateFile /etc/letsencrypt/live/example/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf

我是否遺漏了一些明顯的東西,或者我只是走錯了路?:-) 謝謝

弄清楚了!:-) 在這裡發布答案,以防其他一些可憐的靈魂犯了和我一樣​​的錯誤。

原來有一個具有相同伺服器名稱的<VirtualHost *:80>條目( )。該文件不包括 SSL 配置指令。000-default.conf``ServerName example.com``000-default.conf

看來,如果相同的ServerName內容出現在多個啟用的 Apache 配置文件中,則哪個條目優先是不確定的。

我只是將ServerName指令更改000-default.conf為包含主機名並重新啟動 Apache。問題解決了。

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