建站技術網專注分享網站建設技術,網站建設教程,真正幫你學會做網站技術,輕松解決網站建設過程中遇到的常見問題,為廣大站長服務。 網站地圖 | 收藏本站 | 訂閱
域名投資,就來找米網,認準網址:www.zhaomi.cc 專業仿站,就到仿站網:www.fangzhan.org
  站內公告: ·帝國cms教程內容已更新,歡迎關注     ·建站技術網采用阿里云服務器,備案已通    
您當前的位置:建站技術網 > 服務器教程 > linux教程

Nginx出現500 Internal Server Error 錯誤的解決方案

時間:2019-03-02 11:01:27  來源:網絡收集  整理: 建站技術網 www.txwlqq.com     點擊:1次

  Nginx出現500 Internal Server Error 錯誤的解決方案

  6500(服務器內部錯誤) 服務器遇到錯誤,無法完成請求。

  501(尚未實施) 服務器不具備完成請求的功能。例如,當服務器無法識別請求方法時,服務器可能會返回此代碼。

  502(錯誤網關) 服務器作為網關或代理,從上游服務器收到了無效的響應。

  503(服務不可用) 目前無法使用服務器(由于超載或進行停機維護)。通常,這只是一種暫時的狀態。

  504(網關超時) 服務器作為網關或代理,未及時從上游服務器接收請求。

  505(HTTP 版本不受支持) 服務器不支持請求中所使用的 HTTP 協議版本。

  Nginx 500錯誤(Internal Server Error 內部服務器錯誤):500錯誤指的是服務器內部錯誤,也就是服務器遇到意外情況,而無法履行請求。

  在高并發連接的情況下,Nginx是Apache服務器不錯的替代品。Nginx同時也可以作為7層負載均衡服務器來使用。根據測試結果,Nginx 0.6.31 + PHP 5.2.6 (FastCGI) 可以承受3萬以上的并發連接數,相當于同等環境下Apache的10倍。

  但很多人用 Nginx 的時候都會出現 500 錯誤,根據我使用的情況來看,有以下幾種情況。

  1、是否磁盤空間不足?

  使用 df -k 查看硬盤空間是否滿了。清理硬盤空間就可以解決500錯誤。nginx如果開啟了access log,在不需要的情況下,最好關閉access log。access log會占用大量硬盤空間。

  2、nginx配置文件錯誤?

  這里不是指語法錯誤,nginx如果配置文件有語法錯誤,啟動的時候就會提示。當配置rewrite的時候,有些規則處理不當會出現500錯誤,請仔細檢查自己的rewrite規則。如果配置文件里有些變量設置不當,也會出現500錯誤,比如引用了一個沒有值的變量。

  3、如果上面的問題都不存在可能是模擬的并發數太多了,需要調整一下nginx.conf的并發設置數

  4、還有就是Linux索引節點(inode)用滿導致故障的,df -i

inode是什么?

  理解inode,要從文件儲存說起。

  文件儲存在硬盤上,硬盤的最小存儲單位叫做"扇區"(Sector)。每個扇區儲存512字節(相當于0.5KB)。

  操作系統讀取硬盤的時候,不會一個個扇區地讀取,這樣效率太低,而是一次性連續讀取多個扇區,即一次性讀取一個"塊"(block)。
這種由多個扇區組成的"塊",是文件存取的最小單位。"塊"的大小,最常見的是4KB,即連續八個 sector組成一個 block。

  文件數據都儲存在"塊"中,那么很顯然,我們還必須找到一個地方儲存文件的元信息,比如文件的創建者、文件的創建日期、文件的大小等等。
這種儲存文件元信息的區域就叫做inode,中文譯名為"索引節點"。

  最近網站編輯反應上傳圖片失敗,網站頁面也經常500錯誤

  


  常規500錯誤查找http://www.cnblogs.com/hiit/p/8568480.html找了一圈發現配置沒問題。

  查看了nginx error錯誤日志發現磁盤空間滿了

  


  用df -h命令查看了一下磁盤使用情況,發現空間還有剩余。

  


  發現問題:后來用df -i查看了一下索引節點(inode),發現已經用滿(IUsed=100%),導致系統無法創建新目錄和文件。

  


  解決方法:刪除無用的臨時文件,釋放inode。

  可以查看 /tmp 目錄下有很多臨時文件。

  也可以選擇/var/spool/目錄

  輸入一下命令查看/var/spool/下的文件個數

  1for i in /var/spool/; do echo $i; find $i |wc -l|sort -nr; done

  


  看到有200多萬文件

  cd /var/spool/clientmqueue/ 進入這個目錄,刪掉這些沒用的文件,查看一下,60萬文件吧,文件太多,

  于是就用到了這個命令:

  1

  1ls | xargs rm -rf

  2或者這個命令

  1find . -name "*" | xargs rm -rf

  可以分批的處理刪除文件,如下圖是刪除后的效果:inode使用21%。好了

  


  就是因為垃圾文件長時間沒清理,導致清理文件花太多的時間,為了避免該類問題,最好對系統的垃圾文件進行定時清理,或者部署監視系統。

  可以根據較大目錄的文件占用情況,臨時轉移部分文件到占用磁盤較小的目錄中。

  inode譯成中文就是索引節點,每個存儲設備(例如硬盤)或存儲設備的分區被格式化為文件系統后,應該有兩部份,一部份是inode,另一部份是Block,Block是用來存儲數據用的。而inode呢,就是用來存儲這些數據的信息,這些信息包括文件大小、屬主、歸屬的用戶組、讀寫權限等。inode為每個文件進行信息索引,所以就有了inode的數值。操作系統根據指令,能通過inode值最快的找到相對應的文件。 而服務器的Block雖然還有剩余,但inode已經用滿,因此在創建新目錄或文件時,系統提示磁盤空間不足。

  一般分析思路:

  (1)查看nginx error log ,查看php error log

  nginx 錯誤日志 error.log 默認位置:/usr/local/nginx/logs

  (2)如果是too many open files,修改nginx的worker_rlimit_nofile參數,使用ulimit查看系統打開文件限制,修改/etc/security/limits.conf

  (3)如果是腳本的問題,則需要修復腳本錯誤,并優化代碼

  (4)各種優化都做好,還是出現too many open files,那就要考慮做負載均衡,把流量分散到不同服務器上去了。

解決方法是:

  1 打開/etc/security/limits.conf文件,加上兩句

  復制代碼代碼如下:

  * soft nofile 65535

  * hard nofile 65535

  2 打開/etc/nginx/nginx.conf

  在worker_processes的下面增加一行

  復制代碼代碼如下:

  worker_rlimit_nofile 65535;

  3 重新啟動nginx,重新載入設置

  復制代碼代碼如下:

  kill -9 `ps -ef | grep php | grep -v grep | awk '{print $2}'`

  /usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 100 -u www-data -f /usr/bin/php-cgi

  killall -HUP nginx

  重啟后再看nginx的錯誤日志,也沒有發現500報錯的情況了。

  4、有可能是數據庫問題我的在nginx日志php日志都沒有發現什么問題, 最后發現數據庫訪問不了,修正后問題解決。

  如果按上述方法仍然解決不了問題,就可能是配置或是程序有錯誤了。

  1 查看nginx的錯誤日志,找到可能的原因。

  如果提示某些兒PHP擴展沒有安裝,則去php.ini中打開對應該的擴展或是安裝對應該的擴展,重啟nginx和php-fpm,再次刷新頁面。

  2 如果數據庫連接有問題,也可能會出現500錯誤,不過日志中一定會體現的

  在日志中提示相應的數據庫連接有問題了,就要去查看數據庫連接是否正確。根據日志,修改對應該的文件,數據庫問題解決后,頁面即恢復正常。

標簽:
文章標題:Nginx出現500 Internal Server Error 錯誤的解決方案
文章網址:http://www.txwlqq.com/fuwuqiJiaocheng/linux/8677.html
上一篇:linux上如何刪除文件名亂碼的文件
下一篇:返回列表
來頂一下
返回首頁
返回首頁
相關文章
推薦資訊
如何通過SEO優化排名賺錢?SEO賺錢方法
如何通過SEO優化排名賺
seo優化教程:網站seo內容優化
seo優化教程:網站seo
SEO細節:企業SEO如何快速為新站做出效果
SEO細節:企業SEO如何
電商技術將如何發展?2018年有這五個大膽預測
電商技術將如何發展?
最新文章
欄目更新
欄目熱門
成人黄色