J'ai nginx exécutant plusieurs domaines sous une seule directive serveur comme
server {
listen 80;
server_name www.domain.com;
server_name x.domain.com;
server_name y.domain.com;
----
----
----
}
Maintenant, je dois utiliser la directive location pour faire correspondre un sous-domaine et lui appliquer l'authentification de base. L'équivalent de
location x.domain.com {
auth_basic "Admin Login";
auth_basic_user_file /etc/nginx/.htpasswd;
}
Comment puis-je faire cela?
?
et<>
? Je crois que ça devrait êtreserver_name ~^(?<sub>\.)?(?<domain>.+)$;
Une option consiste à renvoyer une erreur et à l'envoyer à un emplacement qui gère l'authentification HTTP:
la source
Vous n'avez pas besoin d'utiliser la directive location si vous utilisez la carte. C'est la solution la plus simple et équivalente à laquelle je puisse penser. Vous pouvez nommer les fichiers htpasswd en fonction de votre $ http_host par exemple
x.domain.com.htpasswd
.la source
allow
/deny
de la même manière?$remote_addr
place de$http_host
. Je ne suis pas sûr des plages cependant.Si vous avez plusieurs (sous) domaines et qu'ils ne se comportent pas exactement de la même manière , vous utilisez plusieurs blcoks de serveur. Désolé mais c'est vraiment la meilleure façon, même si vous aurez une configuration plus grande.
Vous pouvez faire un piratage du ghetto en utilisant quelque chose comme if ($ http_host ~ foo), mais vous vous exposerez très probablement au comportement imprévisible et étrange de if comme indiqué ici: http://wiki.nginx.org/IfIsEvil
N'essayez pas de déjouer Nginx, utilisez simplement les options qu'il vous offre et vous aurez beaucoup moins de maux de tête.
la source