NB: это не дубликат, так как отмеченное сообщение касается более старых версий apache. Я пробовал решения в этом потоке, а также тот, который должен работать в более поздних версиях, безуспешно.
Есть несколько вопросов и ответов, которые касаются отдельных частей этого, но я не нашел точно такой ситуации.
У меня есть веб-сайт, к которому я хочу быть открытым из моей сети 10.0.0.0. Но при доступе к нему через внешний адрес, перенаправленный в маршрутизаторе, я хочу, чтобы .htaccess требовал входа в систему.
Я знаю, как запрашивать пароль для всех подключений, и у меня есть идея разрешить / запретить определенный адрес или IP. Но я хочу, чтобы ВСЕ IP-адреса, которые не находятся в локальной сети, нуждались в логине / пароле.
Обновление: Apache2 версии 2.2.22
Вот что происходит, когда я пробую решение из ответа, который, как утверждают, является дубликатом:
AuthName "Authenticate"
AuthType Basic
AuthUserFile "/home/frank/.htpassword"
Require valid-user
Order allow,deny
Allow from 10.0.0.44
Satisfy All
С указанным выше файлом .htaccess доступ через внешний адрес запрещен, точка. Нет запроса на вход. С определенного локального IP-адреса (.44) я получаю приглашение на вход.
AuthName "Authenticate"
AuthType Basic
AuthUserFile "/home/frank/.htpassword"
Require valid-user
Order allow,deny
Allow from 10.0.0.0/8
Satisfy All
С вышесказанным, как внешние, так и внутренние соединения запрашиваются с логином.
Попытка сузить проблему:
Это не работает: (разрешены как внешний, так и LAN-адреса)
Order Deny,Allow
Deny from all
Allow from 10.0.0.0/8
Это работает: (внешний адрес получает отказ в доступе, а локальная сеть - нет)
Order Deny,Allow
Deny from all
Allow from 10.0.0.44
ОБНОВИТЬ: Я упустил что-то фундаментальное?
Когда я пробую это:
Order Deny,Allow
Deny from all
Отказано все, как из локальной сети, так и по внешнему адресу.
Однако, когда я пытаюсь это сделать:
Order Deny,Allow
Allow from 127.0.0.1
Разрешено все, как из локальной сети, так и с внешнего адреса.
Проблема в том, как я пытаюсь получить доступ с вечного адреса? Сервер имен домена mydomain.no указывает на маршрутизатор. Я перенаправил домен mydomain.no на виртуальные серверы маршрутизатора. Трафик через порт 80 направляется на сервер, на котором выполняется установка apache2. Я хочу, чтобы весь трафик, приходящий через адрес mydomain.no (и любые другие домены, перенаправленные на тот же сервер), требовал пароля. Для трафика из локальной сети пароль не требуется.
Я предполагаю, что вы используете Apache 2.4, для Apache 2.2 синтаксис другой.
Вы можете добавить несколько Require
директивы:
AuthName "Authenticate"
AuthType Basic
AuthUserFile "/var/www/html/.htpasswd"
<RequireAny>
Require valid-user
Require ip 10.0.0
</RequireAny>
Технически вам даже не нужен <RequireAny>
, apache будет использовать его неявно, когда его нет, но я считаю, что так легче читать.
Эквивалент для apache 2.2:
AuthName "Authenticate"
AuthType Basic
AuthUserFile "/var/www/html/.htpasswd"
Require valid-user
Order allow,deny
Allow from 10.0.0
Satisfy any
Удален мой собственный ответ, поскольку он был неправильным и, возможно, сбивал с толку других, задающих тот же вопрос.