Buộc HTTPS bằng mod_rewrite, bao gồm SSL ủy nhiệm


9

Tôi đã có một máy chủ nhận được một số lưu lượng truy cập từ bộ cân bằng tải kết thúc SSL - trong trường hợp đó, nó xuất hiện dưới dạng HTTP qua cổng 80 với a http_x_forwarded_proto= "https"

Tôi muốn một quy tắc mod_rewrite chỉ cho phép lưu lượng HTTPS trực tiếp hoặc lưu lượng HTTPS được chuyển tiếp.

Tôi có cái này cho đến nay:

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]

nhưng tôi đang nhận được

RewriteCond: dấu phân cách cờ xấu

lỗi.

Tôi cần làm gì để sửa lỗi này, và đây có phải là cách tiếp cận tốt nhất?

Câu trả lời:


16

Vấn đề là khoảng trắng sau dấu "! =":

Phiên bản làm việc:

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

khó khăn...


Tôi không chắc chắn rằng nếu SSL bị giảm tải, biến HTTPS sẽ được đặt. Dù sao trong tình huống của tôi, điều này làm việc tốt mà không cần thử nghiệm đầu tiên.
wurtel

1

Nếu bạn có bộ cân bằng tải luôn sử dụng SSL khi liên lạc với máy chủ, bạn cần bỏ qua kiểm tra đầu tiên vì nó sẽ luôn đúng. (Nếu bạn đang giảm tải SSL ở bộ cân bằng tải, dòng đầu tiên luôn luôn đúng trừ khi có ai đó trực tiếp đánh vào máy chủ của bạn bằng SSL trong trường hợp đó là sai và không cố chuyển hướng vì X-Forwarded-Protosẽ bị mất.)

Mã tôi đang sử dụng vì chúng tôi luôn liên lạc qua SSL giữa ELB và máy chủ web:

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.