Saya sudah mendapatkan sertifikasi wildcard ssl dan saya mencoba mengalihkan semua lalu lintas non-ssl ke ssl. Saat ini saya menggunakan berikut ini untuk pengalihan url non-subdomain yang berfungsi dengan baik.
server {
listen 80;
server_name mydomain.com;
#Rewrite all nonssl requests to ssl.
rewrite ^ https://$server_name$request_uri? permanent;
}
ketika saya melakukan hal yang sama untuk * .mydomain.com secara logis diarahkan ke
https://%2A.mydomain.com/
Bagaimana Anda mengarahkan semua subdomain ke https mereka yang setara?
Jawaban:
Itu saja...
sumber
$host
variabel?$request_uri
?Dokumentasi resmi NGINX menganjurkan untuk menggunakan arahan balik alih-alih menggunakan arahan penulisan ulang untuk memengaruhi pengalihan. Ini demikian, karena permintaan yang ditulis ulang tidak dimaksudkan untuk server itu, tetapi masih diproses di blok server itu. Jadi pengalihan dilakukan dengan benar dengan arahan balik, karena semua pemrosesan dihentikan dan respons dikirim segera. NGINX melarang menulis ulang untuk pengalihan di sini: http://nginx.org/en/docs/http/converting_rewrite_rules.html
Sintaks untuk arahan balik adalah: URL kode balik; Karena Anda awalnya melakukan penulisan ulang permanen, maka Anda dapat menggunakan 301 sebagai kode untuk merespons, menunjukkan bahwa itu adalah pengalihan permanen. Alamat https Anda akan diteruskan di bagian url. Referensi: http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#return
Jadi konfigurasi Anda yang benar adalah
Ini mungkin akan membiarkan Anda mengarahkan ulang dengan benar ke domain ssl Anda, dengan blok server wildcard. Anda juga dapat mencoba nama server generik garis bawah '_' atau $ host seperti yang disarankan dalam komentar di atas. Beritahu kami!
sumber
return
umumnya lebih baik, konfigurasi yang disarankan tidak benar karena masih menggunakan $ server_name untuk pengalihan, yang akan menjadi "* .mydomain.com". Perbaikan yang benar sudah diuraikan oleh @cjc dalam komentar di atas -$host
harus digunakan sebagai ganti$server_name
.return 301 https://$host$request_uri;
return 301 https://$server_name$request_uri;
agar mereka menggunakan https di port 443. Masalahnya adalah url yang dialihkan masih memiliki nomor port asli. 80 bukan masalah, tapi 8080 keluar sebagaihttps://example.com:8080
Coba sesuatu seperti ini:
Tangkapannya adalah untuk mendefinisikan server wildcard dan melakukan pengalihan berdasarkan namanya.
sumber