Saya ingin menambahkan tajuk khusus untuk tanggapan yang diterima dari server di belakang nginx.
Meskipun add_header
berfungsi untuk respons yang diproses nginx, ia tidak melakukan apa pun saat proxy_pass
digunakan.
Saya ingin menambahkan tajuk khusus untuk tanggapan yang diterima dari server di belakang nginx.
Meskipun add_header
berfungsi untuk respons yang diproses nginx, ia tidak melakukan apa pun saat proxy_pass
digunakan.
Jawaban:
Ada modul bernama HttpHeadersMoreModule yang memberi Anda kontrol lebih besar atas header. Itu tidak datang dengan Nginx dan membutuhkan instalasi tambahan. Dengan itu, Anda dapat melakukan sesuatu seperti ini:
location ... {
more_set_headers "Server: my_server";
}
Itu akan "menyetel header output Server ke nilai kustom untuk kode status dan jenis konten apa pun". Ini akan mengganti header yang sudah disetel atau menambahkannya jika tidak disetel.
Secure
dan HttpOnly
menandai pada cookie tanggapan ? Cookie respons target hanya memiliki cookie name
dan expire
atribut.
add_header
bekerja sebaik proxy_pass
tanpa. Saya baru saja menyiapkan konfigurasi di mana saya telah menggunakan petunjuk itu. Saya harus mengakui bahwa saya juga berjuang untuk mengatur ini tanpa benar-benar mengingat alasannya.
Saat ini saya memiliki konfigurasi yang berfungsi dan berisi yang berikut (antara lain):
server {
server_name .myserver.com
location / {
proxy_pass http://mybackend;
add_header X-Upstream $upstream_addr;
}
}
Sebelumnya nginx 1.7.5
add_header hanya berfungsi pada respons yang berhasil, berbeda dengan HttpHeadersMoreModule yang disebutkan oleh Sebastian Goodman dalam jawabannya .
Sejak nginx 1.7.5
Anda dapat menggunakan kata kunci always
untuk menyertakan header khusus bahkan dalam respons kesalahan. Sebagai contoh:
add_header X-Upstream $upstream_addr always;
Batasan: Anda tidak dapat mengganti nilai server
header menggunakan add_header
.
add_header X-Upstream $upstream_addr always;
X-Upstream: 10.10.10.10
vs X-Upstream: 53c2d28edefdf501ab7c92e02a0c1687
(md5 mungkin tidak membantu dalam menutupi infrastruktur, tetapi menyampaikan gagasan).
add_header
direktif. Anda tidak perlu mengirimnya sama sekali.
Seperti yang ditulis oliver:
add_header
bekerja sebaikproxy_pass
tanpa.
Namun, seperti yang ditulis Shane, pada Nginx 1.7.5, Anda harus meneruskan always
agar add_header
dapat bekerja untuk respons kesalahan, seperti:
add_header X-Upstream $upstream_addr always;
Menambahkan header dengan add_header
berfungsi baik dengan proxy pass, tetapi jika ada nilai header yang ada dalam respons itu akan menumpuk nilainya.
Jika Anda ingin menyetel atau mengganti nilai header (misalnya, mengganti Access-Control-Allow-Origin
header agar sesuai dengan klien Anda untuk mengizinkan berbagi sumber daya lintas sumber), Anda dapat melakukan hal berikut:
# 1. hide the Access-Control-Allow-Origin from the server response
proxy_hide_header Access-Control-Allow-Origin;
# 2. add a new custom header that allows all * origins instead
add_header Access-Control-Allow-Origin *;
Jadi proxy_hide_header
dikombinasikan dengan add_header
memberi Anda kekuatan untuk mengatur / mengganti nilai header respons.
Jawaban serupa dapat ditemukan di sini di ServerFault
Catatan: proxy_set_header
adalah untuk menyetel header permintaan sebelum permintaan dikirim lebih lanjut, bukan untuk menyetel header respons (atribut konfigurasi untuk header ini bisa sedikit membingungkan).
Anda dapat mencoba solusi ini:
Di location
blok Anda saat Anda menggunakan proxy_pass
lakukan sesuatu seperti ini:
location ... {
add_header yourHeaderName yourValue;
proxy_pass xxxx://xxx_my_proxy_addr_xxx;
# Now use this solution:
proxy_ignore_headers yourHeaderName // but set by proxy
# Or if above didn't work maybe this:
proxy_hide_header yourHeaderName // but set by proxy
}
Saya tidak yakin apakah itu persis yang Anda butuhkan tetapi coba beberapa manipulasi metode ini dan mungkin hasilnya sesuai dengan masalah Anda.
Anda juga dapat menggunakan kombinasi ini:
proxy_hide_header headerSetByProxy;
set $sent_http_header_set_by_proxy yourValue;
location / { proxy_pass http://127.0.0.1:8080/; proxy_hide_header "Access-Control-Allow-Origin"; if ($http_origin ~* "^https://(example.com|www.example.com)$") { add_header Access-Control-Allow-Origin "$http_origin"; } }