Apache: перенаправить на https перед AUTH для состояния сервера

Я хочу заставить https и базовую аутентификацию для вывода состояния сервера (mod_status). Если я включу аутентификацию и пользователь попросит http://site/server-status Apache сначала запрашивает pass, затем перенаправляет на httpS, затем снова запрашивает pass.

Этот вопрос похож на Apache - перенаправить на https перед AUTH и принудительно установить https с apache перед.htpasswd, но я не могу заставить его работать, потому что мы говорим не об общей папке, а о структуре Location.

Моя конфигурация (коротко) выглядит следующим образом:

<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. Если это имеет значение, на сервере есть несколько сайтов.

Что я делаю неправильно? Спасибо.

2 ответа

Решение

Есть ли способ разделить 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> раздел.

Другие вопросы по тегам