Нескінченна петля переадресації з AWS ELB та wordpress сайтом за допомогою Wordpress https плагіна


11

Я налаштував AWS ELB, щоб вказати на мій сервер Ubuntu під управлінням Wordpress 3.2.1. На сервері все працювало чудово, поки я не поставив його за балансир навантаження.

Я встановлюю балансир навантаження на перехідний порт 80 на порт 80 і порт 443 на порт 80.

Я налаштовую свій віртуальний файл хостів, щоб перевірити наявність заголовків у лікті:

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

Тепер, коли я переходжу до URL-адреси https, отримую це повідомлення:

Ця веб-сторінка має цикл переадресації.
Веб-сторінка за адресою https://mywebsite.com/securepage/ призвела до занадто багато переадресацій

Щойно я відключаю плагін https https
( http://wordpress.org/extend/plugins/wordpress-https/ )
Сторінки працюють, але зараз наповнені змішаним вмістом. сторінки, які мають бути https, більше не є https.

Як тільки я звертаюся до сервера безпосередньо замість ліктя, він знову працює.

Будь-які ідеї про те, як я міг змусити це працювати з AWS ELB?


Ви оновили постійну посилання? Зазвичай нам доводиться оновлювати налаштування постійної посилання на wordpress
user905953

Відповіді:


13

Я б загрожував здогадкою, не розміщуючи Вашу конфігурацію ELB про те, що ELB перенаправляє трафік HTTPS (443 / tcp) на екземпляр EC2 на HTTP (80 / tcp). Тоді ви .htaccessта плагін намагаєтесь перенаправити його назад на HTTPS, оскільки його бачать через HTTP.

Погляньте на вашу консоль 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

Я керував одним із своїх клієнтів в рамках AWS вже понад 2 роки ... Коли я прочитав ваше запитання, це перше, що підозрювало мені в голову.
Джеремі Бууз

1
Змінивши LB на точку з 443 на 443 виправив це :) Дякую!
ChickenFur

17

Спробуйте додати це до свого httpd.confабо an.htaccess

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

Використовуючи балансир завантаження + HTTPS, ваш веб-сервер не знає, що HTTPS використовується на передньому кінці, тому продовжує намагатися перенаправляти на сайт HTTPS, коли насправді HTTPS вже використовується.

Сказане перекладе заголовок, який Amazon's Load Balancer відправляє ( X-Forwarded-Proto: https) у змінну середовища, яку Wordpress та інші сценарії PHP розуміють ( HTTPS=1)


3
Це було б правильним способом, оскільки розшифровка SSL залишається на ELB
toske

1
Якщо ви перебуваєте на nginx, подібне доповнення було б:fastcgi_param HTTPS on;
Акаш Будхія

Цей пост закінчився моєю довгого болю ... THX
Daywalker

3

Згідно Amazon тут 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');

Це змусить користувачів робити https, навіть якщо вони вводять http, плюс це спрощує розробку сайту в режимі офлайн, оскільки ви просто оновите WP_HOME до локального хоста, а https - це вже не за замовчуванням


1

Цитуючи себе з іншої корисної публікації https://serverfault.com/a/858308/450836 :

Для мене було достатньо встановити $ _SERVER ['HTTPS'] = 'on'; в wp-config.php. Я використовую AWS ELB, який припиняє SSL на ELB. Тому nginx приймає запит на порт 80 (8080 після лаку) і, схоже, wordpress не зміг із цим впоратися, поки ви прямо не скажете 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

Увімкніть модуль заголовка, а потім додайте наступний запис у конфігурації apache

SetEnvIf X-Forwarded-Proto "https" HTTPS = on RequestHeader set HTTPS "on" env = HTTPS

    RewriteEngine On
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.