บังคับ HTTPS ด้วย mod_rewrite รวมถึงพร็อกซี SSL


9

ฉันมีเซิร์ฟเวอร์ที่รับปริมาณการใช้งานจาก SSL ที่ยกเลิก load balancer ซึ่งในกรณีนั้นมันจะเป็น HTTP ผ่านพอร์ต 80 ด้วยhttp_x_forwarded_proto= "https"

ฉันต้องการกฎ mod_rewrite ที่อนุญาตเฉพาะทราฟฟิก HTTPS โดยตรงหรือทราฟฟิก HTTPS ที่ส่งต่อ

ฉันมีสิ่งนี้:

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]

แต่ฉันได้รับ

RewriteCond: ตัวคั่นธงไม่ถูกต้อง

ความผิดพลาด

ฉันต้องแก้ไขอะไรเพื่อให้ได้งานนี้และนี่คือแนวทางที่ดีที่สุด

คำตอบ:


16

ปัญหาคือช่องว่างหลังจาก "! =":

รุ่นใช้งาน:

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

หากิน ...


ฉันไม่แน่ใจว่าหาก SSL ถูกถ่ายออกมาตัวแปร HTTPS จะถูกตั้งค่าไว้ อย่างไรก็ตามในสถานการณ์ของฉันนี้ทำงานได้ดีโดยไม่ต้องทดสอบครั้งแรก
wurtel

1

หากคุณมี load balancer ใช้ SSL เสมอเมื่อสื่อสารกับเซิร์ฟเวอร์คุณจะต้องละเว้นการตรวจสอบครั้งแรกเพราะจะเป็นจริงเสมอ (หากคุณถ่าย SSL ที่ load balancer บรรทัดแรกจะเป็นจริงเสมอเว้นแต่มีคนจัดการเซิร์ฟเวอร์ของคุณโดยตรงโดยใช้ SSL ซึ่งในกรณีนี้จะเป็นเท็จและไม่พยายามเปลี่ยนเส้นทางเนื่องจากX-Forwarded-Protoจะหายไป)

รหัสที่ฉันใช้เนื่องจากเราสื่อสารผ่าน SSL ระหว่าง ELB และเว็บเซิร์ฟเวอร์เสมอ:

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.