arahan add_header di lokasi menimpa arahan add_header di server

11

Menggunakan nginx 1.2.1 saya dapat menambahkan beberapa header menggunakan add_headersebagai berikut:

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

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

Hasil

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

Namun saya segera setelah saya menggunakan add_headerarahan di dalam location, add_headerarahan lain di bawah serverdiabaikan

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

Hasil

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

The dokumentasi mengatakan bahwa kedua serverdan locationberlaku contextdan tidak menyatakan bahwa menggunakan add_headerdalam satu mencegah menggunakannya di lain.

T1: Apakah Anda tahu apakah ini bug atau perilaku yang dimaksud dan mengapa?

T2: Apakah Anda melihat opsi lain untuk memperbaikinya daripada menggunakan HttpHeadersMoreModulemodul?

Maks
sumber

Jawaban:

18

Ini adalah perilaku yang diharapkan. The add_headerarahan, seperti semua array jenis arahan lainnya di nginx, diwarisi dari tingkat sebelumnya jika dan hanya jika tidak ada add_headerarahan didefinisikan pada tingkat saat ini.

Jika Anda ingin nginx menambahkan semua header di location /, Anda harus mendaftar semuanya location /, yaitu

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

Jika Anda membutuhkan cara untuk mendaftar subset besar header di satu tempat, Anda dapat menggunakan includearahan untuk ini. Lihat dokumen di sini .

Maxim Dounin
sumber
Saya hanya memiliki add_headerdi dalam locationarahan, tetapi saya masih tidak melihat header ini ditambahkan - ada ide?
Aditya MP
@adityamenon Apakah Anda hanya punya satu add_header? Jika ya, maka pastikan kode responsnya dari docs, lihat nginx.org/r/add_header .
Maxim Dounin
Hai Maxim, saya punya beberapa masalah yang berbeda, saya akhirnya memiliki konfigurasi yang berfungsi: stackoverflow.com/a/19135714/443219
Aditya MP
Tautan ke nginx docs yang menjelaskan hal ini: nginx.org/en/docs/http/ngx_http_headers_module.html#add_header
siliconrockstar