nginx環境thinkphp,500錯誤

來源:互聯網
上載者:User
今天吧網站放到nginx下centos環境,程式是thinkphp3.2的,首頁能正常顯示,內鏈所有都是500錯誤,貼出配置代碼和錯誤記錄檔,求解決方案!!

server {    listen       80;    server_name  此處網站網域名稱;    root   /usr/local/www/web/go;    location / {    root   /usr/local/www/web/go;    index index.php index.html index.htm;        if (!-e $request_filename) {        rewrite ^(.*)$ /index.php/$1 last;        break;    }            error_page   500 502 503 504  /50x.html;        location = /50x.html {            root   /usr/share/nginx/html;        }        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000        location ~ .php$ {        root   /usr/local/www/web/go;            fastcgi_pass   127.0.0.1:9000;            fastcgi_index  index.php;            #定義變數 $path_info ,用於存放pathinfo資訊                set $path_info "";                #定義變數 $real_script_name,用於存放真真實位址                set $real_script_name $fastcgi_script_name;                #如果地址與引號內的Regex匹配                if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {                        #將檔案地址賦值給變數 $real_script_name                        set $real_script_name $1;                        #將檔案地址後的參數賦值給變數 $path_info                        set $path_info $2;                }                #配置fastcgi的一些參數                fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;                fastcgi_param SCRIPT_NAME $real_script_name;                fastcgi_param PATH_INFO $path_info;                #fastcgi_param  SCRIPT_FILENAME  /usr/local/www/web/go$fastcgi_script_name;                include        fastcgi_params;        }      }      }


nginx日誌:

[root@VM_161_64_centos nginx]# 29068#0: *41 rewrite or internal redirection cycle while processing "/index.php//index.php//index.php//index.php//index.php//index.php//index.php//index.php//index.php//index.php//index.php//index.php/home/user/register.html", client: 這裡IP, server: 這裡網域名稱, request: "GET /index.php/home:Q


回複討論(解決方案)

codeigniter在nginx下配置
應該也適用 thinkphp,你對比一下

server {       listen  80;       server_name     www.phpno.com;       root /home/www/www_phpno_com/admin_wwwroot;       access_log off;       error_page 404  /404.html;       location /404.html {               root /home/www/www_phpno_com/admin_wwwroot;       }       location /{               index index.html index.htm index.php;               if (-e $request_filename) {                       break;               }               if (!-e $request_filename) {                       rewrite ^/(.*)$ /index.php/$1 last;                       break;               }       }        location ~ .+\.php($|/) {           root           /home/www/www_phpno_com/admin_wwwroot;           fastcgi_index index.php;           fastcgi_split_path_info ^(.+\.php)(.*)$;           fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;           fastcgi_param   PATH_INFO               $fastcgi_path_info;           fastcgi_param   PATH_TRANSLATED $document_root$fastcgi_path_info;           fastcgi_pass   127.0.0.1:9000;       #    fastcgi_index  index.php;       #    fastcgi_param  SCRIPT_FILENAME  /home/www/www_phpno_com/admin_wwwroot/$fastcgi_script_name;       #    fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html/$fastcgi_script_name;           include        fastcgi_params;       }   }

codeigniter在nginx下配置
應該也適用 thinkphp,你對比一下
[code=text]server {
listen 80;
server_name 網域名稱;
root /usr/local/www/web/go;

location / {
index index.php index.html index.htm;
if (-e $request_filename) {
break;
}
if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php/$1 last;
break;
}

error_page 500 502 503 504 /50x.html;

location = /50x.html {
root /usr/share/nginx/html;
}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ .php$ {
root /usr/local/www/web/go;
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;

#配置fastcgi的一些參數
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}

}

}


改成這樣了,還是500呢,需要改哪裡呀?

1# 正解啊
你的問題就是偽靜態問題,改正確了,就OK了

看一下伺服器錯誤日誌

1、確認不是 nginx 照成的。可用一個簡單的程式測試一下
2、開啟 php 的錯誤顯示功能,看看是否有錯誤資訊輸出
3、據說較高版本的 preg_replace_callback 存在嚴重記憶體泄露問題,而 thinkphp3.2 恰恰要用到

1、確認不是 nginx 照成的。可用一個簡單的程式測試一下
2、開啟 php 的錯誤顯示功能,看看是否有錯誤資訊輸出
3、據說較高版本的 preg_replace_callback 存在嚴重記憶體泄露問題,而 thinkphp3.2 恰恰要用到


我首頁能顯示啊,首頁是php程式啊,開啟了右小角的那個調試,點擊內鏈,就不見了。就是500

1# 正解啊
你的問題就是偽靜態問題,改正確了,就OK了


重點是哪裡,我改不對啊?

清空 Runtime 目錄再試

出現 500 錯誤就表示你的程式有問題(當然也可能是其他方面的問題,但首先檢查的是你的程式)
你不肯開啟錯誤顯示功能,那如何能知道問題出在哪裡?
就算是算命,不也要你的生辰八字嗎?

#rewrite ^(.*)$ /index.php/$1 last;
rewrite ^/subdir/(.*)$ /subdir/index.php/$1;
歸神 我改了這行 現在500 變成404了 = =

清空 Runtime 目錄再試

出現 500 錯誤就表示你的程式有問題(當然也可能是其他方面的問題,但首先檢查的是你的程式)
你不肯開啟錯誤顯示功能,那如何能知道問題出在哪裡?
就算是算命,不也要你的生辰八字嗎?


等我找找PHP 裝哪裡了 = =

phpinfo()
不就看到 php.ini 在哪裡了嗎

phpinfo()
不就看到 php.ini 在哪裡了嗎


error_reporting = E_ERROR
display_errors = On
開了這2個然後service nginx restart
還是輸出404啊,沒有輸出錯誤,我要去看日誌?還是重啟PHP?

phpinfo()
不就看到 php.ini 在哪裡了嗎



[23-Jul-2014 08:33:51] PHP Notice: Undefined index: SCRIPT_NAME in /usr/local/www/erp/ThinkPHP/ThinkPHP.php on line 82
[23-Jul-2014 09:06:15] PHP Notice: Undefined index: SCRIPT_NAME in /usr/local/www/erp/ThinkPHP/ThinkPHP.php on line 82
[23-Jul-2014 10:05:53] PHP Notice: Undefined index: SCRIPT_NAME in /usr/local/www/erp/ThinkPHP/ThinkPHP.php on line 82
[23-Jul-2014 10:09:42] PHP Notice: Undefined index: SCRIPT_NAME in /usr/local/www/erp/ThinkPHP/ThinkPHP.php on line 82
[23-Jul-2014 10:22:08] PHP Warning: phpinfo(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Chongqing' for 'CST/8.0/no DST' instead in /usr/local/www/web/dolanne/go/info.php on line 2
[23-Jul-2014 10:28:04] PHP Warning: phpinfo(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Chongqing' for 'CST/8.0/no DST' instead in /usr/local/www/web/dolanne/go/info.php on line 2

PHP Notice: Undefined index: SCRIPT_NAME in /usr/local/www/erp/ThinkPHP/ThinkPHP.php on line 82
$_SERVER['SCRIPT_NAME'] 不存在,不知道他們是怎麼測試的!
在 入口檔案開始處
$_SERVER['SCRIPT_NAME'] = $_SERVER['PHP_SELF'];

PHP Warning: phpinfo(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Chongqing' for 'CST/8.0/no DST' instead in /usr/local/www/web/dolanne/go/info.php on line 2
你沒有設定時區,按他的提示設定一下就好了

500 變成 404
不是進步而是退步!
404 是找不到目標頁,顯然是你重寫指錯了地方
500 是被執行的程式出現了問題,而又未能返回錯誤資訊。於是 nginx 就發 500錯,表示應用程式拒絕響應

500 變成 404
不是進步而是退步!
404 是找不到目標頁,顯然是你重寫指錯了地方
500 是被執行的程式出現了問題,而又未能返回錯誤資訊。於是 nginx 就發 500錯,表示應用程式拒絕響應


好吧 弄成500,再看下日誌

500 變成 404
不是進步而是退步!
404 是找不到目標頁,顯然是你重寫指錯了地方
500 是被執行的程式出現了問題,而又未能返回錯誤資訊。於是 nginx 就發 500錯,表示應用程式拒絕響應



現在回到發帖的時候狀態了 php日誌還是上面那些,nignx日誌就是發帖0樓的那些,腫麼辦

500 變成 404
不是進步而是退步!
404 是找不到目標頁,顯然是你重寫指錯了地方
500 是被執行的程式出現了問題,而又未能返回錯誤資訊。於是 nginx 就發 500錯,表示應用程式拒絕響應


哈哈哈哈 我自己搞定了、、、
  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.