Vòng lặp chuyển hướng vô tận với AWS ELB và trang wordpress sử dụng plugin wordpress https


11

Tôi đã cấu hình ELS AWS để trỏ đến Máy chủ Ubuntu của tôi đang chạy Wordpress 3.2.1. Tất cả mọi thứ hoạt động tốt trên máy chủ cho đến khi tôi đặt nó phía sau một bộ cân bằng tải.

Tôi thiết lập bộ cân bằng tải để chuyển tiếp cổng 80 sang cổng 80 và cổng 443 sang cổng 80.

Tôi thiết lập tệp máy chủ ảo của mình để kiểm tra các tiêu đề từ khuỷu tay:

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

Bây giờ bất cứ khi nào tôi truy cập url https, tôi nhận được thông báo này:

Trang web này có vòng lặp chuyển hướng
Trang web tại https://mywebsite.com/securepage/ đã dẫn đến quá nhiều chuyển hướng

Ngay sau khi tôi tắt plugin wordpress https
( http://wordpress.org/extend/plugins/wordpress-https/ )
Các trang hoạt động nhưng hiện có đầy đủ nội dung hỗn hợp. các trang nên là https không còn là https nữa.

Ngay khi tôi truy cập trực tiếp vào máy chủ thay vì thông qua khuỷu tay, nó sẽ hoạt động trở lại.

Có ý tưởng nào về cách tôi có thể làm điều này hoạt động với AWS ELB không?


bạn đã cập nhật permalink chưa? thông thường chúng ta phải cập nhật cài đặt permalink trên wordpress
user905953

Câu trả lời:


13

Tôi sẽ mạo hiểm đoán mà không cần bạn đăng cấu hình ELB của bạn rằng ELB đang chuyển hướng lưu lượng HTTPS (443 / tcp) sang phiên bản EC2 trên HTTP (80 / tcp). Sau đó, bạn .htaccessvà plugin đang cố gắng chuyển hướng nó trở lại HTTPS vì nó được nhìn thấy qua HTTP.

Hãy nhìn vào bảng điều khiển EC2 của bạn bên dưới Network & Security > Load Balancersvà tôi sẽ tưởng tượng bạn sẽ thấy câu Port Configurationnói nào đó dọc theo dòng443 forwarding to 80 (HTTPS, Certificate: blah)


1
Người này ở đây cũng gặp vấn đề tương tự. forum.aws.amazon.com/ từ
ChickenFur

1
và cái này có vẻ tương tự stackoverflow.com/questions/5741210/
Kiếm

quyền của bạn Tôi đang chuyển tiếp 443 đến 80.
ChickenFur

Tôi đã điều hành một trong những khách hàng của mình dưới AWS được hơn 2 năm rồi ... Khi tôi đọc câu hỏi của bạn, đó là điều đầu tiên xuất hiện trong đầu tôi như nghi ngờ.
Jeremy Bouse

1
Thay đổi LB thành điểm từ 443 thành 443 đã sửa nó :) Cảm ơn!
ChickenFur

17

Hãy thử thêm nó vào httpd.confhoặc của bạn.htaccess

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

Khi sử dụng bộ cân bằng tải + HTTPS, máy chủ web của bạn không biết rằng HTTPS đang được sử dụng ở giao diện người dùng, vì vậy hãy cố gắng chuyển hướng đến trang web HTTPS, trong thực tế, HTTPS đã được sử dụng.

Ở trên sẽ dịch tiêu đề mà Load Balancer của Amazon gửi ( X-Forwarded-Proto: https) thành một biến môi trường mà Wordpress và các tập lệnh PHP khác hiểu ( HTTPS=1)


3
Đây sẽ là cách chính xác, vì giải mã SSL vẫn còn trên ELB
bắt đầu từ

1
Nếu bạn đang sử dụng nginx, sự bổ sung tương tự sẽ là:fastcgi_param HTTPS on;
Akash Budhia

Bài đăng này đã kết thúc nỗi đau kéo dài hàng giờ của tôi ... THX
Daywalker

3

Theo Amazon tại đây https://d0.awsstatic.com/whitepapers/deploying-wordpress-with-aws-elastic-beanstalk.pdf cách khắc phục là:

/** 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';}

Tôi vẫn kết thúc với vòng lặp vô tận, vì vậy tôi đã thay đổi cấu hình WordPress của mình như sau:

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

đến:

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

Điều này sẽ buộc người dùng https, ngay cả khi họ nhập http, cộng với việc giúp phát triển trang ngoại tuyến dễ dàng vì bạn chỉ cần cập nhật WP_HOME lên máy chủ cục bộ và https không còn là mặc định


1

Trích dẫn bản thân từ một bài viết hữu ích khác /server//a/858308/450836 :

Đối với tôi, đủ để đặt $ _SERVER ['HTTPS'] = 'on'; trong wp-config.php. Tôi đang sử dụng AWS ELB chấm dứt SSL trên ELB. Do đó, nginx chấp nhận yêu cầu trên Cổng 80 (8080 sau khi véc ni) và có vẻ như wordpress không thể xử lý được cho đến khi bạn nói rõ với PHP rằng trang web đã sử dụng https ...

Đối với Trình nghe ELB không SSL, tôi sử dụng một cấu hình riêng để chuyển hướng tất cả lưu lượng truy cập sang https làm trình nghe mặc định.


0

Như @Tim đã đề xuất, điều này $_SERVER['HTTPS']='on';trong wp-config.php đã giúp tôi.

Tôi cũng đã thêm nó vào tệp .htaccess của mình để buộc 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

Khắc phục sự cố chuyển hướng quá nhiều trong aws ALB

Kích hoạt mô-đun tiêu đề sau đó thêm mục sau trong cấu hình apache

SetEnv If X-Forwarded-Proto "https" HTTPS = trên RequestHeader đặt HTTPS "trên" env = HTTPS

    RewriteEngine On
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.