Teruskan Header Kustom dari Nginx Reverse Proxy


25

Saya memiliki server web nginx yang bertindak sebagai proxy terbalik untuk meneruskan permintaan ke Apache untuk penanganan tambahan (Saya mohon Anda tidak bertanya mengapa). Saya memiliki permintaan yang saya coba lampirkan tajuk khusus dan saya ingin agar nginx meneruskan tajuk khusus itu ke Apache sehingga saya dapat melakukan sesuatu dengan itu di suatu aplikasi.

Saya telah melihat-lihat HttpProxyModuledokumen, tetapi mereka tidak terlalu deskriptif bahkan jika saya berada di tempat yang tepat (bisa jadi itu bukan saya).

Bagaimana saya bisa mendapatkan nginx untuk meneruskan X-CUSTOM-REFERRERheader? Selain itu, jika memungkinkan, saya ingin meneruskan sepanjang header kustom apa pun yang masuk. Jika yang terakhir terlalu banyak untuk ditanyakan, yang pertama akan cukup untuk kebutuhan saya saat ini.

Seperti yang Anda lihat, saya sangat baru di nginx, jadi versi perbaikannya akan sangat membantu.

Terima kasih.

MEMPERBARUI

Cuplikan yang relevan dari konfigurasi saya yang ada:

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

Jawaban:


20

The proxy_set_headerdirektif dari HttpProxyModule memungkinkan Anda untuk melakukan hal ini. Sebagai contoh:

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

1
Terima kasih, @mgorven. Nilai yang masuk adalah variabel. Bisakah saya membaca nilai dari X-Custom-Referrerheader yang masuk dan meneruskannya? proxy_set_header X-Custom-Referrer $x_custom_referreratau sesuatu untuk efek itu?
Rob Wilkerson

1
Ya, Anda bisa menggunakannya $http_x_custom_referrer. Namun, semua header yang dikirim oleh klien harus diteruskan ke backend secara otomatis. Sudahkah Anda mengatur proxy_pass_request_headers offsuatu tempat?
Mgorven

Bukannya aku bisa melihat. Saya telah memperbarui pertanyaan saya dengan cuplikan dari file konfigurasi saya. Header itu jelas tidak berhasil masuk ke aplikasi. Yang mengatakan, saya agak berasumsi bahwa aplikasi sumber mengirimkannya, jadi saya akan melakukan uji tuntas saya dan memastikan apakah itu harus menjadi perilaku default.
Rob Wilkerson

@RobWilkerson di cuplikan Anda yang relevan proxy_set_headerdikomentari; Anda juga menggunakan $x_custom_referrerbukannya $http_x_custom_referrer...
severin

Saya pikir jawaban @ mgorven harus diperbarui menjadi $http_<custom_header_field>bukan$proxy_add_<custom_header_field>
Tri Nguyen

2

Modul ngx_headers_more memungkinkan Anda untuk mengubah dan menambahkan header http.


Modul ini menambahkan header ke respons. Bukan itu yang diminta OP. Mereka perlu mengirim tajuk tambahan ke hulu, dalam a proxy_pass.
Victor Schröder

1

Anda dapat menggunakan tajuk hulu (bernama dimulai dengan $ http_) dan tajuk khusus tambahan. Sebagai contoh:

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

selanjutnya, buka konsol dan buat permintaan dengan tajuk pengguna:

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

responsnya berisi X-Hdr-01, yang ditetapkan oleh server dan X-Hulu-01, yang ditetapkan oleh klien:

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
Ini mengatur tajuk pada respons. OP ingin mengatur header untuk dikirim ke hulu dari proxy_passarahan.
Victor Schröder
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.