網站出現 500 錯誤的常見原因
如果你是使用windows主機使用Plesk Obsidian 18控制台,當您瀏覽網站時看到「500 Internal Server Error」,這是一個非常籠統的錯誤訊息,代表伺服器端發生了問題,但具體原因不明。在 Windows Plesk 主機環境中,如果您的程式語法沒有明顯錯誤,這通常是因為程式的某些行為(例如特定的輸入字元、上傳動作或網址結構)被主機的 Web Application Firewall (WAF,通常是 ModSecurity) 判定為潛在威脅,進而將連線阻擋下來。要確認是否為此原因,我們必須查看 WAF 的紀錄。
步驟一:進入 Plesk 查看 Web Application Firewall
你可以這樣查看
1. 請先登入您的 Plesk 控制台。在首頁或「網站與網域 (Websites & Domains)」的頁面中,找到您發生問題的網域區塊。在該區塊的功能列表中,尋找一個盾牌圖示寫著「Web Application Firewall (ModSecurity)」。點擊該圖示進入設定與日誌頁面。
步驟二:下載與分析 Log 日誌檔案
進入 WAF 介面後,您通常會看到一個日誌 (Log) 列表或下載按鈕。下載該 Log 檔案後(通常是 .txt 或 .log 格式),您可以使用 Windows 內建的「記事本 (Notepad)」或「WordPad」開啟。
開啟後請搜尋以下關鍵字:
- Access denied with code 403/500: 尋找被拒絕的紀錄。
- Client IP: 確認該 IP 是否為您自己的 IP,以證實是您的連線被擋。
- Rule ID: 這是最關鍵的資訊。ModSecurity 會顯示觸發了哪一條規則 ID (例如:Rule ID 941100)。
後續處理建議
一旦您從日誌中找到了觸發錯誤的 Rule ID,您有兩種解決方式:
- 關閉特定規則 (較安全): 在 Plesk 的 WAF 設定頁面中,通常有一個欄位可以輸入「Security Rule IDs」來進行豁免 (Switch off security rules)。將您查到的 ID 輸入進去,即可讓該規則失效,而不影響其他安全防護。
- 修正程式碼 (最推薦): 了解該規則為何被觸發(例如:程式碼中包含了類似 SQL Injection 的字串),並修改您的程式寫法以符合安全規範。
常見問題 (FAQ)
Q1:什麼是ModSecurity?
ModSecurity 是一個開源的 Web 應用程式防火牆 (WAF),它可以即時監控 HTTP 流量,並阻擋惡意攻擊(如 SQL 注入、跨站腳本攻擊 XSS 等)。Plesk 內建此功能來保護您的網站安全。
Q2:如果我不想看日誌,可以直接關閉 WAF 嗎?
雖然可以直接將 WAF 模式切換為「Off (關閉)」,但強烈不建議這樣做。這會讓您的網站完全暴露在網路攻擊的風險中。建議採用「僅偵測 (Detection only)」模式進行測試,或針對特定 Rule ID 進行排除。
Q3:為什麼只有特定頁面會出現 500 錯誤?
這通常是因為該頁面的程式邏輯或傳送的資料特徵,剛好符合了某條 WAF 安全規則。例如,該頁面可能包含了一個表單,而您輸入的內容含有特殊符號,被誤判為攻擊代碼。
更多關於Plesk相關教學請參考:
Windows 虛擬主機 Plesk Obsidian 18 備份與還原完整圖文教學
Plesk Obsidian 18 開啟 ASP.NET 與 web.config 詳細錯誤訊息
Windows 虛擬主機 Plesk 工作排程教學:新手也能快速設定自動化任務
Plesk Obsidian 18 垃圾郵件殺手、郵件黑白名單設定全攻略
在 Windows 2019 的 Plesk 控制台查看 error_log 錯誤紀錄完整教學
文章來源 : https://wpoki.com

GIPHY App Key not set. Please check settings