国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Nginx與Spring Boot的錯(cuò)誤模擬實(shí)踐:探索502和504錯(cuò)誤的原因

這篇具有很好參考價(jià)值的文章主要介紹了Nginx與Spring Boot的錯(cuò)誤模擬實(shí)踐:探索502和504錯(cuò)誤的原因。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言

剛工作那會(huì),最常見的報(bào)錯(cuò)是500 Internal Server Error ,曾經(jīng)也碰到過前端反饋502 Bad Gateway 或者 504 Gateway Time-out,那時(shí)候傻傻的搞不懂,以為這種都是外部服務(wù)或者網(wǎng)絡(luò)運(yùn)維部那邊的問題。

當(dāng)時(shí)那個(gè)服務(wù)里正好有個(gè)調(diào)用日志,平時(shí)會(huì)記錄各種200,4xx狀態(tài)碼的信息。于是我跑到服務(wù)日志里去搜索了一下502這個(gè)數(shù)字,毫無發(fā)現(xiàn)。于是跟反映錯(cuò)誤的前端說,“服務(wù)日志里并沒有502的記錄,你是不是搞錯(cuò)啦?”

現(xiàn)在想想,果然那時(shí)候還是個(gè)小白。。。

502和504區(qū)別—都是Nginx返回的

我們實(shí)際企業(yè)級(jí)應(yīng)用,訪問肯定是有nginx這層代理的,如下圖所示:

有了nginx這一中間層后,客戶端從直連服務(wù)端,變成客戶端直連nginx,再由nginx直連服務(wù)端。從一個(gè)TCP連接變成兩個(gè)TCP連接。

于是,當(dāng)服務(wù)器發(fā)生異常時(shí),nginx發(fā)送給服務(wù)器的那條TCP連接就不能正常響應(yīng),nginx在得到這一信息后,就會(huì)返回5xx錯(cuò)誤碼給客戶端,也就是說5xx的報(bào)錯(cuò),其實(shí)是由nginx識(shí)別出來,并返回給客戶端的,服務(wù)端本身,并不會(huì)有5xx的日志信息。所以上面說到的,前端收到了我服務(wù)的502報(bào)錯(cuò),但我在自己的服務(wù)日志里卻搜索不到這一信息。

nginx 504,Nginx,分布式專題,SpringBoot,nginx,spring boot,狀態(tài)模式

502錯(cuò)誤和504錯(cuò)誤都表示前端訪問后端服務(wù)器時(shí)出現(xiàn)了問題,但它們之間有以下區(qū)別:

502錯(cuò)誤(Bad Gateway):

  • 502錯(cuò)誤是指反向代理服務(wù)器(如Nginx)作為中間代理,在請(qǐng)求轉(zhuǎn)發(fā)過程中從后端服務(wù)器接收到了無效的響應(yīng)。
  • 502錯(cuò)誤通常與后端服務(wù)器的故障、崩潰、無響應(yīng)或錯(cuò)誤配置等問題有關(guān)。
  • 反向代理服務(wù)器無法獲取有效的響應(yīng),因此返回502錯(cuò)誤給前端客戶端。
  • 502錯(cuò)誤表示中間代理服務(wù)器與后端服務(wù)器之間的通信存在問題。

504錯(cuò)誤(Gateway Timeout):

  • 504錯(cuò)誤是指反向代理服務(wù)器在規(guī)定的時(shí)間內(nèi)無法從后端服務(wù)器獲取到有效的響應(yīng)。
  • 504錯(cuò)誤通常與后端服務(wù)器的響應(yīng)超時(shí)有關(guān),即后端服務(wù)器處理請(qǐng)求的時(shí)間超過了反向代理服務(wù)器設(shè)置的超時(shí)時(shí)間。
  • 反向代理服務(wù)器在規(guī)定時(shí)間內(nèi)未收到有效的響應(yīng),因此返回504錯(cuò)誤給前端客戶端。
  • 504錯(cuò)誤表示反向代理服務(wù)器在等待后端服務(wù)器響應(yīng)時(shí)超時(shí)。

access.log和error.log介紹

在Nginx中,access.log和error.log是兩個(gè)重要的日志文件,用于記錄服務(wù)器的訪問和錯(cuò)誤信息。下面是關(guān)于這兩個(gè)日志文件的介紹:

  1. access.log:
    • access.log是Nginx服務(wù)器記錄所有訪問請(qǐng)求的日志文件。
    • 它包含了每個(gè)請(qǐng)求的詳細(xì)信息,如訪問時(shí)間、客戶端IP地址、請(qǐng)求方法、請(qǐng)求的URL、HTTP協(xié)議版本、返回的狀態(tài)碼、傳輸字節(jié)數(shù)等。
    • access.log對(duì)于分析和監(jiān)視服務(wù)器的訪問模式、流量分析、性能調(diào)優(yōu)和安全審計(jì)非常有用。
    • 默認(rèn)情況下,access.log文件位于Nginx的安裝目錄下的logs文件夾中,可以通過在配置文件中進(jìn)行配置來更改日志文件的位置和格式。
  2. error.log:
    • error.log是Nginx服務(wù)器記錄所有錯(cuò)誤和警告信息的日志文件。
    • 它包含了服務(wù)器處理請(qǐng)求時(shí)發(fā)生的錯(cuò)誤、異常、警告和其他問題的詳細(xì)信息。
    • error.log對(duì)于故障排除、錯(cuò)誤診斷和監(jiān)視服務(wù)器的健康狀態(tài)非常有用。
    • 默認(rèn)情況下,error.log文件也位于Nginx的安裝目錄下的logs文件夾中,可以通過在配置文件中進(jìn)行配置來更改日志文件的位置和格式。

所以當(dāng)我們配置了nginx代理以后,每次訪問都會(huì)在access.log里面有訪問記錄,報(bào)錯(cuò)時(shí),會(huì)在error.log記錄對(duì)應(yīng)信息

SpringBoot結(jié)合Nginx實(shí)戰(zhàn)502 and 504

實(shí)際運(yùn)用中,我碰到的502正常都是服務(wù)掛了,504一般都是服務(wù)超時(shí)了,現(xiàn)在我就模擬這兩種情況

準(zhǔn)備工作

Nginx配置

首先將nginx進(jìn)行配置,當(dāng)我們?cè)L問www.testnginx.com//test502Or504 會(huì)自動(dòng)代理訪問到http://localhost:8080/test502Or504

 server{
        listen 80;
        server_name www.testnginx.com; #請(qǐng)求的域名
		proxy_send_timeout 2s;     # 設(shè)置發(fā)送超時(shí)時(shí)間,
        proxy_read_timeout 2s;	 # 設(shè)置讀取超時(shí)時(shí)間。
        location /test502Or504{
            proxy_pass http://localhost:8080/test502Or504;
        }
    }
host配置
127.0.0.1  www.testnginx.com
SpringBoot
@Slf4j
@RestController
public class TestControllerForThis {

	@RequestMapping("/test502Or504")
	public String test502Or504() {
		ThreadUtil.sleep(3000L);
		return "test502Or504";
	}
}	

直接訪問:localhost:8080/test502Or504

nginx 504,Nginx,分布式專題,SpringBoot,nginx,spring boot,狀態(tài)模式

502模擬

502很好模擬,由于我們上面進(jìn)行了配置:www.testnginx.com//test502Or504會(huì)自動(dòng)代理到http://localhost:8080/test502Or504 ,可以直接將我們的SpringBoot工程直接關(guān)閉,此時(shí)即可模擬出502報(bào)錯(cuò):

直接訪問:http://localhost:8080/test502Or504

nginx 504,Nginx,分布式專題,SpringBoot,nginx,spring boot,狀態(tài)模式

訪問:http://www.testnginx.com/test502Or504

nginx 504,Nginx,分布式專題,SpringBoot,nginx,spring boot,狀態(tài)模式

access.log

127.0.0.1 - - [04/Oct/2023:23:06:16 +0800] “GET /test502Or504 HTTP/1.1” 502559 “-” “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36”

error.log
2023/10/04 23:06:14 [error] 15220#11328: *63 connect() failed (10061: No connection could be made because the target machine actively refused it) while connecting to upstream, client: 127.0.0.1, server: www.testnginx.com, request: "GET /test502Or504 HTTP/1.1", upstream: "http://[::1]:8080/test502Or504", host: "www.testnginx.com"
2023/10/04 23:06:16 [error] 15220#11328: *63 connect() failed (10061: No connection could be made because the target machine actively refused it) while connecting to upstream, client: 127.0.0.1, server: www.testnginx.com, request: "GET /test502Or504 HTTP/1.1", upstream: "http://127.0.0.1:8080/test502Or504", host: "www.testnginx.com"

504模擬

我們?cè)贜ginx配置了超時(shí)時(shí)間為2s,所以當(dāng)我們請(qǐng)求的接口耗時(shí)超過2s時(shí),就會(huì)出現(xiàn)504 Gateway Time-out

我們?cè)诮涌诶锩嫠吡?s超過了配置的2s:

@RequestMapping("/test502Or504")
	public String test502Or504() {
		ThreadUtil.sleep(3000L);
		return "test502Or504";
	}

當(dāng)然,直接訪問http://localhost:8080/test502Or504是正常的,

nginx 504,Nginx,分布式專題,SpringBoot,nginx,spring boot,狀態(tài)模式

訪問http://www.testnginx.com/test502Or504報(bào)錯(cuò)504 Gateway Time-out

nginx 504,Nginx,分布式專題,SpringBoot,nginx,spring boot,狀態(tài)模式

access.log

127.0.0.1 - - [04/Oct/2023:23:02:26 +0800] “GET /test502Or504 HTTP/1.1” 504 569 “-” “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36”

error.log
2023/10/04 23:02:24 [error] 15220#11328: *59 upstream timed out (10060: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond) while reading response header from upstream, client: 127.0.0.1, server: www.testnginx.com, request: "GET /test502Or504 HTTP/1.1", upstream: "http://[::1]:8080/test502Or504", host: "www.testnginx.com"
2023/10/04 23:02:26 [error] 15220#11328: *59 upstream timed out (10060: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond) while reading response header from upstream, client: 127.0.0.1, server: www.testnginx.com, request: "GET /test502Or504 HTTP/1.1", upstream: "http://127.0.0.1:8080/test502Or504", host: "www.testnginx.com"

500模擬

修改程序

@RequestMapping("/test502Or504")
	public String test502Or504() {
		if (true){
			throw new NullPointerException("test502Or504");
		}
		ThreadUtil.sleep(3000L);
		return "test502Or504";
	}

直接訪問http://localhost:8080/test502Or504

nginx 504,Nginx,分布式專題,SpringBoot,nginx,spring boot,狀態(tài)模式

訪問:http://www.testnginx.com/test502Or504

nginx 504,Nginx,分布式專題,SpringBoot,nginx,spring boot,狀態(tài)模式

access.log

127.0.0.1 - - [04/Oct/2023:23:11:07 +0800] “GET /test502Or504 HTTP/1.1” 500 310 “-” “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36”

error.log

此時(shí)不會(huì)記錄500錯(cuò)誤文章來源地址http://www.zghlxwxcb.cn/news/detail-766440.html

總結(jié)

  • 502錯(cuò)誤表示反向代理服務(wù)器接收到了無效的響應(yīng)或與后端服務(wù)器之間通信出現(xiàn)問題。
  • 504錯(cuò)誤表示反向代理服務(wù)器在規(guī)定時(shí)間內(nèi)未能從后端服務(wù)器獲取到有效的響應(yīng),即后端服務(wù)器響應(yīng)超時(shí)。
  • 502錯(cuò)誤主要與后端服務(wù)器的故障、崩潰或配置錯(cuò)誤有關(guān),而504錯(cuò)誤主要與后端服務(wù)器的響應(yīng)超時(shí)有關(guān)。

到了這里,關(guān)于Nginx與Spring Boot的錯(cuò)誤模擬實(shí)踐:探索502和504錯(cuò)誤的原因的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Nginx錯(cuò)誤502 Bad Gateway

    使用Nginx配置的反向代理,瀏覽器訪問的時(shí)候出現(xiàn) “502 Bad Gateway” 錯(cuò)誤,檢查了一下后臺(tái)error文件,發(fā)現(xiàn)有類似下面的錯(cuò)誤 其中 “upstream sent too big header while reading response header from upstream” 說明可能是nginx代理的緩沖區(qū)不夠,因此需要調(diào)整一下緩沖區(qū)的配置,主要包括下面幾

    2024年02月19日
    瀏覽(25)
  • 服務(wù)器報(bào)錯(cuò)nginx 502 Bad Gateway的原因以及解決辦法

    服務(wù)器報(bào)錯(cuò)nginx 502 Bad Gateway的原因以及解決辦法

    網(wǎng)站頁面出現(xiàn)502badgateway怎么辦?今天我們來分析一下原因和解決辦法。 nginx出現(xiàn)502多數(shù)是屬于后端的問題,后期就是PHP的問題,在php服務(wù)當(dāng)中,有兩個(gè)參數(shù)非常的重要:max_requestst 和max_children;具體的原因必須要查看日志才可以弄明白! 1:FastCGI進(jìn)程是否已經(jīng)啟動(dòng) ps aux|grep

    2023年04月20日
    瀏覽(24)
  • nginx服務(wù)器報(bào)錯(cuò)502 Bad Gateway的原因以及解決辦法

    服務(wù)器報(bào)錯(cuò)nginx 502 Bad Gateway的原因以及解決辦法_502 bad gateway nginx_主題模板站的博客-CSDN博客

    2024年02月13日
    瀏覽(25)
  • 解鎖Spring Boot中的設(shè)計(jì)模式—04.橋接模式:探索【橋接模式】的奧秘與應(yīng)用實(shí)踐!

    解鎖Spring Boot中的設(shè)計(jì)模式—04.橋接模式:探索【橋接模式】的奧秘與應(yīng)用實(shí)踐!

    橋接模式也稱為橋梁模式、接口模式或者柄體(Handle and Body)模式,是將 抽象部分 與他的 具體實(shí)現(xiàn)部分 分離 ,使它們都可以獨(dú)立地變化,通過 組合 的方式 建立 兩個(gè)類之間的 聯(lián)系 ,而不是繼承。 橋接模式是一種結(jié)構(gòu)型設(shè)計(jì)模式,旨在將抽象部分與實(shí)現(xiàn)部分分離,使它們

    2024年02月21日
    瀏覽(24)
  • 解鎖Spring Boot中的設(shè)計(jì)模式—03.委派模式:探索【委派模式】的奧秘與應(yīng)用實(shí)踐!

    解鎖Spring Boot中的設(shè)計(jì)模式—03.委派模式:探索【委派模式】的奧秘與應(yīng)用實(shí)踐!

    委派模式 是一種負(fù)責(zé)任務(wù)的調(diào)度和分配模式,類似于代理模式但更注重結(jié)果而非過程。它可以被視為一種特殊情況下的靜態(tài)代理的全權(quán)代理,但并不屬于GOF 23種設(shè)計(jì)模式之一,而是歸類為行為型模式。 委派模式在Spring框架中廣泛應(yīng)用,其中最常見的例子是 DispatcherServlet ,它

    2024年02月19日
    瀏覽(27)
  • http常用狀態(tài)碼(204,304, 404, 504,502)含義

    網(wǎng)絡(luò)狀態(tài)碼含義,常用(204,304, 404, 504,502) 200 – 服務(wù)器成功返回網(wǎng)頁? 404 – 請(qǐng)求的網(wǎng)頁不存在? 503 – 服務(wù)不可用? 常見HTTP狀態(tài)碼大全? 1xx(臨時(shí)響應(yīng))? 表示臨時(shí)響應(yīng)并需要請(qǐng)求者繼續(xù)執(zhí)行操作的狀態(tài)代碼。? 代碼 說明? http狀態(tài)碼 100 (繼續(xù)) 請(qǐng)求者應(yīng)當(dāng)繼續(xù)提出

    2023年04月22日
    瀏覽(25)
  • Nginx反向代理出現(xiàn)錯(cuò)誤 502 bad gateway 案例解析

    Nginx + uwsgi + flask Flask框架寫的程序,使用uwsgi啟動(dòng),Nginx作為反向代理調(diào)用Flask應(yīng)用。 Flask應(yīng)用有些操作時(shí)間比較長,會(huì)超過1分鐘,在網(wǎng)頁端訪問會(huì)出現(xiàn)錯(cuò)誤: 502 bad gateway。 Nginx的錯(cuò)誤日志中會(huì)出現(xiàn)錯(cuò)誤:upstream prematurely closed connection while reading response header from upstream 經(jīng)過網(wǎng)上

    2024年02月08日
    瀏覽(14)
  • 解鎖Spring Boot中的設(shè)計(jì)模式—02.解釋器模式:探索【解釋器模式】的奧秘與應(yīng)用實(shí)踐!

    解鎖Spring Boot中的設(shè)計(jì)模式—02.解釋器模式:探索【解釋器模式】的奧秘與應(yīng)用實(shí)踐!

    解釋器模式(Interpreter Pattern)是一種行為設(shè)計(jì)模式,它用于定義語言的文法,并且解釋語言中的表達(dá)式。在Java中,解釋器模式可以用于構(gòu)建解釋器以解析特定的語言或表達(dá)式,如數(shù)學(xué)表達(dá)式、查詢語言等。 優(yōu)點(diǎn): 靈活性: 解釋器模式可以 靈活地添加新的表達(dá)式和規(guī)則 ,因

    2024年02月19日
    瀏覽(96)
  • 常見的瀏覽器報(bào)錯(cuò)[400, 401,403,404, 405, 408; 500,502,503, 504 ,505]

    常見的瀏覽器報(bào)錯(cuò)[400, 401,403,404, 405, 408; 500,502,503, 504 ,505]

    在使用瀏覽器加載一些網(wǎng)站時(shí),偶爾會(huì)遇到加載不出來并帶數(shù)字的錯(cuò)誤提示的情況。那么這些web錯(cuò)誤的訪問代碼具體到底是什么意思呢? 這些狀態(tài)代碼表示請(qǐng)求可能出錯(cuò),妨礙了服務(wù)器的處理。 (1) 404報(bào)錯(cuò)- - -無法找到文件 這應(yīng)該是最常見的錯(cuò)誤代碼了,其含義是找不到要查

    2024年02月14日
    瀏覽(28)
  • 解決docker nginx 502錯(cuò)誤 connect() failed (111: Connection refused) while connecting to upstream

    解決docker nginx 502錯(cuò)誤 connect() failed (111: Connection refused) while connecting to upstream

    docker里啟動(dòng)了nginx容器,然后配置好了前端頁面,后端服務(wù)在宿主機(jī)里啟動(dòng)運(yùn)行,頁面能正常預(yù)覽,但是反向代理請(qǐng)求后端的時(shí)候報(bào)502,宿主機(jī)的wlan ip是192.168.1.106,宿主機(jī)docker網(wǎng)橋ip是172.17.0.1 若服務(wù)器是網(wǎng)線連接的則服務(wù)器的ip在eth0看,因?yàn)槲矣玫氖莣ifi所以在wlan有ip ? 使用

    2024年02月05日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包