프록시 SSL을 포함하여 mod_rewrite를 사용하여 HTTPS 강제


9

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

오류.

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

답변:


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

서버와 통신 할 때로드 밸런서가 항상 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]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.