วนรอบการเปลี่ยนเส้นทางไม่สิ้นสุดกับ AWS ELB และไซต์ wordpress โดยใช้ปลั๊กอิน wordpress https


11

ฉันได้กำหนดค่า AWS ELB ให้ชี้ไปที่เซิร์ฟเวอร์ Ubuntu ที่ใช้งาน Wordpress 3.2.1 ทุกอย่างทำงานได้ดีบนเซิร์ฟเวอร์จนกว่าฉันจะวางไว้ด้านหลังตัวโหลดบาลานซ์

ฉันตั้งค่าตัวโหลดบาลานซ์เพื่อส่งต่อพอร์ต 80 ไปยังพอร์ต 80 และพอร์ต 443 ไปยังพอร์ต 80

ฉันตั้งค่าไฟล์โฮสต์เสมือนของฉันเพื่อตรวจสอบส่วนหัวจาก elb:

RewriteEngine เมื่อ
RewriteCond% {HTTP: X-Forwarded-Proto}! https
RewriteRule! / สถานะhttps: //% {SERVER_NAME}% {REQUEST_URI} [L, R]

ตอนนี้เมื่อใดก็ตามที่ฉันไปที่ URL ที่ฉันได้รับข้อความนี้:

หน้าเว็บนี้มีการวนรอบการเปลี่ยนเส้นทาง
หน้าเว็บที่https://mywebsite.com/securepage/ส่งผลให้มีการเปลี่ยนเส้นทางมากเกินไป

ทันทีที่ฉันปิดการใช้งานปลั๊กอิน wordpress https
( http://wordpress.org/extend/plugins/wordpress-https/ )
หน้าเว็บทำงาน แต่ตอนนี้เต็มไปด้วยเนื้อหาผสม หน้าที่ควรจะเป็น https จะไม่มีอีกต่อไป

ทันทีที่ฉันเข้าถึงเซิร์ฟเวอร์โดยตรงแทนที่จะใช้ elb มันจะทำงานได้อีกครั้ง

มีความคิดเห็นใดเกี่ยวกับวิธีที่ฉันสามารถทำให้เรื่องนี้ทำงานกับ 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 ปีแล้ว ... เมื่อฉันอ่านคำถามของคุณนั่นเป็นสิ่งแรกที่โผล่เข้ามาในหัวของฉันเป็นผู้ต้องสงสัย
Jeremy Bouse

1
เปลี่ยน LB เป็นจุดจาก 443 เป็น 443 คงที่ :) ขอบคุณ!
ChickenFur

17

ลองเพิ่มสิ่งนี้ลงในของคุณhttpd.confหรือ.htaccess

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

เมื่อใช้ load balancer + HTTPS เว็บเซิร์ฟเวอร์ของคุณไม่ทราบว่ามีการใช้ HTTPS ในส่วนหน้าดังนั้นพยายามเปลี่ยนเส้นทางไปยังไซต์ HTTPS ในความเป็นจริง HTTPS กำลังถูกใช้อยู่แล้ว

ด้านบนจะแปลส่วนหัวที่ Load Balancer ของ Amazon ส่ง ( X-Forwarded-Proto: https) ลงในตัวแปรสภาพแวดล้อมที่ Wordpress และสคริปต์ PHP อื่น ๆ เข้าใจ ( HTTPS=1)


3
นี่จะเป็นวิธีที่ถูกต้องเพราะการถอดรหัส SSL ยังคงอยู่ใน ELB
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');

สิ่งนี้จะบังคับให้ผู้ใช้ https แม้ว่าพวกเขาจะพิมพ์ http และทำให้ง่ายต่อการพัฒนาไซต์ออฟไลน์เพราะคุณเพิ่งอัปเดต WP_HOME เป็นโลคัลโฮสต์และ https ไม่ใช่ค่าเริ่มต้นอีกต่อไป


1

อ้างถึงตัวเองจากโพสต์ที่เป็นประโยชน์อีกhttps://serverfault.com/a/858308/450836 :

สำหรับฉันมันก็เพียงพอแล้วที่จะตั้งค่า $ _SERVER ['HTTPS'] = 'เปิด'; ใน wp-config.php ฉันใช้ AWS ELB ซึ่งยกเลิก SSL ใน 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

เปิดใช้งานโมดูลส่วนหัวแล้วเพิ่มรายการต่อไปนี้ในการกำหนดค่า apache

SetEnv ถ้า X-Forwarded-Proto "https" HTTPS = บน RequestHeader ตั้ง HTTPS "ที่" 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.