Eu tenho o nginx executando vários domínios sob uma diretiva de servidor único, como
server {
listen 80;
server_name www.domain.com;
server_name x.domain.com;
server_name y.domain.com;
----
----
----
}
Agora, preciso usar a diretiva de localização para corresponder a um subdomínio e aplicar a autenticação básica a ele. O equivalente a
location x.domain.com {
auth_basic "Admin Login";
auth_basic_user_file /etc/nginx/.htpasswd;
}
Como eu faço isso?
?
e<>
? Eu acredito que deveria serserver_name ~^(?<sub>\.)?(?<domain>.+)$;
Uma opção é retornar um erro e enviá-lo para um local que lida com a autenticação HTTP:
fonte
Você não precisa usar a diretiva de localização se usar o mapa. Esta é a solução mais simples e equivalente em que consigo pensar. Você pode nomear os arquivos htpasswd de acordo com o seu $ http_host, por exemplo
x.domain.com.htpasswd
.fonte
allow
/deny
da mesma maneira também?$remote_addr
vez de$http_host
. Não tenho certeza sobre os intervalos embora.Se você possui vários (sub) domínios e eles não se comportam exatamente da mesma forma, você usa vários blcoks de servidor. Desculpe, mas essa é realmente a melhor maneira, mesmo que você tenha uma configuração maior.
Você pode invadir o gueto usando algo como if ($ http_host ~ foo), mas provavelmente irá se deparar com o comportamento imprevisível e estranho do if conforme documentado aqui: http://wiki.nginx.org/IfIsEvil
Não tente enganar o Nginx, basta usar as opções que ele oferece e você terá muito menos dores de cabeça.
fonte