Nginx'in arkasındaki sunucudan alınan yanıt için özel bir başlık eklemek istiyorum.
İken add_header
zaman nginx işlenmiş yanıtlar için işler, hiçbir şey yapmaz proxy_pass
kullanılır.
Nginx'in arkasındaki sunucudan alınan yanıt için özel bir başlık eklemek istiyorum.
İken add_header
zaman nginx işlenmiş yanıtlar için işler, hiçbir şey yapmaz proxy_pass
kullanılır.
Yanıtlar:
Başlıklar üzerinde size daha fazla kontrol sağlayan HttpHeadersMoreModule adında bir modül vardır . Nginx ile gelmez ve ek kurulum gerektirir. Bununla bunun gibi bir şey yapabilirsiniz:
location ... {
more_set_headers "Server: my_server";
}
Bu, "Sunucu çıkış başlığını herhangi bir durum kodu ve herhangi bir içerik türü için özel değere ayarlayacaktır". Önceden ayarlanmış başlıkların yerini alacak veya ayarlanmamışsa ekleyecektir.
Secure
ve HttpOnly
işaretlemek mümkün müdür ? Hedef yanıt tanımlama bilgisi yalnızca tanımlama bilgisine ve özniteliklere sahiptir. name
expire
add_header
Olmadığı kadar iyi çalışır proxy_pass
. Bugün tam olarak bu yönergeyi kullandığım bir yapılandırma kurdum. Yine de, sebebini tam olarak hatırlamadan bunu kurmakla da mücadele ettiğimi itiraf etmeliyim.
Şu anda çalışan bir yapılandırmam var ve aşağıdakileri içeriyor (diğerleri arasında):
server {
server_name .myserver.com
location / {
proxy_pass http://mybackend;
add_header X-Upstream $upstream_addr;
}
}
1.7.5
Nginx'ten önce add_header , Sebastian Goodman'ın yanıtında bahsettiği HttpHeadersMoreModule'ün aksine yalnızca başarılı yanıtlar üzerinde çalışıyordu .
Nginx'ten bu yana , hata yanıtlarında bile özel başlıklar eklemek 1.7.5
için anahtar kelimeyi kullanabilirsiniz always
. Örneğin:
add_header X-Upstream $upstream_addr always;
Sınırlama:server
kullanarak başlık değerini geçersiz kılamazsınız add_header
.
add_header X-Upstream $upstream_addr always;
X-Upstream: 10.10.10.10
vs X-Upstream: 53c2d28edefdf501ab7c92e02a0c1687
(md5 muhtemelen altyapıyı maskelemede yardımcı olmaz, ancak fikri iletir).
add_header
yönergeyi kullanmaya yalnızca bir örnektir . Hiç göndermenize gerek yok .
Oliver'ın yazdığı gibi:
add_header
Olmadığı kadar iyi çalışırproxy_pass
.
Bununla birlikte, Shane'in yazdığı gibi, Nginx 1.7.5'ten itibaren, hata yanıtlarında çalışmaya always
başlamak için add_header
aşağıdaki gibi geçmeniz gerekir :
add_header X-Upstream $upstream_addr always;
İle bir başlık eklemek add_header
Proxy iyi çalışır, ancak yanıtta mevcut bir başlık değeri varsa, değerleri yığınlayacaktır.
Bir başlık değerini ayarlamak veya değiştirmek istiyorsanız (örneğin, Access-Control-Allow-Origin
çapraz kaynak kaynak paylaşımına izin vermek için istemcinizle eşleşecek şekilde başlığı değiştirin ), aşağıdakileri yapabilirsiniz:
# 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 *;
Yani proxy_hide_header
birleştiğinde add_header
size yanıt başlığı değerlerini ayarlama / değiştirme gücü verir.
Benzer cevap bulunabilir burada ServerFault'ta bulunabilir
Not: proxy_set_header
İstek daha fazla gönderilmeden önce istek başlıklarını ayarlamak içindir, yanıt başlıklarını ayarlamak için değildir (başlıklar için bu yapılandırma özellikleri biraz kafa karıştırıcı olabilir).
Bu çözümü deneyebilirsiniz:
Bloğunuzda böyle bir şey location
yaptığınızda proxy_pass
:
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
}
Tam olarak ihtiyacınız olan şeyin bu olduğundan emin değilim, ancak bu yöntemin bazı manipülasyonlarını deneyin ve belki sonuç sorununuza uyacaktır.
Ayrıca bu kombinasyonu kullanabilirsiniz:
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"; } }