通過Nginx的proxy_set_header設(shè)置請(qǐng)求頭無效的解決
背景
在基于nacos做服務(wù)發(fā)現(xiàn)時(shí),需要做流量染色,主要是在流量的頭部加上一些標(biāo)記,以便識(shí)別。
這里就利用到了Nginx的proxy_set_header來設(shè)置頭部。
問題
很多場(chǎng)景下,我們需要通過nginx設(shè)置請(qǐng)求頭,設(shè)置了一些自定義字段
如果帶下劃線,比如user_name這種
后端在進(jìn)去獲取頭部信息時(shí),發(fā)現(xiàn)取不到對(duì)應(yīng)的值
原因&解決辦法
nginx源碼:
ngx_http_parse_header_line(ngx_http_request_t *r, ngx_buf_t *b,ngx_uint_t allow_underscores)
if (ch == '_') {
if (allow_underscores) {
hash = ngx_hash(0, ch);
r->lowcase_header[0] = ch;
i = 1;
} else {
r->invalid_header = 1;
}
break;
}
關(guān)鍵變量:
allow_underscores,是否允許下劃線。
原來nginx對(duì)header name的字符做了限制,默認(rèn) underscores_in_headers 為off,表示如果header name中包含下劃線,則忽略掉。
解決辦法:
方法一:header中自定義變量名時(shí)不要用下劃線。
方法二:修改nginx.conf配置文件,加上underscores_in_headers on的配置,參考如下:
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
underscores_in_headers on;
keepalive_timeout 65;
}總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
通過Nginx代理轉(zhuǎn)發(fā)配置實(shí)現(xiàn)跨域的方法(API代理轉(zhuǎn)發(fā))
這篇文章主要給大家介紹了關(guān)于如何通過Nginx代理轉(zhuǎn)發(fā)配置實(shí)現(xiàn)跨域(API代理轉(zhuǎn)發(fā))的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Nginx具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
Nginx動(dòng)態(tài)配置upstream的使用小結(jié)
本文深入探討了Nginx動(dòng)態(tài)配置upstream的多種方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-12-12
生產(chǎn)環(huán)境之Nginx高可用方案實(shí)現(xiàn)過程解析
這篇文章主要介紹了生產(chǎn)環(huán)境之Nginx高可用方案實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08
Nginx配置實(shí)現(xiàn)高效精準(zhǔn)的流量限制策略詳解
限流(Rate?Limitting)是服務(wù)降級(jí)的一種方式,通過限制系統(tǒng)的輸入和輸出流量以達(dá)到保護(hù)系統(tǒng)的目的,下面我們就來看看如何通過配置Nginx實(shí)現(xiàn)高效精準(zhǔn)的流量限制策略吧2024-02-02

