Apache HTTP 到 HTTPS 重定向適用於別名但不適用於伺服器名稱
我使用 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。問題解決了。