Nginx code 狀態碼說明
From: https://www.cnblogs.com/kevingrace/p/7205623.html
最近了解下Nginx的Code狀態碼,在此簡單總結下。一個http請求處理流程:
一個普通的http請求處理流程,如上圖所示:
A -> client端發起請求給nginx
B -> nginx處理後,將請求轉發到uwsgi,並等待結果
C -> uwsgi處理完請求後,返回資料給nginx
D -> nginx將處理結果返回給客戶端
每個階段都會有一個預設的超時時間,由於網路、機器負載、程式碼異常等等各種原因,如果某個階段沒有在預期的時間內正常返回,就會導致這次請求異常,進而產生不同的狀態碼。
1)504
504主要是針對B、C階段。一般nginx配置中會有:
1234567891011121314151617181920212223 | location / { ... uwsgi_connect_timeout 6s; uwsgi_send_timeout 6s; uwsgi_read_timeout 10s; uwsgi_buffering on; uwsgi_buffers 80 16k; ... } 這個代表nginx與上游伺服器(uwsgi)通訊的超時時間,也就是說,如果在這個時間內,uwsgi沒有響應,則認為這次請求超時,返回504狀態碼。 具體的日誌如下: access_log [16 /May/2016 :22:11:38 +0800] 10.4.31.56 201605162211280100040310561523 15231401463407888908 10.*.*.* 127.0.0.1:8500 "GET /api/media_article_list/?count=10&source_type=0&status=all&from_time=0&item_id=0&flag=2&_=1463407896337 HTTP/1.1" 504 **.***.com **.**.**.39, **.**.**.60 10.000 10.000 "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36" ... error_log 2016 /05/16 22:11:38 [error] 90674 #0: *947302032 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 10.6.19.81, server: **.***.com, request: "GET /api/media_article_list/?count=10&source_type=0&status=all&from_time=0&item_id=0&flag=2&_=1463407896337 HTTP/1.1", upstream: "http://127.0.0.1:8500/**/**/api/media_article_list/?count=10&source_type=0&status=all&from_time=0&item_id=0&flag=2&_=1463407896337", host: "mp.toutiao.com", referrer: "https://**.***.com/articles/?source_type=0" error_log中upstream timed out (110: Connection timed out) while reading response header from upstream, 意思是說,在規定的時間內,沒有從header中拿到資料,即uwsgi沒有返回任何資料。 |
2)502
502主要針對B 、C階段。產生502的時候,對應的error_log中的內容會有好幾種:
access_log
1 | [16 /May/2016 :16:39:49 +0800] 10.4.31.56 201605161639490100040310562612 2612221463387989972 10.6.19.81 127.0.0.1:88 "GET /articles/?source_type=0 HTTP/1.1" 503 **.***.com **.**.**.4, **.**.**.160 0.000 0.000 "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36" "uuid=\x22w:546d345b86ca443eb44bd9bb1120e821\x22; tt_webid=15660522398; lasttag=news_culture; sessionid=f172028cc8310ba7f503adb5957eb3ea; sid_tt=f172028cc8310ba7f503adb5957eb3ea; _ga=GA1.2.354066248.1463056713; _gat=1" |
error_log
1 | 2016 /05/16 16:39:49 [error] 90693 #0: *944980723 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 10.6.19.80, server: **.***.com, request: "GET /articles/ HTTP/1.1", upstream: "http://127.0.0.1:8500/**/**/articles/", host: "**.***.com", referrer: "http://**.***.com/new_article/" |
列一下常見的幾種502對應的 error_log:
- recv() failed (104: Connection reset by peer) while reading response header from upstream
- upstream prematurely closed connection while reading response header from upstream
- connect() failed (111: Connection refused) while connecting to upstream
- ....
這些都代表,在nginx設定的超時時間內,上游uwsgi沒有給正確的響應(但是是有響應的,不然如果一直沒響應,就會變成504超時了),因此nginx這邊的狀態碼為502。
如上,access_log中出現503,為什麼?
這個是因為nginx upstream的容災機制。如果nginx有如下配置:
1234 | upstream app_backup { server 127.0.0.1:8500 max_fails=3 fail_timeout=5s; server 127.0.0.1:88 backup; } |
- max_fails=3 說明嘗試3次後,會認為“ server 127.0.0.1:8500” 失效,於是進入 “server 127.0.0.1:88 backup”,即訪問本機的88埠;
- nginx upstream的容災機制,預設情況下,Nginx 預設判斷失敗節點狀態以connect refuse和time out狀態為準,不過location里加了這個配置:
12345 proxy_next_upstream error http_502;
proxy_connect_timeout 1s;
proxy_send_timeout 6s;
proxy_read_timeout 10s;
proxy_set_header Host $host;
- 這個配置是說,對於http狀態是502的情況,也會走upstream的容災機制;
- 概括一下就是,如果連續有3次(max_fails=3)狀態為502的請求,則會任務這個後端server 127.0.0.1:8500 掛掉了,在接下來的5s(fail_timeout=5s)內,就會訪問backup,即server 127.0.0.1:88 ,看下88埠對應的是什麼:
123456789101112 server {
listen 88;
access_log
/var/log/nginx/failover
.log;
expires 1m;
error_page 500 502 503 504
/500
.html;
location / {
return
503;
}
location =
/500
.html {
root /**/**/**
/nginx/5xx/
;
相關推薦
Nginx code 狀態碼說明
From: https://www.cnblogs.com/kevingrace/p/7205623.html 最近了解下Nginx的Code狀態碼,在此簡單總結下。一個http請求處理流程:一個普通的http請求處理流程,如上圖所示:A -> client端發起請求給
nginx 499狀態碼
發現 需要 Nginx訪問日誌 均衡器 不想 關於 null AD ear Web服務器在用著nginx,在日誌中偶爾會看到有499這個錯誤。 rfc2616中,400~500間的錯誤碼僅定義到了417,所以499應該是nginx自己定義的。後來想到讀讀nginx代碼,
ajax 相容問題、send的位置、Status Code狀態碼
XMLHttpRequest在低版本IE下(除IE6),裡面的事件和屬性都有不同。比如 xhr.onload = function( ){ } 事件只有高版本才能使用。 但是所有版本都支援:xhr.onreadystatechange = function( ){ } :能夠監聽到請求的步驟。 onrea
ajax 兼容問題、send的位置、Status Code狀態碼
不存在 請求 發送 註意 span 哪裏 nload post 沒有 XMLHttpRequest在低版本IE下(除IE6),裏面的事件和屬性都有不同。比如 xhr.onload = function( ){ } 事件只有高版本才能使用。 但是所有版本都支持:xhr.onr
http協議基礎(四)http狀態碼 Status Code狀態碼詳解對照表
一:http狀態碼 表示客戶端http請求的返回結果、標記伺服器端的處理是否正常、通知出現的錯誤等工作 狀態碼的類別如下: http狀態碼種類繁多,大概有60多種,實際上經常使用的只有14種,下面為一一介紹 1、2XX 成功:請求被正常處理 1.1 200 OK 表示從客戶端發
Http status code 狀態碼
HTTP 狀態程式碼 本部分描述 HTTP IIS 7.0 使用的 HTTP 狀態程式碼。注意本文不會列出 HTTP 規範中所述的每個可能的 HTTP 狀態程式碼。本文只包括 IIS 7.0 可以傳送的 HTTP 狀態程式碼。例如,自定義 Internet Server
Nginx的 HTTP 499 狀態碼處理
搜索 是什麽 src 多個 客戶端連接 alt nec logs 源碼 1、前言 今天在處理一個客戶問題,遇到Nginx access log中出現大量的499狀態碼。實際場景是:客戶的域名通過cname解析到我們的Nginx反向代理集群上來,客戶的Web服務是由一個
HTTP Status Code HTTP 狀態碼
http status code http 狀態碼 消息(1字頭)這一類型的狀態碼,代表請求已被接受,需要繼續處理。這類響應是臨時響應,只包含狀態行和某些可選的響應頭信息,並以空行結束。由於 HTTP/1.0 協議中沒有定義任何 1xx 狀態碼,所以除非在某些試驗條件下,服務器禁止向此類客戶端發送 1
HTTP協議狀態碼詳解(HTTP Status Code)
找不到 work for 條件 暫時 ocs 有效 網絡設備 不同 使用ASP.NET/PHP/JSP 或者javascript都會用到http的不同狀態,一些常見的狀態碼為: 200 – 服務器成功返回網頁 404 – 請求的網頁不存在 503 – 服務不可用 1x
獲取響應狀態Status信息、獲取狀態碼Status Code
數據 bootstra 9.png nts web not found sys 獲取 closeable 一般服務器的響應狀態有以下幾種: 200 正常 400 未找到頁面 403 拒絕 500 服務器錯誤 比如我們請求bootstrap中文網, 此時的狀態碼是200
shell 腳本分析nginx 訪問日誌狀態碼
shell 腳本分析 nginx 1.獲取nginx 日誌訪問狀態碼;grep -ioE "HTTP\/1\.[1|0]\"[[:blank:]][0-9]{3}" nginx_app.api.zhaoyifen.ssl.log grep -ioE "HTTP\/1\.[1|0]\"[[:blan
Nginx+PHP框架laravel狀態碼500錯誤解決!
PHP Nginx laravel laravel500錯誤 php500錯誤 我們先來看下報錯 狀態碼是:==500== 通常是服務器那的錯誤。 然後 Emmmmmm..... 測試1 先修改了 index.php 的代碼 在代碼最前面加上了: echo "1111";
nginx返回錯誤狀態碼401
nginx conf style vim color AD 配置 round www 可能註釋的代碼不太一樣,註釋掉auth_basic前綴的就行修改配置文件: #vim /www/server/nginx/conf/nginx.conf server{ #auth_b
NGINX反向代理對HTML頁面的POST請求返回405狀態碼解決方法
nginx html post 405 http 實現如下:server { listen 80; listen 443 ssl; server_name nirvana.test-a.gogen; ssl_certificate /etc/ng
常見的狀態碼:HTTP Status Code
常見的狀態碼: HTTP:Status 200 – 伺服器成功返回網頁 HTTP:Status 404 – 請求的網頁不存在 HTTP Status 500 - 伺服器內部錯誤 詳解: HTTP: Status 1xx (臨時響應) ->表示臨時響應並需要請
HTTP狀態碼(HTTP Status Code)及其解釋
程式碼 說明 400 (錯誤請求) 伺服器不理解請求的語法。 401 (未授權) 請求要求身份驗證。 對於需要登入的網頁,伺服器可能返回此響應。 403 (禁止) 伺服器拒絕請求。 404 (未找到) 伺服器找不到請求的網頁。 405 (方法禁用) 禁用請求中指定的方法。 406
常見的HTTP狀態碼(HTTP Status Code)說明(詳細版)
前言 作為一個網際網路開發人員對於一些伺服器返回的HTTP狀態的意思都必須是瞭如指掌的,只有將這些狀態碼一一弄清楚,工作中遇到的各種問題才能夠處理的得心應手。好了,下面就讓我們來了解一下比較常見的HTTP狀態碼吧! 成功類 2開頭 (請求成功)表示成功處理了請求
http狀態碼大全(HTTP Status Code) Curl http_code 狀態碼 意義
HTTP狀態碼是什麼意思? 當伺服器收到某項請求時,例如,使用者通過瀏覽器訪問你的網頁,伺服器會向這個瀏覽器返回一個程式碼以響應請求。一個程式碼就稱為:HTTP狀態碼。 同樣道理,當搜尋引擎的Robot(機器人)或Crawler(爬行器)抓取你的網頁時,伺服器也會返回HTTP狀態碼相應請求。
nginx服務之圖解常見狀態碼
常見狀態碼1: 301 永久移動。請求資源以被永久移動位置 302 請求的資源現在臨時從不同的URL響應請求 305 使用代理。被請求的資源必須通過指定的代理才能被訪問 307 臨時跳轉。被請求的資源在臨時從不同的URL響應請求 400 錯誤請求。
HTTP狀態碼一覽表(HTTP Status Code)
英文版: 100:Continue 101:Switching Protocols 102:Processing 200:OK 201:Created 202:Accepted 203:Non-Authoriative Information 204:No Content 205:Reset Content