워드 프레스 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.