วิธีวางไซต์ WordPress ไว้ด้านหลังตัวจัดสรรภาระงาน AWS
เรามีไซต์ wordpress เก่าที่โฮสต์บนเซิร์ฟเวอร์ AWS EC2 linux ที่ฉันพยายามวางไว้ข้างหลังตัวโหลดบาลานเซอร์เพื่อที่ฉันจะได้ใช้ HTTPS และ WAF ฉันเป็นผู้ดูแลระบบที่ค่อนข้างมีประสบการณ์ แต่ยังใหม่มากสำหรับ wordpress ฉันมีปัญหาในการโหลดเนื้อหาผ่าน HTTPS ในขณะเดียวกันก็ไม่เข้าสู่การวนรอบการเปลี่ยนเส้นทางระหว่างตัวโหลดบาลานเซอร์และเซิร์ฟเวอร์
ฉันมีการตั้งค่าตัวโหลดบาลานเซอร์เพื่อพูดคุยกับเซิร์ฟเวอร์บนพอร์ต 80 และถ้า WP_SITEURL / WP_HOME ถูกตั้งค่าเป็น http: // ฉันได้รับข้อผิดพลาดของเนื้อหาผสมมากมายในคอนโซล chrome dev เนื่องจากพยายามโหลดสคริปต์และ css http. ถ้าฉันเปลี่ยน WP_SITEURL / WP_HOME เป็น https: // มันจะสร้างลูปการเปลี่ยนเส้นทางเนื่องจาก wordpress พยายามเปลี่ยนเส้นทางตัวโหลดบาลานเซอร์ซึ่งพยายามสื่อสารบนพอร์ต 80 เป็น https
มีวิธีอนุญาตให้ตัวโหลดบาลานเซอร์เข้าถึงเซิร์ฟเวอร์บนพอร์ต 80 ในขณะที่ยังคงมี URL พื้นฐานสำหรับรีซอร์สสคริปต์ ฯลฯ เป็น https หรือไม่
คำตอบ
เมื่อ WordPress อยู่หลัง https proxy (ตัวจัดสรรภาระงานของคุณ) จะไม่รู้ว่าเปิดใช้งาน https พร็อกซีทำงานผ่าน https (443 พอร์ต) แต่การสื่อสารระหว่างพร็อกซีและ WordPress ผ่าน http (80 พอร์ต) สำหรับการรับส่งข้อมูล WordPress คือผ่าน http นั่นคือเหตุผลที่คุณได้รับการเปลี่ยนเส้นทางลูปจาก https ไปยัง http (โดย WordPress) และอีกครั้งจาก http เป็น https (โดยพร็อกซี) คุณต้องบังคับให้ WordPress เริ่มทำงานบน https
วางบรรทัดนี้ลงในไฟล์ wp-config.php
$_SERVER['HTTPS'] = 'on';
บางครั้งพร็อกซีส่งส่วนหัวเพิ่มเติมHTTP_X_FORWARDED_PROTO
ไปยัง WordPress เพื่อแจ้งให้ทราบว่าการรับส่งข้อมูลดั้งเดิมอยู่บน https คุณสามารถใช้มันให้คล่องตัวขึ้นเล็กน้อย
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') { $_SERVER['HTTPS'] = 'on';
}
เปลี่ยนWP_SITEURL
และWP_HOME
ใช้ https และแทนที่ลิงก์ทั้งหมดในฐานข้อมูลเป็น https
อ้างอิง: https://developer.wordpress.org/reference/functions/is_ssl/