遇到一個問題,nginx 完全做反向代理的時候,當有請求來的時候,后端服務器,有時可以很快返回結果,但有時根本沒有訪問到后端服務器
查了下發現nginx 這個需要手動進行配置,讓nginx 支持下划線
| Syntax: | underscores_in_headers |
|---|---|
| Default: | underscores_in_headers off; |
| Context: | http, server |
原因就能看到了,默認配置是是不開啟的,當一個請求有帶有下划線的時候,nginx會直接過濾掉這樣的請求
但是開發那邊不會考慮這樣的問題,所以在http配置區域里,把這個功能開啟,讓nginx支http header有下划線的請求
源碼如下:
rc = ngx_http_parse_header_line(r, r->header_in, cscf->underscores_in_headers);
if (r->invalid_header && cscf->ignore_invalid_headers)
在ngx_http_parse_header_line() 函數中
if (ch == ‘_’) {
if (allow_underscores) {
hash = ngx_hash(hash, ch);
r->lowcase_header[i++] = ch;
i &= (NGX_HTTP_LC_HEADER_LEN – 1);
} else {
r->invalid_header = 1;
}
紅色部門就是問題所在
原來是對header name的字符做了限制,默認 underscores_in_headers 為off,表示如果header name中包含下划線,則忽略掉
處理辦法:
1:配置中http部分 增加underscores_in_headers on; 配置
2:用減號-替代下划線符號_,避免這種變態問題。nginx默認忽略掉下划線可能有些原因。
