Nginx返回響應(yīng)碼411

問題

最近在遷移即將到期的虛擬機(jī)思恐,虛擬機(jī)上面跑著Nginx對(duì)外提供服務(wù)沾谜。在切換到新的虛擬機(jī)后膊毁,有業(yè)務(wù)方反映上傳圖片失敗,Nginx返回響應(yīng)碼411.

第一次遇到這種問題基跑,在網(wǎng)上搜索一番后發(fā)現(xiàn)是低版本Nginx存在的問題婚温。新的虛擬機(jī)上面的Nginx是通過yum源安裝的,版本為1.0.15. 該版本的Nginx在處理 POST 方式上傳文件的時(shí)候會(huì)觸發(fā)該問題媳否,給客戶端返回響應(yīng)碼411.

解決方案

OK栅螟,知道是Nginx版本太低導(dǎo)致的,那解決方案就是升級(jí)Nginx了篱竭。如何不影響線上服務(wù)平滑升級(jí)Nginx呢力图?

平滑升級(jí)Nginx

源碼編譯

Nginx官網(wǎng)下載最新穩(wěn)定版:

wget http://nginx.org/download/nginx-1.8.0.tar.gz

解壓縮并進(jìn)入源碼目錄:

tar zxf nginx-1.8.0.tar.gz
cd nginx-1.8.0

查看老版本Nginx的編譯配置:

nginx -V

復(fù)制上述命令輸出的配置參數(shù),加到 ./configure 后面掺逼,修改prefix參數(shù)為其它目錄:

./configure --prefix=/home/ubuntu/nginx <其它復(fù)制過來的配置參數(shù)>

執(zhí)行完上面的命令搪哪,你可能看到如下錯(cuò)誤信息,提示rewrite模塊需要PCRE庫(kù):

./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.

PCRE官方FTP服務(wù)器下載PCRE并解壓縮:

wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.36.tar.gz
tar zxf pcre-8.36.tar.gz

在Nginx的源碼目錄再次執(zhí)行配置命令坪圾,這次加上--with-pcre選項(xiàng):

./configure --prefix=/home/ubuntu/nginx <其它復(fù)制過來的配置參數(shù)> --with-pcre=/home/ubuntu/pcre-8.36

如果仍然提示缺少一些依賴庫(kù)晓折,安裝這些庫(kù):

# on ubuntu/debian system
sudo apt-get install libssl-dev libxml2-dev libxslt-dev libgd-dev libgeoip-dev

配置無誤后,然后執(zhí)行make命令兽泄。至此漓概,編譯好的nginx可執(zhí)行文件在當(dāng)前目錄的子目錄objs里面。

平滑升級(jí)

  1. 備份舊版本的nginx可執(zhí)行文件:

    <pre class=”brush: bash; gutter: false;”>
    sudo mv /usr/sbin/nginx /usr/sbin/nginx.old
    </pre>

  2. 把編譯好的nginx可執(zhí)行文件復(fù)制過去:

    <pre class=”brush: bash; gutter: false;”>
    sudo cp objs/nginx /usr/sbin/nginx
    </pre>

  3. 測(cè)試Nginx配置是否正確:

    <pre class=”brush: bash; gutter: false;”>
    sudo /usr/sbin/nginx -t
    </pre>

    如果測(cè)試正確病梢,可以進(jìn)入下一步操作胃珍。

  4. 給舊版本的nginx主進(jìn)程發(fā)送USR2信號(hào):

    <pre class=”brush: bash; gutter: false;”>
    ubuntu@me:~/nginx-1.8.0$ ps -ef | grep nginx
    root 9962 1 0 2014 ? 00:00:00 nginx: master process /usr/sbin/nginx
    ubuntu 31321 9962 0 Apr23 ? 00:04:58 nginx: worker process
    ubuntu 31322 9962 0 Apr23 ? 00:05:20 nginx: worker process
    ubuntu 31323 9962 0 Apr23 ? 00:05:46 nginx: worker process
    ubuntu 31324 9962 0 Apr23 ? 00:00:18 nginx: worker process
    ubuntu@me:~/nginx-1.8.0$ sudo kill -USR2 9962
    ubuntu@me:~/nginx-1.8.0$ ps -ef | grep nginx
    root 9962 1 0 2014 ? 00:00:00 nginx: master process /usr/sbin/nginx
    root 29149 9962 0 04:47 ? 00:00:00 nginx: master process /usr/sbin/nginx
    ubuntu 29150 29149 0 04:47 ? 00:00:00 nginx: worker process
    ubuntu 29151 29149 0 04:47 ? 00:00:00 nginx: worker process
    ubuntu 29152 29149 0 04:47 ? 00:00:00 nginx: worker process
    ubuntu 29153 29149 0 04:47 ? 00:00:00 nginx: worker process
    ubuntu 31321 9962 0 Apr23 ? 00:04:58 nginx: worker process
    ubuntu 31322 9962 0 Apr23 ? 00:05:20 nginx: worker process
    ubuntu 31323 9962 0 Apr23 ? 00:05:46 nginx: worker process
    ubuntu 31324 9962 0 Apr23 ? 00:00:18 nginx: worker process
    </pre>

    可以看到,在發(fā)送USR2信號(hào)后蜓陌,新的nginx master進(jìn)程和worker進(jìn)程開始運(yùn)行觅彰。此時(shí),新nginx和舊nginx同時(shí)在工作钮热。

  5. 接下來填抬,給舊版本nginx主進(jìn)程發(fā)送WINCH信號(hào):

    <pre class=”brush: bash; gutter: false;”>
    ubuntu@me:~/nginx-1.8.0$ sudo kill -WINCH 9962
    ubuntu@me:~/nginx-1.8.0$ ps -ef | grep nginx
    root 9962 1 0 2014 ? 00:00:00 nginx: master process /usr/sbin/nginx
    root 29149 9962 0 04:47 ? 00:00:00 nginx: master process /usr/sbin/nginx
    ubuntu 29150 29149 0 04:47 ? 00:00:00 nginx: worker process
    ubuntu 29151 29149 0 04:47 ? 00:00:00 nginx: worker process
    ubuntu 29152 29149 0 04:47 ? 00:00:00 nginx: worker process
    ubuntu 29153 29149 0 04:47 ? 00:00:00 nginx: worker process
    </pre>

    這時(shí),可以看到舊nginx的worker進(jìn)程退出了隧期,不再處理新的請(qǐng)求飒责,新的請(qǐng)求都由新nginx處理。

  6. 接下來是平滑升級(jí)的最后一步仆潮,也就是給舊版本nginx主進(jìn)程發(fā)送QUIT信號(hào):

    <pre class=”brush: bash; gutter: false;”>
    ubuntu@me:~/nginx-1.8.0$ sudo kill -QUIT 9962
    ubuntu@me:~/nginx-1.8.0$ ps -ef | grep nginx
    root 29149 1 0 04:47 ? 00:00:00 nginx: master process /usr/sbin/nginx
    ubuntu 29150 29149 0 04:47 ? 00:00:00 nginx: worker process
    ubuntu 29151 29149 0 04:47 ? 00:00:00 nginx: worker process
    ubuntu 29152 29149 0 04:47 ? 00:00:00 nginx: worker process
    ubuntu 29153 29149 0 04:47 ? 00:00:00 nginx: worker process
    </pre>

    好了宏蛉,至此舊nginx的主進(jìn)程也退出了。我們已成功平滑升級(jí)到新版nginx.

版本回退

如果在執(zhí)行上面的平滑升級(jí)過程中反悔了想回退性置,該怎么辦拾并?

  1. 給舊版本nginx主進(jìn)程發(fā)送HUP信號(hào)
  2. 給新版本nginx主進(jìn)程發(fā)送QUIT信號(hào)
  3. 從備份中還原nginx可執(zhí)行文件

升級(jí)過程中出問題

按照上面的升級(jí)步驟,筆者在ubuntu系統(tǒng)上成功將Nginx升級(jí)到1.8版本。但是在公司虛擬機(jī)CentOS 6.4上執(zhí)行升級(jí)操作卻沒有成功嗅义。問題在執(zhí)行第3步的時(shí)候个榕,檢查Nginx配置失敗,提示nginx.pm文件版本號(hào)不匹配芥喇。

參考資料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末西采,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子继控,更是在濱河造成了極大的恐慌械馆,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件武通,死亡現(xiàn)場(chǎng)離奇詭異霹崎,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)冶忱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門尾菇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人囚枪,你說我怎么就攤上這事派诬。” “怎么了链沼?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵默赂,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我括勺,道長(zhǎng)缆八,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任疾捍,我火速辦了婚禮奈辰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘乱豆。我一直安慰自己奖恰,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布咙鞍。 她就那樣靜靜地躺著房官,像睡著了一般。 火紅的嫁衣襯著肌膚如雪续滋。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天孵奶,我揣著相機(jī)與錄音疲酌,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛朗恳,可吹牛的內(nèi)容都是我干的湿颅。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼粥诫,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼油航!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起怀浆,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤谊囚,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后执赡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體镰踏,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年沙合,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了奠伪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡首懈,死狀恐怖绊率,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情究履,我是刑警寧澤即舌,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站挎袜,受9級(jí)特大地震影響顽聂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜盯仪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一紊搪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧全景,春花似錦耀石、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至落君,卻和暖如春劣光,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背称开。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工亩钟, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留乓梨,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓清酥,卻偏偏與公主長(zhǎng)得像扶镀,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子焰轻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

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