一次Nginx 502問題解決

問題背景

線上某個web應(yīng)用頁面,偶發(fā)性的報502 Bad Gateway異常。線上環(huán)境是Nginx反向代理和SpringBoot的后端服務(wù)組合症见。針對這個問題,記錄一下解決過程狰晚。

環(huán)境準備

如果環(huán)境是Mac并且已經(jīng)安裝了Homebrew的話筒饰,安裝Nginx還是非常方便的。

brew install nginx

Mac Homebrew安裝指導(dǎo)http://www.reibang.com/p/ebd854196c4c

如果已經(jīng)安裝過了Docker環(huán)境壁晒,則更為便利瓷们,直接運行一個Nginx鏡像即可。

Homebrew安裝完后秒咐,可以通過以下命令操作Nginx谬晕。

#啟動
brew services start nginx

# 停止
brew services stop nginx

# 重啟
brew services restart nginx

安裝后nginx的日志路徑為

/usr/local/var/log/nginx

Nginx配置文件路徑為

/usr/local/etc/nginx
問題定位和解決

我們到線上撈取了對應(yīng)異常時間點的Nginx日志,在其中發(fā)現(xiàn)了這樣的異常信息携取。

 61112#0: *1 upstream sent too big header while reading response header from upstream

這個異常是由于響應(yīng)中Header信息過大導(dǎo)致的攒钳。為此我們需要寫一個簡單的服務(wù)端代碼驗證一下。


@RestController
public class HomeController {
  @RequestMapping(value = "/home")
  public String home(HttpServletRequest request, HttpServletResponse response) {
    String headCount = request.getParameter("headCount");
    if (!StringUtils.hasText(headCount)) {
      headCount = "300";
    }
    for (int i = 0; i < Integer.parseInt(headCount); i++) {
      response.setHeader(String.valueOf(i), String.valueOf(i));
    }
    return "success";
  }
}

上述代碼比較簡單雷滋,就是根據(jù)入?yún)⒌囊粋€headCount參數(shù)不撑,向響應(yīng)中增加Header的數(shù)量。

我們先讓服務(wù)不經(jīng)過Nginx反向代理來驗證一下晤斩。headCount設(shè)置為3000焕檬,看是否正常。

image-20220305143953949

??澳泵,怎么服務(wù)端自己先報錯了呢实愚,還是看看日志吧。

An attempt was made to write more data to the response headers than there was room available in the buffer. Increase maxHttpHeaderSize on the connector or write less data into the response headers.

根據(jù)異常信息判斷兔辅,是SpringBoot自身對Header也有限制大小腊敲,異常也給出了解決方案,那就是增加maxHttpHeaderSize的大小维苔。

image-20220305143047461

通過找尋maxHttpHeaderSize關(guān)鍵詞碰辅,我們找到了SpringBoot自動加載的ServerProperties中的這個屬性,可以看到默認大小是8K介时。

我們可以通過application.properties將該大小增加到128K后重啟服務(wù)没宾。

server.maxHttpHeaderSize=128KB
image-20220305143911901

此時單獨訪問服務(wù)端是正常的了忍法。那再加上Nginx的負載均衡會是什么樣子呢?

我們找到Nginx的配置文件榕吼,在路徑/usr/local/etc/nginx/nginx.conf中饿序,找到http 80端口對應(yīng)的server配置,配置路由信息到本機的SpringBoot服務(wù)羹蚣。

location / {
  proxy_pass  http://127.0.0.1:8080;
}

修改完后啟動Nginx服務(wù)原探,然后通過瀏覽器請求同樣的后端服務(wù)。

image-20220305144121467

哇哦顽素,502 Bad Gateway啦咽弦,抓緊時間取看一下Ngxin的日志。

2022/03/05 14:42:35 [error] 63112#0: *14 upstream sent too big header while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "GET /home?headCount=3000 HTTP/1.1", upstream: "http://127.0.0.1:8080/home?headCount=3000", host: "localhost"

可以看到的確是因為響應(yīng)中Header過大導(dǎo)致的胁出,那么有什么解決辦法呢型型。感謝萬能的谷歌-> https://ma.ttias.be/nginx-proxy-upstream-sent-big-header-reading-response-header-upstream/

從這篇文章中可以看到全蝶,Nginx對于響應(yīng)Header會進行緩存闹蒜,如果Header超過了緩存的大小就會報這樣的錯誤。所以接下來那就是按照文章中給的設(shè)置修改Nginx配置抑淫。

location / {
  proxy_pass  http://127.0.0.1:8080;
  proxy_buffer_size     128K;
  proxy_buffers         4 256K;
  proxy_busy_buffers_size  256K;
}

重新啟動服務(wù)驗證绷落,現(xiàn)在可以看到請求已經(jīng)可以正常返回了。

image-20220305144741205
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末始苇,一起剝皮案震驚了整個濱河市砌烁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌催式,老刑警劉巖函喉,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異荣月,居然都是意外死亡管呵,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門喉童,熙熙樓的掌柜王于貴愁眉苦臉地迎上來撇寞,“玉大人顿天,你說我怎么就攤上這事堂氯。” “怎么了牌废?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵咽白,是天一觀的道長。 經(jīng)常有香客問我鸟缕,道長晶框,這世上最難降的妖魔是什么排抬? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮授段,結(jié)果婚禮上蹲蒲,老公的妹妹穿的比我還像新娘。我一直安慰自己侵贵,他們只是感情好届搁,可當我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著窍育,像睡著了一般卡睦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上漱抓,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天表锻,我揣著相機與錄音,去河邊找鬼乞娄。 笑死瞬逊,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的仪或。 我是一名探鬼主播码耐,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼溶其!你這毒婦竟也來了骚腥?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤瓶逃,失蹤者是張志新(化名)和其女友劉穎束铭,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體厢绝,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡契沫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了昔汉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片懈万。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖靶病,靈堂內(nèi)的尸體忽然破棺而出会通,到底是詐尸還是另有隱情,我是刑警寧澤娄周,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布涕侈,位于F島的核電站,受9級特大地震影響煤辨,放射性物質(zhì)發(fā)生泄漏裳涛。R本人自食惡果不足惜木张,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望端三。 院中可真熱鬧舷礼,春花似錦、人聲如沸郊闯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽虚婿。三九已至旋奢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間然痊,已是汗流浹背至朗。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留剧浸,地道東北人锹引。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像唆香,于是被迫代替她去往敵國和親嫌变。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內(nèi)容