Saya telah mengatur Apache sebagai penyeimbang beban. Saya ingin membuat apache mengatur header X-Forwarded-Proto, tetapi ini tidak berhasil:
RequestHeader set X-Forwarded-Proto "%{SERVER_PROTOCOL}e"
Header diatur ke nol. Ada yang tahu kenapa?
Saya telah mengatur Apache sebagai penyeimbang beban. Saya ingin membuat apache mengatur header X-Forwarded-Proto, tetapi ini tidak berhasil:
RequestHeader set X-Forwarded-Proto "%{SERVER_PROTOCOL}e"
Header diatur ke nol. Ada yang tahu kenapa?
Jawaban:
Terlambat tapi tetap saja, saya baru saja menangani masalah yang sama, dan ini berhasil untuk saya:
RequestHeader set X_FORWARDED_PROTO 'https' env=HTTPS
The dokumentasi mengatakan:
Ketika arahan RequestHeader digunakan dengan argumen add, append, atau set, argumen keempat dapat digunakan untuk menentukan kondisi di mana tindakan akan diambil. Jika variabel lingkungan yang ditentukan dalam argumen env = ... ada (atau jika variabel lingkungan tidak ada dan env =! ... ditentukan) maka tindakan yang ditentukan oleh arahan RequestHeader akan berlaku. Jika tidak, arahan tidak akan berpengaruh pada permintaan.
Sementara variabel lingkungan HTTPS hanya diatur saat permintaan dilakukan melalui SSL.
Anda tidak menginginkan itu; itu akan mengatur header Anda ke "HTTP / 1.1" (bahkan pada permintaan https) - mungkin tidak terlalu berguna untuk apa pun yang Anda lewati.
Anda memiliki blok VirtualHost berbeda untuk http dan https; hanya hardcode RequestHeader
pengaturan di masing-masing.
<VirtualHost *:80>
RequestHeader set X-Forwarded-Proto "http"
...
</VirtualHost>
<VirtualHost *:443>
RequestHeader set X-Forwarded-Proto "https"
...
</VirtualHost>
Anda dapat memperbaikinya dengan menggunakan early
kata kunci:
RequestHeader set X-Forwarded-Proto "https" early
Jika tidak, Anda dapat melakukan apa yang disarankan John Crenshaw, yang digunakan RewriteRule
sebagai pengganti ProxyPass
arahan.
Menemukan penyebabnya. Ternyata itu adalah urutan masalah operasi. mod_rewrite bertanggung jawab untuk menyediakan variabel lingkungan ini, tetapi Apache tidak memprosesnya sampai SETELAH menangani permintaan ProxyPass. Sampai saat itu, itu hanya akan menetapkan nol. Satu-satunya solusi tampaknya adalah melakukan proxy melalui mod_rewrite.
Lihat http://www.gossamer-threads.com/lists/apache/users/267160?do=post_view_threaded#267160