Saya memiliki nginx menjalankan beberapa domain di bawah direktif server tunggal
server {
listen 80;
server_name www.domain.com;
server_name x.domain.com;
server_name y.domain.com;
----
----
----
}
Sekarang, saya perlu menggunakan arahan lokasi untuk mencocokkan subdomain dan menerapkan autentikasi dasar untuk itu. Setara dengan
location x.domain.com {
auth_basic "Admin Login";
auth_basic_user_file /etc/nginx/.htpasswd;
}
Bagaimana saya melakukan ini?
?
dan<>
? Saya percaya itu harusserver_name ~^(?<sub>\.)?(?<domain>.+)$;
Salah satu opsi adalah mengembalikan kesalahan dan mengirim kesalahan itu ke lokasi yang menangani otentikasi HTTP:
sumber
Anda tidak perlu menggunakan arahan lokasi jika Anda menggunakan peta. Ini adalah solusi paling sederhana dan setara yang dapat saya pikirkan. Anda dapat memberi nama file htpasswd menurut $ http_host misalnya
x.domain.com.htpasswd
.sumber
allow
/deny
dengan cara yang sama juga?$remote_addr
bukan$http_host
. Tidak yakin tentang rentang.Jika Anda memiliki beberapa (sub) domain dan mereka tidak berperilaku sama persis maka Anda menggunakan beberapa server blcoks. Maaf tapi itu serius cara terbaik, meskipun Anda akan memiliki konfigurasi yang lebih besar.
Anda dapat melakukan peretasan ghetto dengan menggunakan sesuatu seperti if ($ http_host ~ foo) tetapi kemudian Anda kemungkinan besar akan bertabrakan dengan perilaku aneh dan tak terduga jika seperti yang didokumentasikan di sini: http://wiki.nginx.org/IfIsEvil
Jangan mencoba mengakali Nginx, cukup gunakan opsi yang memberi Anda dan Anda akan memiliki sakit kepala jauh lebih sedikit.
sumber