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?

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.


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>

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.


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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.