Saya mengalami masalah memaksa HTTPS dengan situs yang saya gunakan melalui AWS Elastic Beanstalk.
Ini adalah aplikasi frontend menggunakan EmberJS. Saya telah berputar-putar selama berhari-hari mencoba mencari cara untuk mengarahkan lalu lintas http ke https. Saya menggunakan Amazon Linux AMI di mesin EC2 saya.
Saya sampai pada kesimpulan (masih tidak yakin apakah ini benar) bahwa tidak dalam Elastic Beanstalk saya memaksakan HTTPS. Saya mengizinkan HTTP dan HTTPS melalui Elastic Beanstalk Load Balancer saya, dan saya mencoba untuk mengarahkan ulang di server.
Di sinilah saya mengalami masalah. Saya menemukan banyak jawaban tentang aturan penulisan ulang yang tanpanya mod_rewrite
berbasis di sekitar X-Forwarded-Proto
Header, tetapi file itu tidak ada di mesin EC2 saya menurut pencarian pencarian.
Saya juga mencoba membuat file config di dalam .ebextensions
direktori, tetapi tidak berhasil.
Hal utama yang saya coba lakukan adalah meminta pengguna diarahkan ke https ketika mencoba menekan alamat http. Setiap petunjuk atau saran sangat dihargai, terima kasih!
EDIT: Saya menggunakan 64bit Debian jessie v1.4.1 menjalankan Python 3.4 (Pra-konfigurasi - Docker)
sumber
Jawaban:
Saya pikir Anda perlu menentukan lingkungan Elastic Beanstalk apa yang Anda gunakan (lihat: Platform yang Didukung ), karena lingkungan yang berbeda memiliki konfigurasi yang berbeda.
Pada dasarnya, Anda perlu menyesuaikan:
Untuk menyesuaikannya, Anda dapat menggunakan CLI atau
.ebextensions
.Anda dapat memeriksa Aktifkan HTTPS dan HTTP-Redirect di AWS Elastic Beanstalk . Ini memberitahu Anda cara mengkonfigurasi Container Beanstalk Single Docker melayani HTTPS dan HTTP (redirect ke HTTPS). Anda dapat menyesuaikan konfigurasi sesuai kebutuhan.
sumber
arn:aws:iam::123456789012:server-certificate/YourSSLCertificate
format.ssl_certificate /opt/ssl/default-ssl.crt;
Ketika saya mendapatkan informasi untuk sertifikat, itu memberi saya "jalan" tetapi itu hanya "/"Dimungkinkan juga untuk melakukan itu dengan lebih mudah, tanpa menyentuh penyeimbang beban, dengan menggunakan
X-Forwarded-Proto
header yang ditetapkan oleh ELB. Inilah yang akhirnya saya lakukan:sumber
Elastic Beanstalk tidak mendukung banyak port dari Container Docker Tunggal, jadi Anda perlu menanganinya di level proxy seperti yang disarankan. Namun, instance EC2 Anda tidak perlu tahu tentang sertifikat Anda, karena Anda dapat mengakhiri koneksi SSL di load balancer.
Di
.ebextensions
direktori Anda , buat konfigurasi untuk proksi nginx yang berisi dua konfigurasi server; yang proksihttp://docker
(konfigurasi default, port 80), dan yang mengarahkan ke https (saya memilih port 8080)..ebextensions/01-nginx-proxy.config
:Buat konfigurasi kedua untuk penyeimbang beban dan grup keamanan EB yang mengaturnya sebagai berikut:
.ebextensions/02-load-balancer.config
:(Catatan: jangan lupa untuk mengganti SSLCertificateId dan VpcId dengan nilai Anda).
Setiap lalu lintas pada port 80 dari load balancer (HTTP) akan mencapai port 8080 pada instance EC2, yang dialihkan ke HTTPS. Lalu lintas pada port 443 pada load balancer (HTTPS) akan berakhir dilayani oleh port 80 pada instance EC2, yang merupakan proxy buruh pelabuhan.
sumber
Saya menggunakan Terraform untuk mengaktifkan pengalihan HTTP ke HTTPS di ElasticBeanstalk,
Saya baru saja menambahkan Aturan Pendengar tambahan
sumber