Amazon 로드 밸런서 뒤에서 WordPress HTTPS 문제를 해결하는 방법
전에도 이런 일이 있었어요.Amazon의 EC2 로드 밸런서에서 WordPress(또는 기타 PHP 스크립트)를 실행할 때 스크립트가 https:// 프로토콜로 실행 중인지 인식하지 못하고 끝없는 리디렉션 루프 및 HTTPS 경고("이 페이지의 일부 컨텐츠가 안전하지 않은 방식으로 요청됨)와 같은 문제가 발생합니다..").
여기에서 솔루션을 찾았는데 WordPress core를 수정해야 합니다.업데이트에는 도움이 되지 않습니다.https://wordpress.org/support/topic/when-behind-amazon-web-services-elastic-load-balancer-causes-endless-redirect
WordPress core를 수정하지 않고 수정할 수 있는 방법이 있습니까?Apache 2.2를 사용하고 있습니다.
WordPress의 경우 링크와 마찬가지로 문제가 있습니다.is_ssl()
이 함수는 대부분의 PHP 소프트웨어가 명시적으로 체크하는 것과 같습니다.$_SERVER['HTTPS']
그리고.$_SERVER['SERVER_PORT']
https:// 컨텍스트에서 현재 페이지에 액세스하고 있는지 여부를 확인합니다.
HTTPS를 통해 페이지에 액세스하지만 Amazon 로드 밸런서가 SSL 오프로드를 수행하고 실제로 SSL이 아닌 포트 80에서 컨텐츠를 요청하면 웹 서버, PHP 또는 이와 관련된 다른 모든 항목이 해당 페이지에 액세스하고 있는지 이해하지 못하거나 https://를 통해 액세스하고 있는지 확인할 수 없습니다.
이에 대한 수정은 Amazon의 ELB가 사실상의 표준을 보내는 것입니다.X-Forwarded-Proto
HTTP 헤더: 클라이언트가 로드 밸런서의 반대편에서 실제로 사용하고 있는 프로토콜을 파악하는 데 사용할 수 있습니다.
Apache 2.2에서는 다음과 같은 기능을 사용할 수 있습니다.
<IfModule mod_setenvif.c>
SetEnvIf X-Forwarded-Proto "^https$" HTTPS
</IfModule>
간단히 말하면X-Forwarded-Proto
header를 클릭합니다.이 값이 같은 경우https
그 다음에HTTPS
환경변수는 다음과 같이 설정됩니다.1
PHP는 이 환경변수를 인식하게 되며, 결국 이 환경변수는$_SERVER['HTTPS']
그것은 동등하다1
-- 「실제」네이티브 SSL 요구와 같은 것입니다.
WordPress 문서의 또 다른 옵션은 이를 wp-config에 추가하는 것입니다.php:
if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false)
$_SERVER['HTTPS']='on';
이와 동등한 Nginx를 찾고 있는 다른 사용자가 있을 경우 다음과 같이 하십시오.
재작성 셋업의 경우 다음 항목을 아래에 추가해야 합니다.server
블록:
if ($http_x_forwarded_proto != 'https') {
rewrite ^ https://$host$request_uri? permanent;
}
HTTPS 파라미터를 설정하려면 , 다음의 항목을 추가할 필요가 있습니다.location ~ \.php$
블록:
if ($http_x_forwarded_proto = 'https') {
set $fe_https 'on';
}
fastcgi_param HTTPS $fe_https;
다른 것은 반드시 삭제해 주세요.fastcgi_param HTTPS
명령어(제 안에 있습니다)fastcgi_params
을 클릭합니다.
이 4단계 방법을 사용하여 WordPress에서 ssl을 사용할 때 리다이렉트 루프 및 혼합 콘텐츠 문제를 제거합니다.
1) 데이터베이스의 'http://'를 '//'로 바꿉니다.이미지 및 기타 자산의 모든 상대 URL이 생성됩니다.
2) wp-config에서 범용 wp_home 변수와 wp_siteurl 변수를 정의합니다.
define('WP_HOME','//'. $_SERVER['SERVER_NAME']);
define('WP_SITEURL','//'. $_SERVER['SERVER_NAME']);
3) 로드 밸런서를 사용하고 있는 경우는, 「」를 사용합니다.HTTP_X_FORWARDED_PROTO' 서버 변수.이를 수행하려면 이 행을 wp-config에 추가합니다.
if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false)
$_SERVER['HTTPS']='on';
4) 마지막으로 .htaccess에서 loadbalancer 뒤에 있는 경우 이 행을 사용하여 모든 트래픽을 https로 수정합니다.
# http to https
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule . https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]
유감스럽게도 위의 두 가지 오류 모두 혼합 콘텐츠 오류를 해결하지 못했습니다.그러나 효과가 있었던 것은 wp-config의 WP_HOME &&WP_SITEURL 변수에 프로토콜을 추가하는 것이었다.php 예:
define( 'WP_HOME', 'https://' . $_SERVER['HTTP_HOST']); define( 'WP_SITEURL', WP_HOME );
그 후 소스 내의 모든 URL이 https로 시작되어 혼합 콘텐츠오류가 모두 사라졌습니다.
Server 는 다음과 같습니다.Ubuntu 20.04.3 LTS, PHP 8.0.11, nginx/1.18.0
의 다음 /etc/nginx/sites-available/default
: 작업 완료:
server {
listen 80;
listen [::]:80;
root /var/www/html;
index index.php index.html index.htm;
server_name ChangeDomainName.com www.ChangeDomainName.com;
if ($http_x_forwarded_proto != 'https') {
rewrite ^ https://$host$request_uri? permanent;
}
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.0-fpm.sock;
if ($http_x_forwarded_proto = 'https') {
set $fe_https 'on';
}
fastcgi_param HTTPS $fe_https;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
언급URL : https://stackoverflow.com/questions/30702490/how-to-fix-wordpress-https-issues-when-behind-an-amazon-load-balancer
'programing' 카테고리의 다른 글
왜 JSX 소품은 화살표 기능이나 바인드를 사용하면 안 되는가? (0) | 2023.03.27 |
---|---|
javascript에서 가져오기 응답이 json 객체인지 확인하는 방법 (0) | 2023.03.27 |
Wordpress: 태그로 게시물을 가져오려고 합니다. (0) | 2023.03.22 |
모든 Oracle 패키지와 프로시저를 전문으로 검색할 수 있는 방법이 있습니까? (0) | 2023.03.22 |
http promise가 있는 typscript 모듈에서 "this"가 정의되지 않은 이유 (0) | 2023.03.22 |