這個是我最近處理的一個問題,使用者回報網站某個功能壞了,而且發現最近時不時網站會顯示 502(Bad Gateway)的畫面,雖然多重新整理幾次它就好了,但是這並不正常,我隨即捲起袖子開始一系列的追查動作,誓言一定要將兇手緝捕歸案。
[廚餘回收] 在 ASP.NET Core 中誤用 async void 竟引發了 502(Bad Gateway)
- 1114
- 0
- ASP.NET Core
這個是我最近處理的一個問題,使用者回報網站某個功能壞了,而且發現最近時不時網站會顯示 502(Bad Gateway)的畫面,雖然多重新整理幾次它就好了,但是這並不正常,我隨即捲起袖子開始一系列的追查動作,誓言一定要將兇手緝捕歸案。
先前有一篇文章在講 Linux 上 Port 被用光了,導致系統無法使用的問題,其中一個解決的方法是「增加服務的 Listen Port
」,我們的服務是用 ASP.NET Core 開發的,而 Nginx 則是當 Reverse Proxy 擋在前面,我們就來看一下 ASP.NET Core 及 Nginx 怎麼監聽多個 Port?
前幾天,公司的網站在尖鋒時刻,不時會從 Cloudflare 吐出 502(Bad Gateway),查看 Web 伺服器、DB 伺服器的 CPU、記憶體全都沒有過載的情況,把調查對象轉往 Nginx
,從錯誤日誌當中看到了下面這個錯誤訊息:
99: Cannot assign requested address
之前的文章有介紹到 SSR(Server Side Rendering)的服務 - rendertron,在官方文件有提到,如果我們轉發的網址有帶 Query String 的話,需要對 Query String 做 URL Encode,我的轉發邏輯是寫在 Nginx,所以這件事情最好就由 Nginx 來負責。
Nginx 預設每個 Worker Process 的最大連線數是 1024,這個對我們網站是不夠用的,那不夠用就會收到 socket() failed (24: Too many open files)
的錯誤訊息,於是就動手調整 Nginx 的參數,就在調整其中一個參數 worker_rlimit_nofile
的過程中,出現了下面的錯誤訊息:
setrlimit(RLIMIT_NOFILE, 65535) failed (1: Operation not permitted)
PowerShell 目前是開源的,而且跨平台,做為一位長期在微軟技術生態圈打滾的碼農,面對要撰寫 Script 做自動化工作的場景,怎麼可以不用呢? 馬上來將上一篇文章用 Shell Script 實現藍綠部署,改用 PowerShell 來實現。
在過去,發佈 Web 應用程式到 IIS 上,只要把新發佈的檔案覆蓋掉線上的檔案,IIS 就自動幫我們處理好新舊版的切換,現在搬到 Linux,這個新舊版切換的程序就得自己來了,第一個想到的工具就是 Shell Script。
微軟官方文件「在 Linux 上使用 Nginx 裝載 ASP.NET Core」使用的作業系統是 Ubuntu,我個人是偏好號稱萬年不掛的 CentOS,Linux 不同陣營之間的風格是有一點差異的,所以如果照著微軟官方的步驟套到 CentOS 上,一定會在某個地方覺得拐手,我就把到可以成功瀏覽網頁之前需要注意地方做個記錄。