ส่งต่อส่วนหัวที่กำหนดเองจาก Nginx Reverse Proxy


25

ฉันมีเว็บเซิร์ฟเวอร์ nginx ซึ่งทำหน้าที่เป็นพร็อกซีย้อนกลับเพื่อส่งต่อคำขอไปยัง Apache สำหรับการจัดการเพิ่มเติม (ฉันขอให้คุณอย่าถามว่าทำไม) ฉันมีคำขอที่ฉันพยายามแนบส่วนหัวที่กำหนดเองและฉันต้องการให้ nginx ส่งต่อส่วนหัวที่กำหนดเองนั้นไปยัง Apache เพื่อให้ฉันสามารถทำอะไรกับมันได้ในแอป

ฉันแหย่ผ่านHttpProxyModuleเอกสาร แต่พวกเขาไม่ได้อธิบายมากถึงแม้ว่าฉันจะอยู่ในสถานที่ที่เหมาะสม (มันอาจเป็นไปได้ว่าฉันไม่ได้)

ฉันจะรับ nginx เพื่อส่งต่อX-CUSTOM-REFERRERส่วนหัวได้อย่างไร ยิ่งไปกว่านั้นถ้าเป็นไปได้ฉันต้องการให้ส่งต่อไปตามส่วนหัวที่กำหนดเองใด ๆที่เข้ามาหากว่าหลังถามคำถามมากเกินไปอดีตคนก่อนก็พอเพียงสำหรับความต้องการในปัจจุบันของฉัน

อย่างที่คุณเห็นฉันยังใหม่กับ nginx ดังนั้นเวอร์ชันการแก้ไขจะมีประโยชน์

ขอบคุณ

UPDATE

ตัวอย่างที่เกี่ยวข้องจากการกำหนดค่าปัจจุบันของฉัน:

location / {
    proxy_pass                  http://preview;
    proxy_redirect              off;
    proxy_set_header            Host $host;
    proxy_set_header            X-Real-IP $remote_addr;
    proxy_set_header            X-Forwarded-For $proxy_add_x_forwarded_for;
    # proxy_set_header            X-Custom-Referrer $x_custom_referrer;
}

คำตอบ:


20

proxy_set_headerสั่งจากHttpProxyModuleช่วยให้คุณสามารถทำเช่นนี้ ตัวอย่างเช่น:

proxy_pass http://apachehost;
proxy_set_header X-Custom-Referrer $proxy_add_<header_field_name_from_last_request>;

1
ขอบคุณ @gorgor แม้ว่าค่าที่เข้ามาคือตัวแปร ฉันสามารถอ่านค่าจากX-Custom-Referrerส่วนหัวที่เข้ามาและส่งต่อได้หรือไม่ proxy_set_header X-Custom-Referrer $x_custom_referrerหรือบางสิ่งที่มีผลกระทบนั้น
Rob Wilkerson

1
$http_x_custom_referrerใช่คุณสามารถใช้ อย่างไรก็ตามส่วนหัวทั้งหมดที่ส่งโดยลูกค้าควรจะถูกส่งต่อไปยังส่วนหลังโดยอัตโนมัติ คุณตั้งproxy_pass_request_headers offอยู่ที่ไหนสักแห่ง?
mgorven

ไม่ใช่ว่าฉันเห็น ฉันได้อัปเดตคำถามของฉันด้วยข้อมูลโค้ดจากไฟล์ปรับแต่งของฉัน แม้ว่าส่วนหัวนั้นจะไม่ทำให้แอพนั้นแน่นอน ที่กล่าวว่าฉันถือว่าสมมติว่าแอปต้นทางกำลังส่งมันดังนั้นฉันจะตรวจสอบสถานะของฉันและตรวจสอบให้แน่ใจว่าควรเป็นพฤติกรรมเริ่มต้นหรือไม่
Rob Wilkerson

@RobWilkerson ในตัวอย่างของคุณที่เกี่ยวข้องproxy_set_headerถูกใส่ความคิดเห็น; นอกจากนี้ยังมีคุณกำลังใช้$x_custom_referrerแทน$http_x_custom_referrer...
SEVERIN

ฉันคิดว่าคำตอบของ @ mgorven ควรได้รับการอัปเดต$http_<custom_header_field>แทนที่จะเป็น$proxy_add_<custom_header_field>
Tri Nguyen

2

โมดูลngx_headers_moreช่วยให้คุณสามารถเปลี่ยนและเพิ่มส่วนหัว http


โมดูลนี้เพิ่มส่วนหัวในการตอบสนอง นั่นไม่ใช่สิ่งที่ OP ขอมา proxy_passพวกเขาจำเป็นต้องส่งส่วนหัวเพิ่มเติมเพื่อต้นน้ำใน
Victor Schröder

1

คุณสามารถใช้ส่วนหัวอัปสตรีม (ชื่อเริ่มต้นด้วย $ http_) และส่วนหัวที่กำหนดเองเพิ่มเติม ตัวอย่างเช่น:

add_header X-Upstream-01 $http_x_upstream_01;
add_header X-Hdr-01  txt01;

จากนั้นไปที่คอนโซลและขอด้วยส่วนหัวของผู้ใช้:

curl -H "X-Upstream-01: HEADER1" -I http://localhost:11443/

การตอบสนองประกอบด้วย X-Hdr-01, กำหนดโดยเซิร์ฟเวอร์และ X-Upstream-01, กำหนดโดยลูกค้า:

HTTP/1.1 200 OK
Server: nginx/1.8.0
Date: Mon, 30 Nov 2015 23:54:30 GMT
Content-Type: text/html;charset=UTF-8
Connection: keep-alive
X-Hdr-01: txt01
X-Upstream-01: HEADER1

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