RequestHeader dengan variabel lingkungan Apache

13

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?

John Crenshaw
sumber

Jawaban:

15

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.

iNecas
sumber
3
Menurut en.wikipedia.org/wiki/List_of_HTTP_header_fields header seharusnya memiliki tanda hubung daripada garis bawah: RequestHeader mengatur X-Forwarded-Proto 'https' env = HTTPS Ini juga header yang dikirim oleh ELB Amazon.
loevborg
9

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 RequestHeaderpengaturan di masing-masing.

<VirtualHost *:80>
    RequestHeader set X-Forwarded-Proto "http"
    ...
</VirtualHost>

<VirtualHost *:443>
    RequestHeader set X-Forwarded-Proto "https"
    ...
</VirtualHost>
Shane Madden
sumber
1
Ini masih belum menjawab pertanyaan mengapa variabel lingkungan tidak berfungsi. Saya juga ingin menjaga port dan beberapa nilai lainnya, beberapa di antaranya tidak dapat dikodekan seperti ini.
John Crenshaw
3

Anda dapat memperbaikinya dengan menggunakan earlykata kunci:

RequestHeader set X-Forwarded-Proto "https" early

Jika tidak, Anda dapat melakukan apa yang disarankan John Crenshaw, yang digunakan RewriteRulesebagai pengganti ProxyPassarahan.

docwhat
sumber
1
Bagaimana saya bisa men-debug apakah apache benar-benar mengirim tajuk ini?
codecowboy
2

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

John Crenshaw
sumber