Я пытаюсь настроить Apache, чтобы разрешить пользователям с выбранными IP-адресами доступ к приложению Flask без аутентификации, но для запроса учетных данных любых других пользователей.
Сейчас у меня следующая конфигурация:
<directory /var/www/flaskapp>
WSGIProcessGroup flaskapp
WSGIApplicationGroup %{GLOBAL}
WSGIScriptReloading On
WSGIPassAuthorization On
Order deny,allow
AuthType Basic
AuthName "Restricted area - authorised users only"
AuthUserFile "/usr/local/apache/passwd"
<RequireAll>
<RequireAny>
Require ip 1.1.1.1
</RequireAny>
Require valid-user
</RequireAll>
</directory>
Это не работает, а вместо этого предлагает всем пользователям пройти аутентификацию.
Я должен упомянуть, что использовал htpasswd
для создания пользовательского файла в расположении /usr/local/apache/passwd
как указано в конфиге.
Вам нужен только RequireAny
состояние:
<RequireAny> и </RequireAny> используются для включения группы директив авторизации, одна из которых должна быть успешной, чтобы директива <RequireAny> была успешной.
<RequireAny>
Require ip 1.1.1.1
Require valid-user
</RequireAny>
Поскольку вы используете Apache 2.4, вы можете использовать выражения. В вашем случае это будет:
<If "%{REMOTE_ADDR} != '127.0.0.1'">
AuthType Basic
AuthName "Restricted area - authorised users only"
AuthUserFile usr/local/apache/passwd
require valid-user
</If>
Также поддерживается нотация CIDR. Например.:
<If "%{REMOTE_ADDR} != '192.168.0.0/24'">
AuthType Basic
AuthName "Restricted area - authorised users only"
AuthUserFile usr/local/apache/passwd
require valid-user
</If>