nginx 反向代理服務(wù)器資源偶爾(大概20%)會出現(xiàn)404問題

nginx 反向代理服務(wù)器資源偶爾(大概20%)會出現(xiàn)404問題

  • 這個問題在不同的環(huán)境不容易復(fù)現(xiàn),只是在這個環(huán)境發(fā)現(xiàn)了這個問題。

通過不帶請求頭循環(huán)請求資源時發(fā)現(xiàn)不會出現(xiàn)這個問題;
通過帶原始請求頭信息循環(huán)請求資源時發(fā)現(xiàn)了這個問題出現(xiàn)的概率是20%;
通過改變請求頭原始信息發(fā)現(xiàn),一般信息不影響,當(dāng)添加Cookie后會出現(xiàn)這個問題;
通過修改Cookie內(nèi)容長短發(fā)現(xiàn),Cookie太長的時候100%會出現(xiàn)400錯誤,Cookie太短的時候不會出現(xiàn)問題,Cookie為原始信息時會出現(xiàn)這個問題,因此定位到問題是Cookie太長導(dǎo)致,減少不必要的Cookie傳遞后,現(xiàn)在Cookie里面?zhèn)?455個字符,這個問題明顯改善,出現(xiàn)404問題概率由20%降到了0.5%;
部分資源不需要Cookie,可以將Cookie置為空字符串,這些資源就會正常返回了;
部分資源需要Cookie,否則會導(dǎo)致頁面跳轉(zhuǎn)到登錄頁,這部分如果需要在進(jìn)一步優(yōu)化的話,需要將Cookie進(jìn)一步調(diào)小。

  • 涉及到的NGINX配置如下:
    nginx.conf
http {

client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
#client_body_buffer_size 1000M;
#client_max_body_size 1000M;
proxy_buffer_size 256k;
proxy_buffers 40 256k;
proxy_busy_buffers_size 256k;
proxy_connect_timeout 12000;
proxy_send_timeout 12000;
proxy_read_timeout 12000;


server {

# 日志前端資源
location /ywjk/powerlogweb/ {

  set $altered_cookie $http_cookie;

  set $token ""
  # 獲取cookie某個key的值
  set $sessionid $cookie_sessionid;
  set $csrftoken $cookie_csrftoken;

  # 獲取cookie某個key的值
  if ( $http_cookie ~* "Admin-Token=(.+?)(?=;|$)" ) {
  set $token $1;
  }
  set $altered_cookie "Admin-Token=$token; sessionid=$sessionid; csrftoken=$csrftoken; "

  # 更新 proxy_cookie_path
  proxy_cookie_path / /;
  # 更新 Cookie 只傳需要用到的 Cookie 多余的不傳 ,盡量減小 Cookie 大小,減小404出現(xiàn)的概率。
  proxy_hide_header Cookie;
  proxy_set_header Cookie $altered_cookie;

  # 添加 response header 進(jìn)行調(diào)試
  # add_header X-altered_cookie $altered_cookie;


  # 可以將下面的代碼塊復(fù)制稍微改一下 不需要 Cookie 的請求將 Cookie置為空,即可正常返回,不在出現(xiàn)404問題
  # eg: css 替換為 documents|lib|images|fonts
  location /ywjk/powerlogweb/resource/css/ {
    # 不需要 Cookie 的請求將 Cookie置為空,即可正常返回,不在出現(xiàn)404問題
    proxy_hide_header Cookie;
    proxy_set_header Cookie "";

    proxy_pass http://log-web/resource/css/;
    client_max_body_size 500M;
    client_body_buffer_size 500M;
  }


    proxy_pass http://log-web/;
    client_max_body_size 500M;
    client_body_buffer_size 500M;


}

}

}

測試出錯率腳本
testCurl.sh

Cookie="Admin-Token=JBY2NvdW50IjoiY"

echo $Cookie

for i in $(seq 1000) ; do
curl 'http://192.168.140.70/resource/css/base.css' \
  -H 'Accept: text/css,*/*;q=0.1' \
  -H 'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6' \
  -H 'Cache-Control: no-cache' \
  -H 'Connection: keep-alive' \
  -H "Cookie: $Cookie" \
  -H 'Host: 192.168.140.70' \
  -H 'Pragma: no-cache' \
  -H 'Referer: http://192.168.140.70/powerlog/inner/%2Fdesk%2Fevent' \
  -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0' \
  --compressed \
  -sL -w "code:%{http_code}" \
  -o ./dev/dev$i \
  --insecure
echo ''
done

參考:
Nginx獲取cookie值的兩種方法 https://www.edoou.com/articles/1651545531542634

NGINX 變量打?。ㄝ敵觯?通過 response headers 發(fā)送環(huán)境變量進(jìn)行調(diào)試http://www.itdecent.cn/p/183d4408c5d7

Nginx反向代理丟失cookie問題處理 https://www.cnblogs.com/tiancai/p/17261923.html

刪除 nginx 反向代理中的特定 cookie https://qa.1r1g.com/sf/ask/4728422051/

刪除nginx反向代理中的特定cookie https://www.saoniuhuo.com/question/detail-2802774.html
解決nginx報頭部或者cookie過大的400錯誤 https://jingyan.baidu.com/article/4f34706ed4f80fe387b56dca.html

Nginx報錯104:Connection reset by peer問題的解決及分析 https://pythonjishu.com/rsiaasuyrkvnyzw/

curl添加請求頭https://www.python100.com/html/91902.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容