Ssl

Apache:在伺服器狀態的 AUTH 之前重定向到 https

  • April 5, 2016

我想對伺服器狀態輸出(mod_status)強制使用 https 和基本身份驗證。如果我啟用身份驗證並且使用者要求http://site/server-statusapache 首先要求通過,然後重定向到 httpS,然後再次要求通過。

這個問題類似於 Apache - Redirect to https before AUTH and force https with apache before .htpasswd 但我無法讓它工作,因為我們談論的不是通用文件夾而是位置結構。

我的配置(很快)如下:

<Location /server-status>
   SSLRequireSSL
   <IfModule mod_rewrite.c>
       RewriteEngine on
       RewriteBase /server-status
       RewriteCond %{HTTPS} off
               RewriteCond %{SERVER_PORT} 80
               RewriteRule ^ - [E=nossl]
               RewriteRule (.*) https://site/server-status} [R=301,L]
   </IfModule>

   SetHandler server-status
   Order deny,allow
   Deny from all
   Allow from localhost ip6-localhost
   Allow from 1.2.3.0/24

   Allow from env=nossl

   AuthUserFile /etc/httpd/status-htpasswd
   AuthName "Password protected"
   AuthType Basic
   Require valid-user

   Satisfy any
</Location>

我假設Allow from env=nossl應該允許每個人使用RewriteCond %{HTTPS} off和伺服器埠 80,然後強制它重定向但它不起作用。

請注意,我不想強制對整個站點進行 SSL,而只是 /server-status。如果重要,伺服器有幾個站點。

我究竟做錯了什麼?謝謝你。

有沒有辦法可以將 HTTP 和 HTTPS 分成兩個虛擬主機?您可以僅將 Auth 放在 HTTPS 上,並將 HTTP 重定向到 HTTPS。完整的配置看起來像這樣。

<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
Redirect / https://example.com/
</VirtualHost>

<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com
.
.
.
</VirtualHost>
</IfModule>

我沒有太多的RewriteCond %{HTTPS} off工作運氣——相反,對我有用的是

RewriteCond    %{SERVER_PORT}   !443

另一個建議(來自這個問題)是將 Auth 行移到一個<VirtualHost *:443>部分中。

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