Mam Nginx z wieloma domenami w ramach dyrektywy o jednym serwerze jako
server {
listen 80;
server_name www.domain.com;
server_name x.domain.com;
server_name y.domain.com;
----
----
----
}
Teraz muszę użyć dyrektywy lokalizacji, aby dopasować subdomenę i zastosować do niej podstawowe uwierzytelnianie. Odpowiednik
location x.domain.com {
auth_basic "Admin Login";
auth_basic_user_file /etc/nginx/.htpasswd;
}
Jak mam to zrobic?
?
i<>
? Uważam, że tak powinno byćserver_name ~^(?<sub>\.)?(?<domain>.+)$;
Jedną z opcji jest zwrócenie błędu i wysłanie go do lokalizacji obsługującej uwierzytelnianie HTTP:
źródło
Jeśli korzystasz z mapy, nie musisz używać dyrektywy lokalizacyjnej. To najprostsze rozwiązanie i ekwiwalent, jaki mogę wymyślić. Możesz nazwać pliki htpasswd zgodnie ze swoim $ http_host np
x.domain.com.htpasswd
.źródło
allow
/deny
w ten sam sposób?$remote_addr
zamiast$http_host
. Nie jestem jednak pewien co do zakresów.Jeśli masz wiele (pod) domen i nie zachowują się one dokładnie tak samo, korzystasz z wielu serwerów blcoks. Przepraszamy, ale to naprawdę najlepszy sposób, nawet jeśli będziesz mieć większą konfigurację.
Możesz zrobić włamanie do getta, używając czegoś takiego jak if ($ http_host ~ foo), ale najprawdopodobniej uciekniesz przed nieprzewidywalnym i dziwnym zachowaniem if, jak udokumentowano tutaj: http://wiki.nginx.org/IfIsEvil
Nie próbuj przechytrzyć Nginx, po prostu skorzystaj z opcji, które ci daje, a będziesz mieć o wiele mniej problemów.
źródło