- 錯誤型別:
- HTTP錯誤
- 錯誤名稱:
- 500内部服务器错误
- 英文名稱:
- 500 Internal Server Error
- 錯誤描述:
- WordPress中的500内部服务器错误可能由多种原因引起。如果您遇到这种情况,很有可能是以下一个(或多个)因素导致了问题。
可怕的500內部伺服器錯誤(500 Internal Server Error)。它似乎總是在最不合時宜的時候出現,而您突然之間爭先恐後地想辦法讓您的WordPress網站重新上線。相信我們,我們都去過那裡。您可能還見過的其他行為類似的錯誤包括建立資料庫連線錯誤和可怕的死亡白屏。但是從您的網站出現故障的那一刻起,您就會失去訪問者和客戶。更不用說它看起來對您的品牌不利。
今天,我們將深入探討500內部伺服器錯誤,並引導您通過一些方法讓您的網站快速恢復線上。閱讀下面的更多資訊,瞭解導致此錯誤的原因以及您可以採取哪些措施來防止將來出現此錯誤。
500內部伺服器錯誤(最常見的原因):
WordPress中的500內部伺服器錯誤可能由多種原因引起。如果您遇到這種情況,很有可能是以下一個(或多個)因素導致了問題:
- 瀏覽器快取。
- 資料庫登入憑據不正確。
- 損壞的資料庫。
- WordPress安裝中的檔案損壞。
- 您的資料庫伺服器的問題。
- 損壞的WordPress核心檔案。
- 第三方外掛和主題的問題。
- 第三方外掛的PHP超時或致命的PHP錯誤。
- 錯誤的檔案和資料夾許可權。
- 您的伺服器上已用盡的PHP記憶體限制
- 損壞的.htaccess 檔案。
- CGI和 Perl指令碼錯誤。
什麼是500內部伺服器錯誤?
IETF將500內部伺服器錯誤定義為:
500(內部伺服器錯誤)狀態程式碼表示伺服器遇到了阻止其完成請求的意外情況。
當您訪問網站時,您的瀏覽器會向託管該網站的伺服器傳送請求。伺服器接受此請求,對其進行處理,然後將請求的資源(PHP、HTML、CSS 等)連同HTTP標頭一起發回。HTTP還包括他們所謂的HTTP狀態程式碼。狀態程式碼是一種通知您請求狀態的方式。它可能是200狀態程式碼,表示“一切正常”或500狀態程式碼,表示出現問題。
有很多不同型別的500個狀態錯誤程式碼(500的501,502,503,504等),都意味著不同的東西。在這種情況下,500內部伺服器錯誤表示伺服器遇到了阻止其完成請求的意外情況 (RFC7231,第 6.6.1 節)。
WordPress網站遭遇500內部伺服器錯誤
500內部伺服器錯誤變體
由於Web伺服器、作業系統和瀏覽器的不同,500內部伺服器錯誤可能會以多種不同的方式出現。但他們都在傳達同樣的事情。以下只是您可能在網路上看到的眾多不同變體中的幾個:
-
- “500 Internal Server Error”
- “HTTP 500”
- “Internal Server Error”
- “HTTP 500 – Internal Server Error”
- “500 Error”
- “HTTP Error 500”
- “500 – Internal Server Error”
- “500 Internal Server Error. Sorry something went wrong.”
- “500. That’s an error. There was an error. Please try again later. That’s all we know.”
- “The website cannot display the page – HTTP 500.”
- “Is currently unable to handle this request. HTTP ERROR 500.”
您可能還會看到此訊息隨附:
伺服器遇到內部錯誤或配置錯誤,無法完成您的請求。請聯絡伺服器管理員webmaster@domain.com並告知他們錯誤發生的時間,以及您可能執行的任何可能導致錯誤的操作。伺服器錯誤日誌中可能提供有關此錯誤的更多資訊。
內部伺服器錯誤
其他時候,您可能只會看到一個空白的白色螢幕。在處理500內部伺服器錯誤時,這實際上在Firefox和Safari等瀏覽器中很常見。
Firefox中的500內部伺服器錯誤
大品牌甚至可能有自己的自定義500內部伺服器錯誤訊息,例如來自Airbnb的這條訊息。
Airbnb 500內部伺服器錯誤
這是來自readme的另一個創造性的500伺服器錯誤示例。
readme網站500內部伺服器錯誤
即使是強大的YouTube也無法避免500內部伺服器錯誤。
YouTube上的500內部伺服器錯誤
如果它是IIS 7.0 (Windows) 或更高版本的伺服器,它們有額外的HTTP狀態程式碼來更準確地指示500錯誤的原因:
- 500.0 – 發生模組或ISAPI錯誤。
- 500.11 – Web伺服器上的應用程式正在關閉。
- 500.12 – 應用程式正忙於在Web伺服器上重新啟動。
- 500.13 – Web伺服器太忙。
- 500.15 – 不允許直接請求global.asax。
- 500.19 – 配置資料無效。
- 500.21 – 無法識別模組。
- 500.22 – ASP.NET httpModules配置不適用於託管管道模式。
- 500.23 – ASP.NET httpHandlers配置不適用於託管管道模式。
- 500.24 – ASP.NET模擬配置不適用於託管管道模式。
- 500.50 – 在RQ_BEGIN_REQUEST通知處理期間發生重寫錯誤。發生配置或入站規則執行錯誤。
- 500.51 – 在GL_PRE_BEGIN_REQUEST通知處理期間發生重寫錯誤。發生全域性配置或全域性規則執行錯誤。
- 500.52 – 在RQ_SEND_RESPONSE通知處理期間發生重寫錯誤。發生出站規則執行。
- 500.53 – 在RQ_RELEASE_REQUEST_STATE通知處理期間發生重寫錯誤。發生出站規則執行錯誤。該規則配置為在輸出使用者快取更新之前執行。500.100 – 內部ASP錯誤。
500錯誤對SEO的影響
與503錯誤不同,後者用於WordPress維護模式並告訴Google稍後再檢查,如果不立即修復,500錯誤可能會對SEO產生負面影響。如果您的網站僅關閉了10分鐘,並且它一直被抓取很多次,則抓取工具只會從快取中獲取頁面。或者谷歌甚至可能沒有機會在它備份之前重新抓取它。在這種情況下,您完全沒問題。
但是,如果站點長時間關閉,例如6個小時以上,那麼Google可能會將500錯誤視為需要解決的站點級別問題。這可能會影響您的排名。如果您擔心重複500錯誤,您應該弄清楚為什麼會發生這些錯誤。下面的一些解決方案可以提供幫助。
如何修復500內部伺服器錯誤
當您在WordPress網站上看到500內部伺服器錯誤時,您應該從哪裡開始進行故障排除?有時您甚至可能不知道從哪裡開始。通常500錯誤是在伺服器本身,但根據我們的經驗,這些錯誤源於兩件事,第一是使用者錯誤(客戶端問題),第二是伺服器有問題。所以我們將深入探討兩者。
檢視這些常見原因和修復500內部伺服器錯誤的方法,並立即恢復執行。
1. 嘗試重新載入頁面
這對某些人來說似乎有點明顯,但是當遇到500內部伺服器錯誤時,您應該嘗試的最簡單和首要的事情之一就是等待一分鐘左右,然後重新載入頁面(F5或Ctrl + F5)。可能是主機或伺服器過載,站點會立即恢復。在等待期間,您也可以快速嘗試不同的瀏覽器以排除該問題。
您可以做的另一件事是將該網站貼上到downforeveryoneorjustme.com中。該網站會告訴您該網站是否已關閉或是否對您有問題。像這樣的工具檢查從伺服器返回的HTTP狀態程式碼。如果它不是200“一切正常”,那麼它將返回一個向下的指示。
downforeveryoneorjustme網站
我們還注意到,有時這會在您更新WordPress網站上的外掛或主題後立即發生。通常這是在未正確設定的主機上。發生的事情是他們之後會遇到臨時超時。但是,事情通常會在幾秒鐘內自行解決,因此您只需重新整理即可。
2. 清除瀏覽器快取
在深入除錯站點之前,清除瀏覽器快取始終是另一個很好的故障排除步驟。以下是有關如何清除各種瀏覽器中的快取的說明:
- 如何強制重新整理所有瀏覽器的單個頁面
- 如何清除 Google Chrome 的瀏覽器快取
- 如何清除 Mozilla Firefox 的瀏覽器快取
- 如何清除 Safari 的瀏覽器快取
- 如何清除 Internet Explorer 的瀏覽器快取
- 如何清除 Microsoft Edge 的瀏覽器快取
- 如何清除 Opera 的瀏覽器快取
3. 檢查您的伺服器日誌
您還應該利用您的錯誤日誌。如果您是寶塔面板客戶,則可以在寶塔麵包你儀表盤的安全管理中的Web日誌管理輕鬆檢視錯誤。這可以幫助您快速縮小問題的範圍,特別是如果它是由您網站上的外掛引起的。
檢查錯誤日誌中的500內部伺服器錯誤
如果您的主機沒有日誌記錄工具,您還可以通過將以下程式碼新增到wp-config.php檔案來啟用日誌記錄來啟用WordPress除錯模式:
define( 'WP_DEBUG', true ); define( 'WP_DEBUG_LOG', true ); define( 'WP_DEBUG_DISPLAY', false );
日誌通常位於/wp-content目錄
WordPress錯誤日誌資料夾 (SFTP)
您還可以檢視Apache和Nginx中的日誌檔案,它們通常位於此處:
- Apache: /var/log/apache2/error.log
- Nginx: /var/log/nginx/error.log
如果由於PHP致命錯誤而顯示500錯誤,您還可以嘗試啟用PHP錯誤報告。只需將以下程式碼新增到引發錯誤的檔案中即可。通常,您可以在Google Chrome DevTools的控制檯選項卡中縮小檔案範圍。
ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL);
您可能還需要使用以下內容修改php.ini檔案:
display_errors = on
4. 建立資料庫連線時出錯
500內部伺服器錯誤也可能由資料庫連線錯誤引起。根據您的瀏覽器,您可能會看到不同的錯誤。但無論在您的伺服器日誌中,兩者都會生成500 HTTP狀態程式碼。
以下是“建立資料庫連線時出錯”訊息與瀏覽器相似的示例。整個頁面是空白的,因為無法檢索資料來呈現頁面,因為連線工作不正常。這不僅會破壞您網站的前端,還會阻止您訪問WordPress儀表盤。
建立資料庫連線錯誤示例
那麼究竟為什麼會發生這種情況呢?好吧,以下是一些常見的原因。
- 最常見的問題是您的 資料庫登入憑據不正確。您的 WordPress 站點使用單獨的登入資訊連線到其MySQL資料庫。
- 您的WordPress資料庫已損壞。有這麼多帶有主題、外掛和使用者不斷刪除和安裝它們的活動部件,有時資料庫會損壞。這可能是由於表丟失或個別損壞,或者某些資訊可能被意外刪除。
- 您的WordPress安裝中可能有損壞的檔案。由於黑客,有時甚至會發生這種情況。
- 您的資料庫伺服器的問題。Web主機端的許多事情可能是錯誤的,例如資料庫因流量高峰而過載或因併發連線過多而無響應。這實際上對於共享主機很常見,因為它們為同一伺服器上的許多使用者使用相同的資源。
檢視我們關於如何修復WordPress網站建立資料庫連線的錯誤的深入文章。
5. 檢查你的外掛和主題
第三方外掛和主題很容易導致500內部伺服器錯誤。很多時候,您應該在安裝新內容或執行更新後立即看到錯誤。這就是為什麼我們總是建議使用暫存環境進行更新或至少一個一個地執行更新的原因之一。否則,如果您遇到500內部伺服器錯誤,您會突然爭先恐後地找出是哪個錯誤造成的。
解決此問題的幾種方法是停用所有外掛。請記住,如果您只是停用外掛,您不會丟失任何資料。如果您仍然可以訪問您的管理員,一個快速的方法是瀏覽到“外掛”並從批量操作選單中選擇“停用”。這將禁用您的所有外掛。
停用所有外掛
如果這解決了問題,您將需要找到罪魁禍首。開始一一啟用它們,每次啟用後重新載入站點。當您看到500內部伺服器錯誤返回時,您就發現了行為不端的外掛。然後,您可以聯絡外掛開發人員尋求幫助或在WordPress外掛庫中釋出技術支援留言。
如果您無法登入WordPress管理盤,您可以通過FTP進入您的伺服器並將您的外掛資料夾重新命名為 plugins_old 之類的名稱。然後再次檢查您的網站。如果它有效,那麼您將需要一個一個地測試每個外掛。將您的外掛資料夾重新命名回“plugins”,然後將每個外掛資料夾一一重新命名,直到找到為止。您也可以先嚐試在臨時站點上覆制此內容。
重新命名外掛資料夾
始終確保您的外掛、主題和WordPress核心是最新的。並檢查以確保您執行的是受支援的PHP版本。如果結果證明與外掛中的錯誤程式碼有衝突,您可能需要找技術人員協助解決問題。
6. 重新安裝WordPress核心
有時WordPress核心檔案可能會損壞,尤其是在舊站點上。在不影響外掛或主題的情況下重新上傳WordPress核心實際上很容易。我們有一個深入的指南,其中包含5種不同的方法來重新安裝WordPress。當然,請確保在繼續之前進行備份。跳到以下部分之一:
- 如何在保留現有內容的同時從WordPress儀表盤重新安裝WordPress
- 如何在保留現有內容的同時通過FTP手動重新安裝 WordPress
- 如何在保留現有內容的同時通過WP-CLI手動重新安裝 WordPress
7. 許可權錯誤
伺服器上的檔案或資料夾的許可權錯誤也可能導致發生500內部伺服器錯誤。以下是有關WordPress中檔案和資料夾許可權的一些典型許可權建議:
- 所有檔案都應該是644 (-rw-r–r–) 或640。
- 所有目錄都應該是755 (drwxr-xr-x) 或750。
- 任何目錄都不應該被賦予777,即使是上傳目錄。
- 強化: wp-config.php也可以設定為440或400以防止伺服器上的其他使用者讀取它。
有關 更深入的解釋,請參閱有關更改檔案許可權的WordPress Codex文章 。
您可以使用FTP客戶端輕鬆檢視您的檔案許可權(如下所示)。您還可以聯絡您的WordPress主機支援團隊,並要求他們快速獲取資料夾和檔案的GREP檔案許可權,以確保它們設定正確。
檔案許可權SFTP
8. PHP記憶體限制
耗盡伺服器上的PHP記憶體限制也可能導致500內部伺服器錯誤。您可以嘗試增加限制。請按照以下說明更改cPanel、Apache、php.ini檔案和wp-config.php
檔案中的此限制。
增加cPanel中的PHP記憶體限制
如果您在使用cPanel的主機上執行,則可以從 UI 輕鬆更改此設定。在“軟體”下單擊“選擇PHP版本”。
選擇PHP版本
單擊“切換到PHP選項”。
檔案許可權SFTP
然後,您可以單擊該memory_limit
屬性並更改其值。然後點選“儲存”。
增加cPanel中的PHP記憶體限制
增加Apache中的PHP記憶體限制
.htaccess
檔案是一個特殊的隱藏檔案,其中包含可用於修改伺服器行為的各種設定,一直到目錄特定級別。首先通過FTP或SSH登入您的站點,檢視您的根目錄,看看那裡是否有.htaccess
檔案。
.htaccess檔案
如果有,您可以編輯該檔案以新增必要的程式碼以增加PHP記憶體限制。很可能設定在64M或以下,您可以嘗試增加此值。
php_value memory_limit 128M
增加php.ini檔案中的PHP記憶體限制
如果上述方法對您不起作用,您可以嘗試編輯您的php.ini
檔案。通過FTP或SSH登入到您的站點,轉到站點的根目錄並開啟或建立一個php.ini
檔案。
php.ini檔案
如果檔案已經存在,請搜尋三個設定並在必要時修改它們。如果您剛剛建立了檔案,或者找不到設定,您可以貼上下面的程式碼。您當然可以修改這些值以滿足您的需要。
memory_limit = 128M
某些共享主機可能還要求您在.htaccess
檔案中新增 suPHP 指令以使上述php.ini
檔案設定生效。為此,請編輯.htaccess
同樣位於站點根目錄下的檔案,並將以下程式碼新增到檔案頂部:
<IfModule mod_suphp.c> suPHP_ConfigPath /home/yourusername/public_html </IfModule>
如果上述方法對您不起作用,則可能是您的主機鎖定了全域性設定,而是將其配置為使用.user.ini
檔案。要編輯您的.user.ini
檔案, 請通過FTP或SSH登入到您的站點,轉到您站點的根目錄並開啟或建立一個.user.ini
檔案。然後,您可以貼上以下程式碼:
memory_limit = 128M
在wp-config.php中增加PHP記憶體限制
最後一個選項,如果所有其他方法都失敗了,您可以試一試。首先,通過FTP或SSH登入到您的站點,然後找到您的wp-config.php檔案,該檔案通常位於您站點的根目錄中。
wp-config.php檔案
將以下程式碼新增到wp-config.php
檔案的頂部:
define('WP_MEMORY_LIMIT', '128M');
您還可以詢問您的主機是否遇到記憶體限制問題。你也可以使用New Relic和其他故障排除方法來幫助客戶縮小可能會耗盡限制的外掛、查詢或指令碼的範圍。您還可以使用您自己的自定義New Relic金鑰。
使用New Relic除錯
9. .htaccess檔案的問題
如果您使用的是執行Apache的WordPress主機,則很可能您的.htaccess
檔案有問題或已損壞。按照以下步驟從頭開始重新建立一個新的。
首先,通過FTP或SSH登入到您的站點,並將您的.htaccess
檔案重新命名為.htaccess_old
.
重新命名 .htaccess檔案
通常要重新建立此檔案,您只需在WordPress中重新儲存固定連結即可。但是,如果您遇到500內部伺服器錯誤,您很可能無法訪問您的WordPress管理員,因此這不是一個選項。因此,您可以建立一個新.htaccess
檔案並輸入以下內容。然後將其上傳到您的伺服器。
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress
有關更多示例,請參閱WordPress Codex,例如multisite的預設.htaccess
檔案。
10. CGI/Perl指令碼中的編碼或語法錯誤
由CGI和Perl中的錯誤引起的500錯誤比以前少了很多。雖然還是值得一提的,尤其是對於那些使用cPanel的人來說,那裡還有很多一鍵CGI指令碼還在使用。正如Stack Overflow上的AEM所說:
CGI已經被各種各樣的Web程式設計技術所取代,包括PHP、各種Apache擴充套件(如mod_perl)、各種風格的Java和框架(包括Java EE、Struts、Spring等),基於Python的框架(如Django、Ruby on Rails等)其他Ruby框架和各種Microsoft技術。
以下是使用CGI指令碼時的一些提示:
- 編輯時,始終使用純文字編輯器,例如Atom、Sublime或Notepad++。這確保它們保持ASCII格式。
- 確保chmod 755的正確許可權用於CGI指令碼和目錄。
- 將ASCII模式的CGI指令碼(可以在FTP編輯器中選擇)上傳到伺服器上的cgi-bin目錄中。
- 確認您的指令碼所需的Perl模組已安裝並受支援。
11. 伺服器問題(請諮詢您的主機)
最後,由於PHP超時或第三方外掛的致命PHP錯誤也可能導致500內部伺服器錯誤,因此您可以隨時檢視您的WordPress主機。有時,如果沒有專家,這些錯誤可能很難解決。以下是一些常見錯誤示例,這些錯誤會在伺服器上觸發500 HTTP狀態程式碼,可能會讓您摸不著頭腦。
PHP message: PHP Fatal error: Uncaught Error: Call to undefined function mysql_error()... PHP message: PHP Fatal error: Uncaught Error: Cannot use object of type WP_Error as array in /www/folder/web/shared/content/plugins/plugin/functions.php:525
PHP超時也可能由於缺少PHP工作器而發生,儘管通常這些會導致504錯誤,而不是500錯誤。這些決定了您的站點在給定時間可以處理的併發請求數。簡而言之,您網站的每個未快取請求都由PHP Worker處理。
當PHP工作人員已經在站點上忙碌時,他們開始建立佇列。一旦達到PHP工作執行緒的限制,佇列就會開始推出較舊的請求,這可能會導致500錯誤或不完整的請求。
監控您的網站
如果您擔心將來在您的網站上發生這些型別的錯誤,您還可以使用updown.io之類的工具 來監控並在發生時立即通知您。它會定期向您選擇的URL傳送HTTP HEAD請求。您可以簡單地使用您的主頁。該工具允許您設定以下檢查頻率:
- 15 秒
- 30秒
- 1分鐘
- 2分鐘
- 5分鐘
- 10分鐘
如果您的網站出現故障,它會向您傳送一封電子郵件。下面是一個例子。
500錯誤的電子郵件通知
如果您正在嘗試除錯有問題的外掛或在共享主機上,這些主機往往會使伺服器過度擁擠,這將特別有用。這可以讓您證明您的網站實際上可能關閉的頻率(即使是在半夜)。
小結
500內部伺服器錯誤總是令人沮喪,但希望現在您知道了一些其他方法來解決這些錯誤,以快速使您的站點恢復執行。請記住,這些型別的錯誤通常是由第三方外掛、致命的PHP錯誤、資料庫連線問題、.htaccess檔案或PHP記憶體限制問題以及有時PHP超時引起的。
評論留言