Tengo nginx ejecutando múltiples dominios bajo una sola directiva de servidor como
server {
listen 80;
server_name www.domain.com;
server_name x.domain.com;
server_name y.domain.com;
----
----
----
}
Ahora, necesito usar la directiva de ubicación para que coincida con un subdominio y aplicarle la autenticación básica. El equivalente de
location x.domain.com {
auth_basic "Admin Login";
auth_basic_user_file /etc/nginx/.htpasswd;
}
¿Cómo hago esto?
?
y<>
? Creo que debería serserver_name ~^(?<sub>\.)?(?<domain>.+)$;
Una opción es devolver un error y enviarlo a una ubicación que maneje la autenticación HTTP:
fuente
No necesita usar la directiva de ubicación si usa el mapa. Esta es la solución más simple y equivalente que se me ocurre. Puede nombrar los archivos htpasswd de acuerdo con su $ http_host, por ejemplo
x.domain.com.htpasswd
.fuente
allow
/deny
de la misma manera también?$remote_addr
lugar de$http_host
. Sin embargo, no estoy seguro de los rangos.Si tiene múltiples (sub) dominios y no se comportan exactamente igual, entonces usa múltiples servidores blcoks. Lo sentimos, pero esa es realmente la mejor manera, a pesar de que tendrá una configuración más grande.
Puede hacer un hack de ghetto usando algo como if ($ http_host ~ foo) pero entonces probablemente se encontrará con el comportamiento impredecible y extraño de if como se documenta aquí: http://wiki.nginx.org/IfIsEvil
No intentes burlar a Nginx, solo usa las opciones que te da y tendrás muchos menos dolores de cabeza.
fuente