Bagaimana cara mengarahkan HTTP ke HTTPS di AWS Application Load Balancer?

12

Situs web kami membutuhkan kepatuhan HIPAA sehingga semuanya harus dienkripsi. Saya tidak ingin klien mendapatkan pesan kesalahan ketika mereka memasukkan " http : //mysite.com", jadi saya perlu mendukung HTTP dan HTTPS, dan mengalihkan HTTP ke HTTPS. Apakah saya benar?

Saya melakukannya dengan benar di server web. Jadi jika saya langsung terhubung ke server web, HTTP secara otomatis dialihkan ke HTTPS. Semuanya bagus.

Tetapi server web duduk di belakang Aplikasi Load Balancer AWS. Saya tidak tahu cara mengarahkan HTTP ke HTTPS di ELB. Jadi browser klien masih dapat terhubung ke ELB melalui HTTP.

Bagaimana cara mengatur HTTP => HTTPS pada Aplikasi Load Balancer AWS?

Dengan kata lain, saya yakin koneksi antara ELB dan server web adalah HTTPS, tetapi bagaimana memastikan koneksi antara browser klien dan ELB adalah HTTPS?

Bung konyol
sumber
Anda tidak melakukannya di LB. Anda melakukannya pada instance, berdasarkan X-Forwarded-Protoheader yang dikirim LB.
ceejayoz
Saya bukan orang server - saya seorang programmer C #, jadi tolong permisi karena saya bodoh - Saya telah menggunakan modul penulisan ulang URL untuk mengatur pengalihan pada server Windows. Ini berfungsi jika saya langsung terhubung ke server. Tetapi jika saya terhubung ke ELB, saya masih bisa terhubung dengan HTTP. Mengapa?
Silly Dude
Apakah ALB mendengarkan pada 443 dengan Sertifikat SSL di atasnya? Untuk memastikan dalam pertanyaan Anda, Anda juga ingin SSL antara ALB dan server?
strongjz

Jawaban:

-4

Anda dapat menambahkan konfigurasi yang tercantum di bawah ini ke file .htaccess Anda. Tetapi sebelum itu pastikan mod_rewrite diaktifkan di server dan file .htaccess tidak ditolak.

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule . https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]

Untuk penjelasan terperinci silakan membaca dokumentasi resmi dari aws end. https://aws.amazon.com/premiumsupport/knowledge-center/redirect-http-https-elb/

imvikasmunjal
sumber
7
Jawaban ini tampaknya melibatkan Server HTTP Apache
Paul Draper
2
OP bertanya bagaimana mengkonfigurasi ELB sehingga Anda menjelaskan cara mengkonfigurasi Apache? Mereka secara eksplisit mengatakan bahwa mereka telah mengkonfigurasi Apache untuk melakukan pengalihan. Harap hapus jawaban Anda.
Cerin
1

Biasanya yang terjadi adalah bahwa ELB diatur untuk menerima https (port 443) dan meneruskan ke instance EC2 (load balancer target) di http (port 80).

Server web backend mengalihkan permintaan ini ke port 443 pada load balancer, menyebabkan loop redirect yang tak terbatas (antara load balancer dan server web backend).

Pesan kesalahan umum adalah ERR_TOO_MANY_REDIRECTS.

Solusinya adalah dengan melihat X-Forwarded-Proto, yang merupakan protokol seperti yang terlihat oleh load balancer, ketika memutuskan pengalihan.

Untuk nginx konfigurasi akan terlihat seperti ini:

server {
    listen   80;
    server_name    www.example.org;   
    if ($http_x_forwarded_proto = 'http') {
         return 301 https://$server_name$request_uri;   
    }
}

dan untuk apache .htaccess sesuatu seperti ini:

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]

CATATAN: Meskipun orang mungkin berpikir akan lebih mudah jika ini dapat ditangani tanpa konfigurasi ulang server web, pada musim semi 2018 tidak ada cara untuk menyelesaikan ini hanya menggunakan ELB, yaitu Anda harus mengkonfigurasi server web Anda untuk membuat pekerjaan ini.

sandstrom
sumber