Apache-2.2

將裸域重定向到 SSL

  • January 22, 2015

我有一個萬用字元 SSL 證書,我想將所有 http 請求重定向到其等效的 https。

我的伺服器是 Debian (wheezy),我正在執行 Apache 2.2.22

我在 /etc/apache2/apache2.conf 的末尾添加了以下內容

<VirtualHost *:80>
ServerName domain.tld
ServerAlias *.domain.tld
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
   RewriteEngine On
   RewriteCond %{HTTPS} off
   RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
</VirtualHost>

<VirtualHost *:443>
ServerName domain.tld
ServerAlias *.domain.tld
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
   SSLEngine on
   SSLCertificateFile /path/file.crt
   SSLCertificateKeyFile /path/file.key
   SSLCertificateChainFile /path/file.crt
   SSLCACertificateFile /path/file.pem
</VirtualHost>

這適用於子域,但不適用於裸域(http://www.domain.tld轉到 https 但http://domain.tld沒有)

我錯過了什麼?

如果它只針對一個域,那麼您可以在 .htaccess 中進行

RewriteEngine on
RewriteCond %{HTTPS} !^on$
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]

以下內容對於保護從 http 重定向到 https 的會話也很有用

<IfModule mod_headers.c>
   Header set Strict-Transport-Security "max-age=16070400; includeSubDomains"
</IfModule>

正如您為您的虛擬主機定義了一個包羅萬象的規則,我能看到的唯一原因是,裸域由其他一些虛擬主機提供服務。但是,如果是這種情況,您應該在 apache 重新啟動時收到適當的警告。

此外,我想知道 Strict-Transport-Security 在應用於埠 80 上的虛擬主機時會做什麼。此標頭應僅適用於 https。

要檢查是否使用了重寫規則以及它們在做什麼,只需添加用於 Rewritelogging 的指令,例如: RewriteLogLevel 256 RewriteLog “/tmp/rewrite.log”

該日誌非常冗長,因此請務必在分析(並可能發布)日誌輸出之後刪除這些行。

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