Alihkan semua lalu lintas HTTP ke HTTPS saat menggunakan Load Balancer HTTP (S) di Google Compute Engine

18

Saya memiliki HTTP / HTTPS Load Balancing yang diatur di Google Compute Engine dengan 2 Aturan Penerusan Global (HTTP dan HTTPS). Setiap aturan menunjuk ke layanan back-end dengan protokol HTTP.

Saya ingin semua permintaan http://*masuk https://*.

Ketika load balancer berbicara ke layanan back-end melalui HTTP, saya rasa saya tidak bisa mendapatkan nginx pada layanan back-end untuk mengirim kembali a 301.

Saya sudah mencoba selusin tweak kecil di google compute dan semuanya berakhir dengan google compute mengembalikan a 502.

Saya yakin orang lain telah mengatur ini sebelumnya. Setiap tips atau petunjuk ke arah yang benar sangat dihargai.

Ryan Leckey
sumber
Pengalihan HTTP ke HTTPS (menggunakan SSL) saat ini tidak didukung melalui penyeimbang beban HTTP / HTTPS. Pengalihan harus dikonfigurasi pada server web Anda (apache, nginx dll). Dengan itu, jangan ragu untuk mengajukan permintaan fitur ini di pelacak masalah publik Compute Engine ( code.google.com/p/google-compute-engine/issues/list ).
Faizan
Terima kasih; membuka masalah: code.google.com/p/google-compute-engine/issues/…
Ryan Leckey
Ok sempurna, saya telah meneruskan permintaan fitur ke engineering.
Faizan
@ Saizan - apakah ada garis waktu kapan fitur ini akan tersedia? Sudah sekitar 2 tahun sejak fitur diminta. Penanganannya kikuk.
talonx
Tautan baru untuk permintaan ini adalah issuetracker.google.com/issues/35904733 (meskipun yang lama masih dialihkan).
Daniel Compton

Jawaban:

19

Kami memiliki pengaturan serupa menggunakan penyeimbang beban HTTP / HTTPS dan kami berhasil memaksa HTTPS. Ini tidak mungkin langsung dari penyeimbang beban tetapi Anda dapat mengaturnya dari layanan backend Anda. Penyeimbang beban Google Cloud akan menetapkan header http X-Forwarded-Proto dengan nilai http atau https. Anda memeriksa header ini di layanan backend Anda (dalam kasus kami Varnish tetapi ini juga bisa dilakukan di Nginx) dan jika nilainya http maka Anda mengirim kembali 301.

Lennert Kuijpers
sumber
8
Terima kasih! Demi anak cucu: if ($http_x_forwarded_proto = "http") { return 301 https://$host$request_uri; }
Ryan Leckey
Anda harus menggunakan 426tajuk peningkatan HTTP alih-alih 301. Baca Selengkapnya: stackoverflow.com/questions/17873247/…
Vikram Tiwari
3
Saya tidak setuju Vikram, Anda harus menggunakan 301 untuk keperluan SEO. Jika Anda mengembalikan kode keluarga 4xx, pagerank Anda tidak akan mengalir dari tautan yang mengarah ke http lama ke https. 301 adalah kode yang diharapkan, setidaknya jika Anda peduli tentang SEO di situs Anda.
cyrrill
1
@VikramTiwari, jawaban posting sebenarnya menyatakan: "Ini bahkan bukan tentang peningkatan dari http: // ke https: // at all"
Rambatino
1

Saya menghadapi masalah ini hari ini dan dapat menyelesaikannya dengan menggunakan load balancing TCP. Jika Anda tidak memerlukan opsi penyeimbang beban khusus HTTP / HTTPS, mungkin Anda dapat menggunakan penyeimbang Beban TCP (tanpa SSL) untuk menerima lalu lintas ke port 80 dan 443. Untuk lalu lintas dari port 80, Anda dapat mengirim kembali 301.

Gselva
sumber
1
tcp load balancing tidak diizinkan untuk port 80 doc > TCP Proxy Load Balancing mendukung port berikut: 25, 43, 110, 143, 195, 443, 465, 587, 700, 993, 995, 1883, 5222
Giovanni Toraldo