chỉ thị add_header trong ghi đè chỉ thị add_header trong máy chủ


11

Sử dụng nginx 1.2.1 Tôi có thể thêm nhiều tiêu đề bằng cách sử dụng add_headernhư sau:

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

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

Kết quả

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

Tuy nhiên, ngay sau khi tôi sử dụng add_headerchỉ thị bên trong location, các add_headerchỉ thị khác serverđược bỏ qua

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";
    }
}

Kết quả

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

Các tài liệu nói rằng cả hai serverlocationcó giá trị contextvà không nhà nước rằng việc sử dụng add_headertrong một ngăn chặn sử dụng nó trong khác.

Q1: Bạn có biết nếu đây là một lỗi hoặc hành vi dự định và tại sao?

Câu 2: Bạn có thấy các tùy chọn khác để sửa lỗi này hơn là sử dụng HttpHeadersMoreModulemô-đun không?

Câu trả lời:


18

Đây là hành vi dự kiến. Các add_headerchỉ thị, giống như tất cả các chỉ thị kiểu mảng khác trong nginx, được kế thừa từ cấp trước nếu và chỉ khi không có add_headerchỉ thị nào được xác định ở cấp hiện tại.

Nếu bạn muốn nginx thêm tất cả các tiêu đề vào location /, bạn phải liệt kê tất cả chúng trong location /, tức là

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

Nếu bạn cần một cách để liệt kê tập hợp lớn các tiêu đề ở một nơi duy nhất, bạn có thể sử dụng includechỉ thị cho việc này. Xem tài liệu ở đây .


Tôi chỉ có add_headertrong locationchỉ thị, nhưng tôi vẫn không thấy tiêu đề này được thêm vào - có ý tưởng nào không?
Aditya MP

@adityamenon Bạn chỉ có một add_header? Nếu có, thì hãy đảm bảo mã phản hồi là một từ tài liệu, xem nginx.org/r/add_header .
Maxim Dounin

Xin chào Maxim, tôi đã có một vài vấn đề khác nhau, cuối cùng tôi cũng có một cấu hình hoạt động: stackoverflow.com/a/19135714/443219
Aditya MP

Liên kết đến tài liệu nginx giải thích điều này: nginx.org/en/docs/http/ngx_http_headftimemodule.html#add_header
siliconrockstar
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.