Bagaimana menempatkan situs wordpress di belakang penyeimbang beban AWS
Kami memiliki situs wordpress lama yang dihosting di server linux AWS EC2 yang saya coba letakkan di belakang penyeimbang beban sehingga saya dapat menggunakan HTTPS dan WAF. Saya seorang sysadmin yang agak berpengalaman tetapi saya sangat baru mengenal wordpress. Saya mengalami masalah saat memuat konten melalui HTTPS sementara pada saat yang sama tidak masuk ke loop pengalihan antara penyeimbang beban dan server.
Saya memiliki penyetelan penyeimbang beban untuk berbicara dengan server pada port 80 dan jika WP_SITEURL / WP_HOME disetel ke http: //, saya mendapatkan banyak kesalahan konten campuran di konsol dev chrome karena mencoba memuat skrip dan css over http. Jika saya mengubah WP_SITEURL / WP_HOME menjadi https: //, ini akan membuat perulangan pengalihan karena wordpress terus mencoba mengalihkan penyeimbang beban, yang mencoba berkomunikasi pada port 80, ke https.
Apakah ada cara untuk mengizinkan penyeimbang beban menjangkau server pada port 80 sambil tetap memiliki URL dasar untuk sumber daya, skrip, dll, menjadi https?
Jawaban
Saat WordPress berada di belakang proxy https (penyeimbang beban Anda), WordPress tidak tahu bahwa https diaktifkan. Proxy bekerja melalui https (port 443) tetapi komunikasi antara proxy dan WordPress melalui http (port 80). Untuk traffic WordPress melalui http, itulah mengapa Anda mendapatkan redirect loop dari https ke http (oleh WordPress) dan lagi dari http ke https (oleh proxy). Anda perlu memaksa WordPress untuk mulai mengerjakan https.
Tempel baris ini ke file wp-config.php
$_SERVER['HTTPS'] = 'on';
Terkadang proxy mengirim tajuk tambahan HTTP_X_FORWARDED_PROTO
ke WordPress untuk memberi tahu bahwa lalu lintas asli ada di https. Anda bisa menggunakannya agar sedikit lebih fleksibel
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') { $_SERVER['HTTPS'] = 'on';
}
Ubah WP_SITEURL
dan WP_HOME
gunakan https. Dan ganti semua link di database menjadi https.
Referensi: https://developer.wordpress.org/reference/functions/is_ssl/