Saat ini saya memiliki ELB yang melayani http://www.example.org dan https://www.example.org .
Saya ingin mengaturnya sehingga permintaan apa pun yang mengarah ke http://www.example.org dialihkan ke https://www.example.org .
ELB mengirimkan permintaan https sebagai permintaan http, jadi menggunakan:
server {
listen 80;
server_name www.example.org;
rewrite ^ https://$server_name$request_uri? permanent;
}
tidak akan berfungsi karena permintaan yang dibuat ke https://www.example.org masih akan dilakukan ke port 80 di nginx.
Saya tahu mungkin untuk menulis ulang sebagai
server {
listen 80;
server_name www.example.org;
if ($http_x_forwarded_proto != "https") {
rewrite ^(.*)$ https://$server_name$1 permanent;
}
}
Tetapi semua yang saya baca mengatakan bahwa if
harus dihindari di semua biaya dalam konfigurasi nginx, dan ini akan untuk setiap permintaan tunggal. Juga, itu berarti saya harus mengatur konfigurasi terpisah khusus untuk pemeriksaan kesehatan ( seperti dijelaskan di sini : "... ketika Anda berada di belakang ELB, di mana ELB bertindak sebagai titik akhir HTTPS dan hanya mengirim lalu lintas HTTP ke server Anda, Anda mematahkan kemampuan untuk merespons dengan respons HTTP 200 OK untuk pemeriksaan kesehatan yang dibutuhkan ELB ").
Saya mempertimbangkan untuk memasukkan login ke dalam kode aplikasi web daripada konfigurasi nginx (dan untuk keperluan pertanyaan ini mari kita asumsikan itu adalah aplikasi berbasis Django), tetapi saya tidak yakin apakah itu akan lebih mahal daripada yang if
di konfigurasi.
Jawaban:
Jika itu berfungsi dengan benar seperti itu, jangan takut. http://wiki.nginx.org/IfIsEvil
sumber
location {}
,server {}
sebagai gantinya. (Tapi tolong beri tahu saya jika ini salah!)Pengaturan NGINX
sumber
HTTP:1443
. Ia menolakHTTP:80
karena 301 redirect.Solusi ini menggunakan logika kondisional, tetapi seperti jawaban yang diterima menyarankan, saya juga berpikir ini ok. Ref: /programming/4833238/nginx-conf-redirect-multiple-conditions
Juga, ini tidak memerlukan pembukaan port tambahan dalam pengaturan keamanan aws untuk gambar. Anda dapat menghentikan ssl di AWS LB, dan merutekan lalu lintas https ke http port 80 atas contoh Anda.
Dalam contoh ini, pemeriksaan kesehatan LB mengenai kesehatan di port 80 yang merutekan ke server aplikasi, jadi pemeriksaan kesehatan memvalidasi nginx dan aplikasi Anda bernafas.
sumber
Anda sekarang dapat membuat Listener baru di AWS Load Balancer Settings yang mengarahkan ulang HTTP Port 80 ke HTTPS Port 443. Jadi Anda tidak perlu menyentuh konfigurasi nginx / apache lagi.
sumber