프록시 SSL을 포함하여 mod_rewrite를 사용하여 HTTPS 강제 서버는 포트 80을 통한 HTTP로 http_x_forwarded_proto”https”로 나타납니다. 직접

SSL 종료로드 밸런서에서 트래픽을받는 서버가 있습니다.이 경우 서버는 포트 80을 통한 HTTP로 http_x_forwarded_proto“https”로 나타납니다.

직접 HTTPS 트래픽 또는 전달 된 HTTPS 트래픽 만 허용하는 mod_rewrite 규칙이 필요합니다.

나는 지금까지 이것을 가지고있다 :

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 : 잘못된 플래그 구분 기호

오류.

이 작업을 수행하려면 무엇을 수정해야합니까? 이것이 최선의 방법입니까?



답변

문제는 “! =”다음의 공백입니다.

작업 버전 :

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

교활한…


답변

서버와 통신 할 때로드 밸런서가 항상 SSL을 사용하는 경우 항상 사실이므로 첫 번째 검사를 생략해야합니다. (로드 밸런서에서 SSL을 오프로드하는 경우 누군가 SSL을 사용하여 서버에 직접 접근하지 않는 한 첫 번째 행은 항상 참입니다.이 경우 거짓으로 X-Forwarded-Proto인해 누락 되어 리디렉션하지 않습니다 .)

ELB와 웹 서버간에 항상 SSL을 통해 통신하기 때문에 사용중인 코드 :

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