Saya menggunakan HAProxy untuk load balancing dan hanya ingin situs saya mendukung https. Karenanya, saya ingin mengalihkan semua permintaan di port 80 ke port 443.
Bagaimana saya melakukan ini?
Edit: Kami ingin mengalihkan ke url yang sama di https, menjaga parameter kueri. Jadi, http://foo.com/bar akan dialihkan ke https://foo.com/bar
redirect scheme https code 301 if { hdr(Host) -i www.mydomain.com } !{ ssl_fc }
http-request redirect scheme https code 301 if !{ ssl_fc }
. Dokumentasi untuk http redirection di ALOHA HAProxy 7.0 bahkan menyebutkan bahwa " sintaks kedua direktif itu sama, yang mengatakan, redirect sekarang dianggap sebagai legacy dan konfigurasi harus pindah ke bentuk http-request redirect ". Saya menyimpulkan, tanpa sepenuhnya yakin, bahwa penjelasan yang sama berlaku untuk rilis terbaru dari versi open source HAProxy.Saya tidak memiliki reputasi yang cukup untuk mengomentari jawaban sebelumnya, jadi saya memposting jawaban baru untuk melengkapi jawaban Jay Taylor. Pada dasarnya jawabannya akan melakukan pengalihan, meskipun pengalihan implisit, artinya akan mengeluarkan 302 (pengalihan sementara), tetapi karena pertanyaan tersebut menginformasikan bahwa seluruh situs web akan disajikan sebagai https, maka pengalihan yang sesuai haruslah 301 (pengalihan permanen ).
Tampaknya ada perubahan kecil, tetapi dampaknya mungkin besar bergantung pada situs web, dengan pengalihan permanen kami memberi tahu browser bahwa seharusnya tidak lagi mencari versi http sejak awal (menghindari pengalihan di masa mendatang) - penghemat waktu untuk https situs. Ini juga membantu dengan SEO, tetapi tidak membagi jus tautan Anda.
sumber
Untuk mengarahkan semua lalu lintas:
redirect scheme https if !{ ssl_fc }
Untuk mengalihkan satu url (Jika ada beberapa frontend / backend)
redirect scheme https if { hdr(Host) -i www.mydomain.com } !{ ssl_fc }
sumber
Menurut http://parsnips.net/haproxy-http-to-https-redirect/ , semudah mengonfigurasi haproxy.cfg Anda untuk memuat ikuti.
sumber
Cara terjamin terbaik untuk mengalihkan semua http ke https adalah:
Ini sedikit lebih menarik menggunakan 'kode 301 ′, tetapi mungkin juga memberi tahu klien bahwa ini permanen. Bagian 'mode http' tidak penting dengan konfigurasi default, tetapi tidak ada salahnya. Jika Anda memiliki
mode tcp
di bagian default (seperti yang saya lakukan), maka itu perlu.sumber
Sedikit variasi dari solusi user2966600 ...
Untuk mengalihkan semua kecuali satu URL (Jika ada beberapa frontend / backend):
sumber
Seperti yang dikatakan Jay Taylor, HAProxy 1.5-dev memiliki
redirect scheme
arahan konfigurasi, yang menyelesaikan apa yang Anda butuhkan.Namun, jika Anda tidak dapat menggunakan 1.5, dan jika Anda siap untuk mengompilasi HAProxy dari sumber, saya mem-backport
redirect scheme
fungsionalitasnya sehingga berfungsi di 1.4. Anda bisa mendapatkan patchnya di sini: http://marc.info/?l=haproxy&m=138456233430692&w=2sumber
sumber
Di versi HAProxy yang lebih baru, disarankan untuk digunakan
untuk mengarahkan lalu lintas http ke https.
sumber
Jika Anda ingin menulis ulang url, Anda harus mengubah virtualhost situs Anda dengan menambahkan baris ini:
Tetapi, jika Anda ingin mengalihkan semua permintaan Anda pada port 80 ke port 443 server web di belakang proxy, Anda dapat mencoba contoh conf ini di haproxy.cfg Anda:
Saya harap ini membantu Anda
sumber
Mengapa Anda tidak menggunakan ACL untuk membedakan lalu lintas? di atas kepalaku:
Ini melampaui apa yang dijawab oleh Matthew Brown.
Lihat ha docs , cari hal-hal seperti hdr_dom dan di bawah ini untuk menemukan lebih banyak opsi ACL. Ada banyak pilihan.
sumber
Tambahkan ini ke konfigurasi frontend HAProxy:
sumber
Bisa dilakukan seperti ini -
Semua lalu lintas yang masuk ke http akan dialihkan ke https
sumber
pernyataan pengalihan adalah warisan
gunakan http-request redirect sebagai gantinya
sumber
Secara sederhana:
sumber