nginx meneruskan custom header

13

Saya punya contoh berikut

           location / {
                    proxy_read_timeout 2000;
                    proxy_next_upstream error;
                    proxy_set_header X-Real-IP $remote_addr;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                    proxy_set_header Host $http_host;
                    proxy_pass_header X_CUSTOM_HEADER;
                    proxy_redirect off;
                    proxy_max_temp_file_size 0;
                    proxy_pass https://prod;
                    break;
            }

Sekarang ketika saya menggunakan garis ikal berikut

curl --head -H "X_CUSTOM_HEADER: foo" http://domain.com/api/test

Sekarang tidak berfungsi .. apache / php di backend tidak melihat header. Jika saya memotong nginx itu berfungsi

curl --head -H "X_CUSTOM_HEADER: foo" http://web1.domain.com/api/test
Mike
sumber

Jawaban:

15

Anda harus menggunakan underscores_in_headers onarahan yang tidak aktif secara default.

AlexD
sumber
Info ini menghemat waktu saya.
Morgan Cheng
Saya dengan senang hati akan membelikan Anda minuman yang menyegarkan.
ballmw
Anda Tuan, adalah seorang sarjana dan pria terhormat.
Eve Freeman
2

Anda harus menggunakan proxy_set_headeruntuk semua header yang ingin Anda teruskan ke server backend. Jadi, bukannya proxy_pass_header ...baris:

proxy_set_header X_CUSTOM_HEADER $http_x_custom_header;
Mikko
sumber
Saya telah mencobanya dan tidak mengatur tajuk dengan benar, Jika saya mengganti $ http_x_custom_header dengan "foo" berfungsi
Mike
Saya tidak yakin mengapa itu tidak berhasil untuk @ Mike tetapi itu berhasil untuk saya. Saya menggunakan X-Forwarded-Proto dengan $ http_x_forwarded_proto.
Tyler Collier
2

Di atas tidak bekerja untuk saya juga jadi saya gunakan proxy_pass_header. Lihat Nginx Wiki tentang proxy_pass_header di sini .

Jika tajuk khusus Anda device_idditambahkan proxy_pass_header device_id;ke blok Proxy Anda.

Jika Anda menggunakan customheaders dengan garis bawah di dalamnya (seperti saya), pastikan untuk memastikan Anda memiliki underscores_in_headers ondi Nginx Config Anda.

pengguna2700022
sumber
Terima kasih banyak ! Saya mencabut rambut saya .... Pos Anda melegakan saya ....
Fahad Ahammed
1

Secara default nginx meneruskan semua ( proxy_pass_request_headers on; ) header ke server backend. Tetapi jika tajuk permintaan Anda (mungkin tajuk khusus) menyertakan garis bawah (_) dalam nama tajuk lalu nginx memblokir tajuk tersebut.

Ex: authenticate_type, cdn_enable.

Untuk mengaktifkan Nginx untuk melewatkan semua atau tajuk yang diminta khusus ke belokan backend pada opsi garis bawah aktif.

underscores_in_headers on;
GangaRam Dewasi
sumber