Paksa HTTPS dengan mod_rewrite, termasuk proksi SSL

9

Saya punya server yang mendapatkan lalu lintas dari penghenti beban terminasi SSL - dalam hal ini HTTP sebagai port over 80 dengan http_x_forwarded_proto= "https"

Saya ingin aturan mod_rewrite yang hanya mengizinkan lalu lintas HTTPS langsung atau lalu lintas HTTPS diteruskan.

Saya punya ini sejauh ini:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP:http_x_forwarded_proto} != https
RewriteCond %{HTTP:http_x_forwarded_proto} != HTTPS
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

tapi aku mengerti

RewriteCond: pembatas bendera yang buruk

kesalahan.

Apa yang perlu saya koreksi agar ini berfungsi, dan apakah ini pendekatan terbaik?

Yarin
sumber

Jawaban:

16

Masalahnya adalah spasi setelah "! =":

Versi kerja:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP:X-Forwarded-Proto} !https [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

rumit...

Yarin
sumber
Saya tidak yakin bahwa jika SSL dibongkar, variabel HTTPS akan pernah disetel. Bagaimanapun dalam situasi saya ini bekerja dengan baik tanpa tes pertama.
wurtel
1

Jika Anda memiliki load balancer yang selalu menggunakan SSL saat berkomunikasi dengan server, Anda harus menghilangkan centang pertama karena itu akan selalu benar. (Jika Anda membongkar SSL di load balancer, baris pertama selalu benar kecuali seseorang mengelola langsung menekan server Anda menggunakan SSL yang dalam kasus ini akan salah dan tidak mencoba untuk mengarahkan ulang karena X-Forwarded-Protoakan hilang.)

Kode yang saya gunakan karena kami selalu berkomunikasi melalui SSL antara ELB dan server web:

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Loren
sumber