Ich habe Nginx mehrere Domänen unter einer einzigen Server-Direktive als ausgeführt
server {
listen 80;
server_name www.domain.com;
server_name x.domain.com;
server_name y.domain.com;
----
----
----
}
Jetzt muss ich die location-Direktive verwenden, um eine Unterdomäne zuzuordnen und grundlegende Authentifizierung darauf anzuwenden. Das Äquivalent von
location x.domain.com {
auth_basic "Admin Login";
auth_basic_user_file /etc/nginx/.htpasswd;
}
Wie mache ich das?
?
und<>
? Ich glaube, es sollte seinserver_name ~^(?<sub>\.)?(?<domain>.+)$;
Eine Möglichkeit besteht darin, einen Fehler zurückzugeben und diesen Fehler an einen Speicherort zu senden, der die HTTP-Authentifizierung verarbeitet:
quelle
Sie müssen die Location-Direktive nicht verwenden, wenn Sie eine Karte verwenden. Dies ist die einfachste Lösung und das Äquivalent, das ich mir vorstellen kann. Sie können die htpasswd-Dateien entsprechend Ihrem $ http_host benennen, z
x.domain.com.htpasswd
.quelle
allow
/deny
auf die gleiche Weise durchzusetzen ?$remote_addr
statt$http_host
. Ich bin mir jedoch nicht sicher über die Bereiche.Wenn Sie mehrere (Sub-) Domains haben und diese sich nicht genau gleich verhalten , verwenden Sie mehrere Server-Blöcke. Tut mir leid, aber das ist im Ernst der beste Weg, obwohl Sie eine größere Konfiguration haben.
Sie können einen Ghetto-Hack durchführen, indem Sie so etwas wie if ($ http_host ~ foo) verwenden, aber dann werden Sie höchstwahrscheinlich das unvorhersehbare und seltsame Verhalten von if in Frage stellen, wie hier dokumentiert: http://wiki.nginx.org/IfIsEvil
Versuchen Sie nicht, Nginx auszutricksen, sondern nutzen Sie die Optionen, die es Ihnen bietet, und Sie werden viel weniger Kopfschmerzen haben.
quelle