Saya ingin mengarahkan semua permintaan HTTP ke permintaan https di ELB . Saya memiliki dua instans EC2. Saya menggunakan nginx untuk server. Saya telah mencoba menulis ulang file conf nginx tanpa hasil. Saya ingin nasihat tentang itu.
redirect
nginx
amazon-ec2
https
amazon-elb
Amit Badheka
sumber
sumber
Jawaban:
Application Load Balancers AWS sekarang mendukung pengalihan HTTP ke HTTPS asli.
Untuk mengaktifkan ini di konsol, lakukan hal berikut:
Hal yang sama dapat dicapai dengan menggunakan CLI seperti yang dijelaskan di sini .
Anda juga dapat melakukan ini di Cloudformation, di mana Anda perlu menyiapkan objek Pendengar seperti ini:
Jika Anda masih menggunakan Classic Load Balancers, gunakan salah satu konfigurasi NGINX yang dijelaskan oleh yang lain.
sumber
instances
tab)ELB menyetel
X-Forwarded-Proto
header, Anda dapat menggunakannya untuk mendeteksi apakah permintaan asli adalah HTTP dan kemudian dialihkan ke HTTPS.Anda dapat mencoba ini di
server
konfigurasi Anda :Lihat dokumen ELB .
sumber
nginx
konfigurasi, tetapi prinsipnya dapat diterapkan ke server web mana pun.Saya memiliki masalah yang sama, dalam situasi saya HTTPS ditangani sepenuhnya oleh ELB dan saya tidak tahu domain sumber saya sebelumnya, jadi saya akhirnya melakukan sesuatu seperti:
Dan tentu saja mengarahkan ELB 'https' ke port instance 80 dan kemudian 'http' route ke port instance 81.
sumber
Amazon Elastic Load Balancer (ELB) mendukung header HTTP yang disebut X-FORWARDED-PROTO. Semua permintaan HTTPS melalui ELB akan memiliki nilai X-FORWARDED-PROTO yang sama dengan "HTTPS". Untuk permintaan HTTP, Anda dapat memaksa HTTPS dengan menambahkan aturan penulisan ulang sederhana berikut. Bagi saya ini berfungsi dengan baik!
Apache
Anda dapat menambahkan baris berikut di file .htaccess Anda:
Atau jika Anda menggunakan vhost.conf untuk mengelola beberapa domain di server web EC2 yang sama, maka Anda dapat menambahkan berikut ini ke vhost.conf (tambahkan ke domain yang ingin Anda gunakan https untuk itu):
IIS
Instal modul IIS Url-Rewrite, menggunakan konfigurasi GUI, tambahkan pengaturan berikut:
Baca lebih lanjut di sini
sumber
RewriteCond %{HTTP:X-Forwarded-Proto} !(https|^$)
Solusi htaccess di atas menyebabkan health check ELB gagal. Saya mengalami kesulitan menemukan solusinya sampai saya menemukan artikel online di mana seseorang memiliki masalah yang sama dengan saya. Solusinya adalah menambahkan ini ke awal file htaccess sebagai gantinya:
Sumber: Mengalihkan HTTP ke HTTPS dengan AWS dan ELB
sumber
Ini mungkin bukan solusi yang mungkin Anda cari, tetapi opsi lainnya adalah menggunakan AWS CloudFront selain ELB. CloudFront memberikan opsi untuk mengalihkan semua lalu lintas HTTP yang masuk ke HTTPS.
sumber
Saya punya masalah aneh dengan konfigurasi nginx dan ELB. Pengaturan saya menyertakan 3 layanan berbeda di dalam satu nginx di belakang ELB. Dan saya memiliki masalah konten campuran: ketika permintaan Anda ke ELB adalah https, tetapi di dalam ELB http saja, dan server membuat jalur relatif ke statis menggunakan http, jadi browser gagal dengan masalah 'konten campuran'. Dan saya harus membuat solusi untuk kedua http / https bekerja tanpa pengalihan.
Berikut adalah konfigurasi yang terletak di
nginx/conf.d/
folder:Artinya kita akan mengetahui apa itu protokol klien yang sebenarnya. Seperti yang Anda lihat, kami akan memilikinya di
$switch
var. Dan saat ini Anda menggunakan ini di semua lokasi di mana Anda membutuhkannya:Dengan pengaturan HTTPS, aplikasi php akan secara otomatis mendeteksi protokol yang benar dan dengan hati-hati membangun jalur relatif untuk mencegah masalah konten campuran.
Salam Hormat.
sumber
Berdasarkan jawaban @ Ulli Jika Anda ingin mengkonfigurasinya menggunakan Terraform , berikut adalah contoh>
Sumber
sumber
Buat file
.ebextensions/00_forward_http_to_https.config
dengan konten berikut:Pastikan untuk mengatur variabel lingkungan APP_URL dari konsol manajemen AWS sebelumnya.
sumber