У меня nginx работает несколько доменов под одной директивой сервера, как
server {
listen 80;
server_name www.domain.com;
server_name x.domain.com;
server_name y.domain.com;
----
----
----
}
Теперь мне нужно использовать директиву location, чтобы соответствовать поддомену и применить к нему базовую аутентификацию. Эквивалент
location x.domain.com {
auth_basic "Admin Login";
auth_basic_user_file /etc/nginx/.htpasswd;
}
Как мне это сделать?
?
и<>
? Я считаю, что это должно бытьserver_name ~^(?<sub>\.)?(?<domain>.+)$;
Один из вариантов - вернуть ошибку и отправить ее в местоположение, которое обрабатывает HTTP-аутентификацию:
источник
Вам не нужно использовать директиву местоположения, если вы используете карту. Это самое простое решение и эквивалент, который я могу придумать. Вы можете назвать файлы htpasswd в соответствии с вашим $ http_host, например
x.domain.com.htpasswd
.источник
allow
/deny
?$remote_addr
вместо$http_host
. Не уверен насчет диапазонов, хотя.Если у вас есть несколько (суб) домены и они не ведут себя точно так , то вы используете несколько blcoks сервера. Извините, но это серьезно лучший способ, даже если у вас будет большая конфигурация.
Вы можете взломать гетто, используя что-то вроде if ($ http_host ~ foo), но тогда вы, скорее всего, столкнетесь с непредсказуемым и странным поведением if, как описано здесь: http://wiki.nginx.org/IfIsEvil
Не пытайтесь перехитрить Nginx, просто используйте опции, которые он вам дает, и у вас будет гораздо меньше головной боли.
источник