คำสั่ง add_header ในการแทนที่ตำแหน่งคำสั่ง add_header ในเซิร์ฟเวอร์


11

ใช้nginx 1.2.1ฉันสามารถเพิ่มหลายส่วนหัวโดยใช้add_headerดังนี้:

server {
    listen       80;
    server_name  localhost;
    root /var/www;
    add_header Name1 Value1;      <=== HERE
    add_header Name2 Value2;      <=== HERE

    location / {
        echo "Nginx localhost site";
    }
}

ผลลัพธ์

GET /
HTTP/1.1 200 OK
Name1: Value1
Name2: Value2

อย่างไรก็ตามฉันทันทีที่ฉันใช้add_headerคำสั่งภายในคำสั่งlocationอื่นadd_headerภายใต้serverจะถูกละเว้น

server {
    listen       80;
    server_name  localhost;
    root /var/www;
    add_header Name1 Value1;      <=== HERE
    add_header Name2 Value2;      <=== HERE

    location / {
        add_header Name3 Value3;  <=== HERE
        add_header Name4 Value4;  <=== HERE
        echo "Nginx localhost site";
    }
}

ผลลัพธ์

GET /
HTTP/1.1 200 OK
Name3: Value3
Name4: Value4

เอกสารบอกว่าทั้งสองserverและlocationมีความถูกต้องcontextและไม่ได้ของรัฐที่ใช้add_headerในการป้องกันการใช้มันในอื่น ๆ

คำถามที่ 1: คุณรู้หรือไม่ว่านี่เป็นข้อผิดพลาดหรือพฤติกรรมที่ต้องการและทำไม

Q2: คุณเห็นตัวเลือกอื่น ๆ เพื่อรับการแก้ไขนี้กว่าใช้HttpHeadersMoreModuleโมดูลหรือไม่?

คำตอบ:


18

นี่เป็นพฤติกรรมที่คาดหวัง add_headerสั่งเหมือนทุกคำสั่งอาร์เรย์ชนิดอื่น ๆ ใน Nginx, ได้รับมาจากระดับก่อนหน้าถ้าหากไม่มีadd_headerคำสั่งที่กำหนดไว้ในระดับปัจจุบัน

หากคุณต้องการ Nginx เพื่อเพิ่มส่วนหัวทั้งหมดในlocation /คุณต้องรายการพวกเขาในทุกlocation /คือ

location / {
    add_header Name1 Value1;
    add_header Name2 Value2;
    add_header Name3 Value3;
    add_header Name4 Value4;
    return 200 "";
}

หากคุณต้องการวิธีแสดงรายการชุดย่อยขนาดใหญ่ในที่เดียวคุณสามารถใช้includeคำสั่งนี้ ดูเอกสารที่นี่


ฉันมีเฉพาะadd_headerในlocationคำสั่ง แต่ฉันยังไม่เห็นส่วนหัวนี้เพิ่ม - ความคิดใด ๆ
Aditya MP

@adityamenon คุณมีเพียงอันเดียวadd_headerหรือเปล่า? ถ้าใช่แล้วให้แน่ใจว่ารหัสการตอบสนองเป็นหนึ่งจากเอกสารดูnginx.org/r/add_header
Maxim Dounin

สวัสดี Maxim ฉันมีปัญหาที่แตกต่างกันสองสามฉันสุดท้ายมีการกำหนดค่าที่ใช้งานได้: stackoverflow.com/a/19135714/443219
Aditya MP

ลิงก์ไปยังเอกสาร nginx ที่อธิบายสิ่งนี้: nginx.org/en/docs/http/ngx_http_headers_module.html#add_header
siliconrockstar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.