nginx 反向代理 轉發請求時,有時好有時沒反應,產生原因及解決


遇到一個問題,nginx 完全做反向代理的時候,當有請求來的時候,后端服務器,有時可以很快返回結果,但有時根本沒有訪問到后端服務器

查了下發現nginx 這個需要手動進行配置,讓nginx 支持下划線

Syntax: underscores_in_headers on | off;
Default:
underscores_in_headers off;
Context: httpserver

原因就能看到了,默認配置是是不開啟的,當一個請求有帶有下划線的時候,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默認忽略掉下划線可能有些原因。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM