Saya telah mengkonfigurasi AWS ELB untuk menunjuk ke Server Ubuntu saya yang menjalankan Wordpress 3.2.1. Semuanya bekerja dengan baik di server sampai saya letakkan di belakang load balancer.
Saya mengatur load balancer untuk meneruskan port 80 ke port 80 dan port 443 ke port 80.
Saya mengatur file host virtual saya untuk memeriksa header dari elb:
RewriteEngine On
RewriteCond% {HTTP: X-Forwarded-Proto}! Https
RewriteRule! / Status https: //% {SERVER_NAME}% {REQUEST_URI} [L, R]
Sekarang setiap kali saya mengunjungi url https saya mendapatkan pesan ini:
Halaman web ini memiliki loop pengalihan
Halaman web di https://mywebsite.com/securepage/ telah mengakibatkan terlalu banyak pengalihan
Segera setelah saya menonaktifkan plugin https wordpress
( http://wordpress.org/extend/plugins/wordpress-https/ )
Halaman-halamannya berfungsi tetapi sekarang penuh dengan konten campuran. halaman yang seharusnya https tidak lagi https.
Segera setelah saya mengakses server secara langsung alih-alih melalui elb, ia berfungsi kembali.
Adakah ide tentang bagaimana saya bisa membuatnya bekerja dengan AWS ELB?
sumber
Jawaban:
Saya akan menebak tanpa Anda memposting konfigurasi ELB Anda bahwa ELB mengarahkan lalu lintas HTTPS (443 / tcp) ke instance EC2 pada HTTP (80 / tcp). Kemudian Anda
.htaccess
dan plugin mencoba mengalihkannya kembali ke HTTPS karena sedang dilihat melalui HTTP.Pergi melihat konsol EC2 Anda di bawah
Network & Security > Load Balancers
dan saya akan membayangkan Anda akan melihatPort Configuration
kata sesuatu di sepanjang baris443 forwarding to 80 (HTTPS, Certificate: blah)
sumber
Coba tambahkan ini ke Anda
httpd.conf
atau.htaccess
Saat menggunakan load balancer + HTTPS, server web Anda tidak menyadari bahwa HTTPS sedang digunakan di ujung depan, jadi teruslah mencoba mengarahkan ulang ke situs HTTPS, padahal sebenarnya, HTTPS sudah digunakan.
Di atas akan menerjemahkan header yang dikirim Load Balancer Amazon (
X-Forwarded-Proto: https
) ke variabel lingkungan yang dimengerti oleh Wordpress dan skrip PHP lainnya (HTTPS=1
)sumber
fastcgi_param HTTPS on;
Menurut Amazon di sini https://d0.awsstatic.com/whitepapers/deploying-wordpress-with-aws-elastic-beanstalk.pdf perbaikannya adalah:
Saya masih berakhir dengan loop tanpa akhir, jadi saya mengubah konfigurasi WordPress saya dari:
untuk:
Ini akan memaksa pengguna untuk https, bahkan jika mereka mengetikkan http, plus itu membuatnya mudah untuk mengembangkan situs offline karena Anda baru saja memperbarui WP_HOME ke host lokal dan https tidak lagi menjadi default
sumber
Mengutip diri saya dari pos bermanfaat lain https://serverfault.com/a/858308/450836 :
Untuk Pendengar ELB non-SSL, saya menggunakan konfigurasi terpisah untuk mengalihkan semua lalu lintas ke https sebagai pendengar default.
sumber
Seperti yang disarankan @Tim, ini
$_SERVER['HTTPS']='on';
di wp-config.php melakukan trik untuk saya.Saya juga menambahkan ini ke file .htaccess saya untuk memaksa HTTPS:
sumber
Perbaiki untuk terlalu banyak masalah pengalihan di aws ALB
Aktifkan modul tajuk kemudian tambahkan entri berikut di konfigurasi apache
SetEnvIf X-Forwarded-Proto "https" HTTPS = on RequestHeader atur HTTPS "on" env = HTTPS
sumber