RequestHeader พร้อมกับตัวแปรสภาพแวดล้อม Apache


13

ฉันตั้ง Apache ไว้เป็น load balancer ฉันต้องการให้ apache ตั้งค่าส่วนหัว X-Forwarded-Proto แต่วิธีนี้ไม่ทำงาน:

RequestHeader set X-Forwarded-Proto "%{SERVER_PROTOCOL}e"

ส่วนหัวได้รับการตั้งค่าเป็นโมฆะ มีความคิดอะไรบ้าง

คำตอบ:


15

ช้า แต่ก็ยังเพิ่งเจอกับปัญหาเดียวกันและมันก็ใช้ได้กับฉัน:

RequestHeader set X_FORWARDED_PROTO 'https' env=HTTPS

เอกสารพูดว่า:

เมื่อใช้คำสั่ง RequestHeader กับการเพิ่มผนวกหรือตั้งค่าอาร์กิวเมนต์อาจมีการใช้อาร์กิวเมนต์ที่สี่เพื่อระบุเงื่อนไขภายใต้การดำเนินการ หากตัวแปรสภาพแวดล้อมที่ระบุในอาร์กิวเมนต์ env = ... มีอยู่ (หรือหากตัวแปรสภาพแวดล้อมไม่มีอยู่และระบุ env =! ... ) การกระทำที่ระบุโดยคำสั่ง RequestHeader จะมีผล มิฉะนั้นคำสั่งจะไม่มีผลกับการร้องขอ

ในขณะที่ตัวแปรสภาพแวดล้อม HTTPS ถูกตั้งค่าเฉพาะเมื่อมีการร้องขอผ่าน SSL


3
ตามen.wikipedia.org/wiki/List_of_HTTP_header_fieldsส่วนหัวควรมียัติภังค์มากกว่าขีดล่าง: RequestHeader ตั้ง X-Forwarded-Proto 'https' env = HTTPS นี่เป็นส่วนหัวที่ ELB ของ Amazon ส่ง
loevborg

9

คุณไม่ต้องการที่; มันจะตั้งค่าส่วนหัวของคุณเป็น "HTTP / 1.1" (แม้ในคำขอ https) - อาจไม่เป็นประโยชน์อย่างมากกับสิ่งที่คุณส่งผ่าน

คุณมีบล็อก VirtualHost ที่แตกต่างกันสำหรับ http และ https; เพียง hardcode การRequestHeaderตั้งค่าในแต่ละ

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

<VirtualHost *:443>
    RequestHeader set X-Forwarded-Proto "https"
    ...
</VirtualHost>

1
สิ่งนี้ยังไม่ตอบคำถามว่าทำไมตัวแปรสภาพแวดล้อมจึงไม่ทำงาน ฉันยังต้องการรักษาพอร์ตและค่าอื่น ๆ บางอย่างซึ่งไม่สามารถเขียนโค้ดแบบนี้ได้ยาก
John Crenshaw

3

คุณสามารถแก้ไขได้โดยใช้earlyคำหลัก:

RequestHeader set X-Forwarded-Proto "https" early

มิฉะนั้นคุณสามารถทำสิ่งที่ John Crenshaw แนะนำซึ่งใช้RewriteRuleแทนProxyPassคำสั่ง


1
ฉันจะดีบักว่า apache ส่งส่วนหัวนี้ได้อย่างไร
codecowboy

2

พบสาเหตุ ปรากฎว่ามันเป็นคำสั่งของปัญหาการดำเนินงาน mod_rewrite มีหน้าที่จัดหาตัวแปรสภาพแวดล้อมเหล่านี้ แต่ Apache จะไม่ประมวลผลจนกว่าจะได้รับการร้องขอ ProxyPass จนกว่าจะถึงตอนนั้นก็จะตั้งค่าเป็นโมฆะ วิธีแก้ปัญหาเฉพาะดูเหมือนว่าจะทำพร็อกซี่ผ่าน mod_rewrite

ดูhttp://www.gossamer-threads.com/lists/apache/users/267160?do=post_view_threaded#267160

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.