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;
}
Rob Wilkerson
sumber

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>;
Mgorven
sumber
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.

Yohann
sumber
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
shcherbak
sumber
1
Ini mengatur tajuk pada respons. OP ingin mengatur header untuk dikirim ke hulu dari proxy_passarahan.
Victor Schröder