Apache:在服务器状态 AUTH 之前重定向到 https

Apache:在服务器状态 AUTH 之前重定向到 https

我想强制使用 https 和基本身份验证来输出服务器状态 (mod_status)。如果我启用身份验证,并且用户要求http://site/server-statusapache 首先要求通过,然后重定向到 httpS,然后再次要求通过。

这个问题类似于 Apache - AUTH 之前重定向到 https在 .htpasswd 之前强制使用 apache 的 https 但我无法让它工作,因为我们谈论的不是通用文件夹而是位置结构。

我的配置(简要)如下:

<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 整个网站,而只想 SSL /server-status。如果服务器有多个网站,那就有关系了。

我做错了什么?谢谢。

答案1

有没有办法将 HTTP 和 HTTPS 分成两个虚拟主机?您可以只在 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>

答案2

我没有太多的运气找到RewriteCond %{HTTPS} off工作——相反,对我有用的是

RewriteCond    %{SERVER_PORT}   !443

另一个建议(从这个问题)将把 Auth 行移到一个<VirtualHost *:443>部分中。

相关内容