你快要成交了。您的訪客點(diǎn)擊結(jié)賬。然后砰——503 服務(wù)不可用。他們走了。也許永遠(yuǎn)。你只是因?yàn)榉?wù)員決定休息而失去了收入。503錯(cuò)誤是暫時(shí)的,沒錯(cuò)。但臨時(shí)工在流量大時(shí)根本付不起賬單。本指南穿透了噪音。沒有花哨。具體是什么導(dǎo)致了503錯(cuò)誤,如何修復(fù)它們,以及如何確保它們不會(huì)再出現(xiàn)。
503錯(cuò)誤意味著你的服務(wù)器現(xiàn)在無法處理這個(gè)請(qǐng)求。不是因?yàn)樗鼔牧?/span>——而是因?yàn)樗豢爸刎?fù)、處于維護(hù)模式,或者在處理后端故障。這是一個(gè)臨時(shí)的HTTP狀態(tài)碼,比永久錯(cuò)誤要好。不過還是很糟糕。
與404(意味著頁面不存在)或403(拒絕訪問)不同,503告訴客戶:“我在這里,只是很忙。”服務(wù)器處理了請(qǐng)求,但無法完成。幕后出現(xiàn)了堵塞——可能是流量,可能是數(shù)據(jù)庫超時(shí),也可能是防火墻開始防御。
常見的罪魁禍?zhǔn)装ǎ?/span>
高流量激增壓垮了你的服務(wù)器資源
定期維護(hù)窗口(無論是否計(jì)劃中)
后端服務(wù)離線——數(shù)據(jù)庫、API、外部依賴
更新后服務(wù)器設(shè)置錯(cuò)誤
DDoS攻擊或惡意流量模式
過于激進(jìn)的防火墻規(guī)則阻止合法請(qǐng)求
503 服務(wù)不可用是 5xx HTTP 狀態(tài)碼家族的一部分。這些都是服務(wù)器端的問題。客戶端(瀏覽器、應(yīng)用、API)發(fā)送了一個(gè)完全有效的請(qǐng)求。網(wǎng)頁服務(wù)器接收并確認(rèn),但無法處理。
你會(huì)看到以下變體:
503 服務(wù) 不可用
錯(cuò)誤503 服務(wù)不可用
503號(hào)線暫時(shí)無法提供
HTTP 錯(cuò)誤 503
服務(wù)器暫時(shí)無法響應(yīng)您的請(qǐng)求
HTTP 服務(wù)器錯(cuò)誤 503
協(xié)議層面發(fā)生了什么:你的瀏覽器發(fā)送HTTP請(qǐng)求。Apache 或 NGINX 會(huì)接收到它。然后就出了問題——可能是 PHP-FPM 已經(jīng)滿載,MySQL 正在超時(shí),也許內(nèi)存泄漏在占用內(nèi)存。服務(wù)器不提供內(nèi)容,而是返回503響應(yīng)碼。
訪客可以嘗試刷新頁面或清除瀏覽器緩存。這有時(shí)有效。但作為網(wǎng)站的管理者,你需要真正的修復(fù)。
以下是有效的方法,按解決問題的可能性排序。從最上面開始。如果這還沒解決,就往下搬。
監(jiān)控服務(wù)器資源使用情況
首先:檢查你的服務(wù)器是否沒有CPU、內(nèi)存、磁盤空間或帶寬。服務(wù)器是有限制的。達(dá)到這些限制,就會(huì)出錯(cuò)。
登錄你的主機(jī)控制面板。關(guān)注資源使用指標(biāo)。你想看到的:
CPU 使用率隨時(shí)間變化
內(nèi)存消耗
剩余磁盤空間
帶寬限制
輸入輸出吞吐量
如果這些設(shè)備中的任何一個(gè)不斷達(dá)到極限,那你就找到了問題所在。要么優(yōu)化你正在運(yùn)行的設(shè)備,要么升級(jí)你的套餐。
在VPS或?qū)S梅?wù)器上,SSH登錄并執(zhí)行監(jiān)控命令:
TOP或HSOP用于實(shí)時(shí)過程監(jiān)控
VMSTAT用于內(nèi)存統(tǒng)計(jì)
df -h 用于檢查磁盤空間
看到某個(gè)進(jìn)程占用了90%的CPU?殺了它。用擊殺或擊殺。釋放那些資源。
驗(yàn)證服務(wù)器維護(hù)計(jì)劃
服務(wù)器維護(hù)是必要的。更新是有的。有時(shí)它們會(huì)自動(dòng)發(fā)生,你的網(wǎng)站會(huì)毫無預(yù)警地宕機(jī)。
許多網(wǎng)站主機(jī)會(huì)自動(dòng)更新WordPress、插件和主題。在這些更新期間,你的網(wǎng)站會(huì)返回503錯(cuò)誤,直到流程結(jié)束。請(qǐng)查看主機(jī)提供商的狀態(tài)頁面,查看定期維護(hù)情況。
如果你想避免意外宕機(jī),可以考慮關(guān)閉自動(dòng)更新。但你得負(fù)責(zé)保持所有問題的修補(bǔ)。安全漏洞不會(huì)等待。
更好的做法是:在計(jì)劃更新時(shí)啟用維護(hù)模式。放一個(gè)簡單的頁面,上面寫著“我們10分鐘后回來”。這樣可以防止訪客驚慌失措。
查看服務(wù)器日志中的錯(cuò)誤
服務(wù)器日志告訴你到底壞了什么。錯(cuò)誤日志記錄了失敗請(qǐng)求、PHP 警告、數(shù)據(jù)庫超時(shí)。先看那邊。
對(duì)于WordPress網(wǎng)站,請(qǐng)啟用調(diào)試模式。編輯你的wp-config.php文件并添加:
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
這會(huì)在 wp-content 中創(chuàng)建一個(gè) debug.log 文件。觸發(fā)錯(cuò)誤,然后檢查那個(gè)文件。你會(huì)看到PHP警告、插件沖突或API調(diào)用失敗。
對(duì)于更廣泛的PHP錯(cuò)誤,請(qǐng)?jiān)?/span>PHP配置中啟用錯(cuò)誤日志功能。然后檢查錯(cuò)誤日志文件——它的名字大概是error_log_yourdomain_com。
在VPS托管中,請(qǐng)直接查看網(wǎng)頁服務(wù)器日志:
NGINX:/var/log/nginx/error.log
阿帕奇語:/var/log/apache2/error.log
這些日志顯示缺失的文件、配置錯(cuò)誤的虛擬主機(jī)、模塊故障。Grep “503”,你就會(huì)找到問題所在。
重啟服務(wù)器或密鑰服務(wù)
有時(shí)候你只需要關(guān)掉再開啟。聽起來很傻——不過也許真的有效,原因如下。重啟會(huì)清除鎖死的文件、內(nèi)存泄漏和掛機(jī)進(jìn)程。你的服務(wù)器重新開始。
在共享主機(jī)上,你不能重啟整個(gè)服務(wù)器。不過,你可以通過控制面板停止和重啟特定進(jìn)程。找找重啟PHP、MySQL或Apache的選項(xiàng)。
在VPS上,你可以完全控制。重啟整個(gè)服務(wù)器,或者只重啟有問題的服務(wù)。
通過命令行重啟VPS:
sudo reboot
至少等兩分鐘讓它重新上線。
要重新啟用個(gè)人服務(wù):
sudo systemctl restart apache2
sudo systemctl restart nginx
sudo systemctl restart mysql
調(diào)整防火墻配置設(shè)置
網(wǎng)絡(luò)應(yīng)用防火墻保護(hù)您的服務(wù)器。它們還會(huì)導(dǎo)致假陽性。
過于嚴(yán)格的防火墻規(guī)則會(huì)阻斷合法流量。你的防火墻將普通請(qǐng)求視為威脅,返回503錯(cuò)誤。這種情況比你想象的要常見得多。
如果你懷疑防火墻有問題,可以暫時(shí)降低其安全級(jí)別或完全禁用它。測試一下你的網(wǎng)站是否能正常工作。如果有,那你就找到了罪魁禍?zhǔn)住?/span>
不要讓它被禁用。測試后重新啟用防火墻,然后調(diào)整規(guī)則,允許合法流量同時(shí)仍能阻擋攻擊。
如果你用的是像Cloudflare這樣的第三方CDN,可以查看他們的儀表盤中的防火墻設(shè)置。你可能需要允許某些IP地址或調(diào)整速率限制。
在帶有UFW(Uncomplicated Firewall)的VPS上,你可以暫時(shí)禁用:
sudo ufw disable
測試你的網(wǎng)站。如果能用,說明防火墻在阻擋某些東西。重新啟用并調(diào)整規(guī)則:
sudo ufw enable
如果你需要徹底重新開始:
sudo ufw reset
調(diào)查近期代碼變更
你是不是剛剛更新了插件?安裝新主題?部署一些代碼?這大概就是導(dǎo)致它崩潰的原因。
插件經(jīng)常在WordPress中引發(fā)問題。它們消耗資源、相互沖突,或者代碼質(zhì)量差。如果503在安裝插件后立即啟動(dòng),請(qǐng)停用它。問題解決了。
不確定是哪個(gè)插件?全部禁用。如果錯(cuò)誤消失,就一個(gè)一個(gè)重新激活,直到找到麻煩制造者。
主題也會(huì)帶來問題。切換到默認(rèn)主題,比如《二十五》。如果這能解決503問題,說明你的主題有問題。
如果你最近部署了新代碼,回滾它。使用 Git 還原到最后一個(gè)工作提交:
git reset --hard [commit_hash]
git push --force
先在分級(jí)測試回滾。確保不會(huì)弄壞其他東西。
高流量會(huì)導(dǎo)致503錯(cuò)誤。服務(wù)器接收過多請(qǐng)求,但容量不足以處理。簡單的數(shù)學(xué)。
你可以用更多硬件來解決這個(gè)問題?;蛘吣憧梢月斆鞯靥幚斫煌?。
使用負(fù)載均衡器。將收到的請(qǐng)求分散到多個(gè)服務(wù)器。沒有單一服務(wù)器會(huì)被淹沒。你的網(wǎng)站在流量激增時(shí)依然能保持暢通。
部署CDN。內(nèi)容分發(fā)網(wǎng)絡(luò)會(huì)將你的靜態(tài)文件(圖片、CSS、JavaScript)緩存到全球各地的服務(wù)器上。訪客從離他們最近的服務(wù)器獲取內(nèi)容。你的主服務(wù)器處理的流量更少。
啟用自動(dòng)縮放。設(shè)置主機(jī),當(dāng)流量增加時(shí)自動(dòng)分配更多資源。流量下降時(shí),流量會(huì)縮減。你只為你用過的東西付費(fèi)。
優(yōu)化數(shù)據(jù)庫查詢。查詢慢會(huì)拖慢數(shù)據(jù)庫。審查并優(yōu)化它們。需要時(shí)添加索引。盡可能緩存查詢結(jié)果。
重新安排cron任務(wù)。后臺(tái)任務(wù)與用戶請(qǐng)求爭奪資源。在低流量時(shí)段運(yùn)行cron作業(yè)。當(dāng)服務(wù)員不忙于接待訪客時(shí),服務(wù)員可以處理這些。
503錯(cuò)誤為暫時(shí)性。這就是HTTP規(guī)范里說的。一旦根本問題解決,他們就會(huì)解決。
現(xiàn)實(shí)檢驗(yàn):“暫時(shí)”可以指五分鐘,也可以指五小時(shí)。這取決于壞了什么以及你修復(fù)的速度。
服務(wù)器過載?暫時(shí)的。流量下降或你增加資源時(shí),它會(huì)被清除。
維護(hù)窗口?暫時(shí)的。更新結(jié)束后,你的網(wǎng)站會(huì)恢復(fù)。
配置錯(cuò)誤?雖然暫時(shí),但不會(huì)自己好。你需要回滾更改或修復(fù)配置。
不要等它自己解決。你的網(wǎng)站每當(dāng)當(dāng)下線時(shí),你就會(huì)失去訪客和收入。解決它。
預(yù)防勝于排查故障。以下是防止503錯(cuò)誤發(fā)生的方法。
持續(xù)監(jiān)控服務(wù)器資源。設(shè)置當(dāng) CPU、內(nèi)存或磁盤空間達(dá)到 80% 時(shí)的警報(bào)。你會(huì)在問題出現(xiàn)之前看到它們導(dǎo)致停機(jī)。
實(shí)現(xiàn)負(fù)載均衡。將流量分散到多個(gè)服務(wù)器。一臺(tái)服務(wù)器會(huì)宕機(jī),其他服務(wù)器會(huì)接手。
使用CDN。將靜態(tài)內(nèi)容卸載到邊緣服務(wù)器。這樣可以減輕主服務(wù)器的負(fù)載。
優(yōu)化資源密集型流程。緩存數(shù)據(jù)庫查詢。優(yōu)化圖像。Minify、CSS和JavaScript。每一分努力都很重要。
啟用自動(dòng)縮放。在交通高峰時(shí)自動(dòng)添加資源。
合理安排背景任務(wù)。在流量低的時(shí)候運(yùn)行cron作業(yè)。不要讓他們和用戶請(qǐng)求競爭。
先測試階段更新。絕不要直接部署到生產(chǎn)環(huán)境。測試所有東西。如果在分期時(shí)壞了,制作過程中也會(huì)壞。
保持插件和主題的更新。但不是自動(dòng)的。查看發(fā)布說明。確保更新不會(huì)破壞任何東西。
503錯(cuò)誤有其他相關(guān)的。其他5xx的HTTP狀態(tài)碼,表示服務(wù)器存在問題。
502 錯(cuò)誤網(wǎng)關(guān)是指你的網(wǎng)絡(luò)服務(wù)器收到上游服務(wù)器的無效響應(yīng)。使用反向代理或負(fù)載均衡器時(shí)很常見。你的網(wǎng)頁服務(wù)器嘗試與其他服務(wù)器(比如 PHP-FPM 或后端 API)通信,結(jié)果會(huì)收到垃圾數(shù)據(jù)。
504網(wǎng)關(guān)超時(shí)發(fā)生在上游服務(wù)器響應(yīng)過長時(shí)。你的網(wǎng)頁服務(wù)器等待響應(yīng),達(dá)到超時(shí)限制后放棄。通常意味著你的后臺(tái)被拖慢了,或者無法訪問。
這三個(gè)錯(cuò)誤——502、503和504——都指向服務(wù)器端的問題。它們是暫時(shí)的。這些問題是可以修復(fù)的。但你得快點(diǎn)行動(dòng)。
會(huì)出現(xiàn)503服務(wù)不可用的錯(cuò)誤。你的服務(wù)器會(huì)被壓垮。維護(hù)工作會(huì)在錯(cuò)誤的時(shí)間進(jìn)行。插件會(huì)表現(xiàn)異常。
關(guān)鍵是你修復(fù)的速度。監(jiān)控資源。查查日志。重新開始服務(wù)?;貪L糟糕的更改。并且建立系統(tǒng),防止類似情況再次發(fā)生。
你的服務(wù)器不是魔法。這是一臺(tái)有極限的機(jī)器。尊重這些限制,圍繞它們做計(jì)劃,你就能少花時(shí)間盯著503錯(cuò)誤看。
Copyright ? 2013-2020. All Rights Reserved. 恒訊科技 深圳市恒訊科技有限公司 粵ICP備20052954號(hào) IDC證:B1-20230800.移動(dòng)站


