Saya menggunakan penyeimbang beban Rackspace yang memungkinkan saya untuk mengatur kunci ssl saya / pem di dalam panel admin. Semuanya berfungsi dengan baik, saya bisa menggunakan protokol http dan https. Tetapi jika saya mencoba mengalihkan http ke https menggunakan:
server{
listen *:80;
server_name mydomain.com www.mydomain.com;
rewrite ^ https://mydomain.com$request_uri? permanent;
... Saya mendapatkan loop pengalihan. Saya sadar saya tidak mendengarkan port 443 tapi itu karena penyeimbang beban menangani itu untuk saya. Saya juga mencoba membungkus penulisan ulang if ($scheme ~* http){
tanpa hasil.
Bagian lain dari pertanyaan saya adalah bahwa saya ingin menghapus www dari url, dapatkah saya melakukan ini dengan penulisan ulang tunggal? Bukankah seharusnya penulisan ulang di atas juga menangani hal ini?
Terima kasih atas bantuan Anda!
nginx
load-balancing
jwerre
sumber
sumber
Jawaban:
sciurus benar dalam Cloud Load Balancers Rackspace yang mengatur X-Forwarded-Proto ke https ketika SSL diturunkan di load balancer. Untuk menghindari loop redirect di nginx, Anda harus dapat menambahkan berikut ini ke
location
bagian dalam konfigurasi vhost:Ini harus menghindari loop pengalihan tanpa batas sambil mengarahkan permintaan non-https ke https.
sumber
Dengan menggunakan variabel server bawaan nginx
$request_uri
dan$server_name
Anda dapat melakukan ini tanpa menggunakan ekspresi reguler sama sekali. Tambahkan berikut ini kelocation
blok server Anda dan Anda selesai:Ini mengasumsikan load balancer Anda mengirimkan
$http_x_forwarded_proto
header bersama dengan permintaan ke instance backend Anda. Header umum lainnya termasuk$http_x_forwarded_scheme
dan juga adil$scheme
.Informasi lebih lanjut dapat ditemukan di dokumentasi Pitgin dan Kesalahan Umum nginx : https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/#taxing-rewrites
sumber
$host
sebagai gantinya$server_name
Penyeimbang beban selalu berbicara kepada Anda melalui http. Apa yang terjadi adalah
Langkah 2-4 terus berulang sampai browser mendeteksi loop redirect dan menyerah.
EDIT: Untuk mengatasi ini, hanya melakukan penulisan ulang ketika header X-Forwarded-Proto diatur ke http. Header itu adalah bagaimana penyeimbang beban Rackspace memberi tahu server web Anda protokol yang melaluinya ia menerima permintaan.
sumber