워드 프레스 https 플러그인을 사용하는 AWS ELB 및 워드 프레스 사이트를 통한 무한 리다이렉트 루프


11

Wordpress 3.2.1을 실행하는 Ubuntu 서버를 가리 키도록 AWS ELB를 구성했습니다. 로드 밸런서 뒤에 놓을 때까지 서버에서 모든 것이 잘 작동했습니다.

포트 80을 포트 80으로, 포트 443을 포트 80으로 전달하도록로드 밸런서를 설정했습니다.

elb에서 헤더를 확인하기 위해 가상 호스트 파일을 설정했습니다.

RewriteEngine On
RewriteCond % {HTTP : X-Forwarded-Proto}! https
RewriteRule! / status https : // % {SERVER_NAME} % {REQUEST_URI} [L, R]

이제 https URL에 갈 때 마다이 메시지가 나타납니다.

이 웹 페이지에 리디렉션 루프
가 있습니다 https://mywebsite.com/securepage/ 의 웹 페이지에서 리디렉션이 너무 많이 발생했습니다

Wordpress https 플러그인
( http://wordpress.org/extend/plugins/wordpress-https/ )을 비활성화하자마자
페이지가 작동하지만 혼합 된 콘텐츠로 가득 차 있습니다. https 여야하는 페이지는 더 이상 https가 아닙니다.

elb 대신 서버에 직접 액세스하자마자 다시 작동합니다.

이것을 AWS ELB와 함께 사용할 수있는 방법에 대한 아이디어가 있습니까?


퍼머 링크를 업데이트하셨습니까? 일반적으로 우리는 wordpress에 대한 permalink 설정을 업데이트해야합니다
— user905953

답변:


13

ELB 구성을 게시하지 않으면 ELB가 HTTPS (443 / tcp) 트래픽을 HTTP (80 / tcp)의 EC2 인스턴스로 리디렉션한다고 추측 할 수 있습니다. 그런 다음 .htaccess플러그인이 HTTP를 통해 표시되므로 HTTPS로 다시 리디렉션하려고합니다.

아래에 당신의 EC2 콘솔을 살펴 이동 Network & Security > Load Balancers하고 난 당신이 볼 수 있습니다 상상 Port Configuration의 라인을 따라 뭔가를 말한다443 forwarding to 80 (HTTPS, Certificate: blah)


1
여기이 사람도 같은 문제가있었습니다. forums.aws.amazon.com/…
— ChickenFur

1
그리고 이것은 비슷한 것으로 보입니다 stackoverflow.com/questions/5741210/…
— ChickenFur

당신의 권리 나는 443에서 80을 전달하고 있습니다.
— ChickenFur

저는 2 년 넘게 AWS에서 고객 중 한 명을 운영해 왔습니다. 귀하의 질문을 읽었을 때, 이것이 의심의 여지없이 제 머리에 떠오른 첫 번째 질문입니다.
— Jeremy Bouse

1
LB가 443에서 443으로 변경되도록 수정했습니다 :) 감사합니다!
— ChickenFur

17

이것을 당신 httpd.conf이나.htaccess

SetEnvIfNoCase X-FORWARDED-PROTO "^https$" HTTPS

로드 밸런서 + HTTPS를 사용하는 경우 웹 서버는 프런트 엔드에서 HTTPS가 사용되고 있음을 인식하지 못하므로 HTTPS가 이미 사용중인 경우 HTTPS 사이트로 리디렉션하려고합니다.

위의 내용은 Amazon의 Load Balancer가 보내는 헤더 X-Forwarded-Proto: https를 Wordpress 및 기타 PHP 스크립트가 이해하는 환경 변수로 변환합니다 ( HTTPS=1).


3
이것은 ELB에 SSL 암호 해독 유적으로, 할 올바른 방법이 될 것입니다
— toske

1
nginx를 사용하는 경우 비슷한 추가 사항은 다음과 같습니다.fastcgi_param HTTPS on;
— Akash Budhia

이 포스트는 나의 시간 긴 고통을 끝내었다 ... THX
— Daywalker

3

여기 https://d0.awsstatic.com/whitepapers/deploying-wordpress-with-aws-elastic-beanstalk.pdf 에 따르면 수정 사항은 다음과 같습니다.

/** Detect if SSL is used. This is required since we are terminating SSL either on CloudFront or on ELB */ 
if (($_SERVER['HTTP_CLOUDFRONT_FORWARDED_PROTO'] == 'https') OR ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https'))
    {$_SERVER['HTTPS']='on';}

나는 여전히 끝없는 루프로 끝났으므로 WordPress 구성을 다음과 같이 변경했습니다.

define('WP_HOME','http://www.example.com');
define('WP_SITEURL','http://www.example.com');

에:

define('WP_HOME','https://www.example.com');
define('WP_SITEURL','https://www.example.com');

이렇게하면 사용자가 http를 입력하더라도 https를 사용하게되며 WP_HOME을 로컬 호스트로 업데이트하기 만하면 https가 더 이상 기본값이 아니므로 사이트를 오프라인에서 쉽게 개발할 수 있습니다.


1

다른 유용한 게시물 https://serverfault.com/a/858308/450836 에서 나 자신을 인용 :

나를 위해 $ _SERVER [ 'HTTPS'] = 'on'; wp-config.php에서. ELB에서 SSL을 종료하는 AWS ELB를 사용하고 있습니다. 따라서 nginx는 포트 80 (니스 후 8080)에서 요청을 수락하며 PHP가 사이트에서 이미 https를 사용하고 있다고 명시 적으로 말할 때까지 워드 프레스가 처리 할 수없는 것처럼 보입니다 ...

비 SSL ELB 리스너의 경우 별도의 구성을 사용하여 모든 트래픽을 기본 리스너로 https로 리디렉션합니다.


0

@Tim이 제안했듯이 $_SERVER['HTTPS']='on';wp-config.php 에서이 트릭을 수행했습니다.

또한 이것을 .htaccess 파일에 추가하여 HTTPS를 강제했습니다.

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{REMOTE_ADDR} !^127\.0\.0\.1$
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=302]

0

AWS ALB에서 너무 많은 리디렉션 문제 수정

헤더 모듈을 활성화 한 다음 아파치 구성에서 다음 항목을 추가하십시오.

SetEnvIf X-Forwarded-Proto "https"HTTPS = on RequestHeader가 HTTPS를 "on"으로 설정 한 경우 env = HTTPS

    RewriteEngine On
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.