1. 程式人生 > >tp5部署lnmp平臺解決方案,史詩級爬坑。

tp5部署lnmp平臺解決方案,史詩級爬坑。

用tp5.1做了和小專案,準備上線測試下,納尼,途中可謂艱辛,多次遇到500,502,404。用的是lnmp一鍵安裝的環境,爬坑途中發現原來作者考慮的夠多了,全是乾貨,感謝。

pathinfo問題

nginx 預設不支援pathinfo解析,需要自己配置,因為對nginx不太熟悉,自己配的漏洞百出,坑底半天沒出來,最後找到lnmp環境已經提供,直接上配置。

listen 18888;
index index.html index.htm index.php;
root  /home/wwwroot/tp5/public;

include enable-php-pathinfo.conf;
include thinkphp.conf;
  • 詳細配置

enable-php-pathinfo.conf

location ~ [^/]\.php(/|$)
{
    fastcgi_pass  unix:/tmp/php-cgi.sock; # 這個自己適配 不行的話用埠 127.0.0.1:9000
    fastcgi_index index.php;
    include fastcgi.conf;  # 後面有
    include pathinfo.conf;  # 後面有
}

thinkphp

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

還有 fast-cgi 和 pathinfo.conf

# fast-cgi
fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type
; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param REQUEST_SCHEME $scheme; fastcgi_param HTTPS $https if_not_empty; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; # PHP only, required if PHP was built with --enable-force-cgi-redirect fastcgi_param REDIRECT_STATUS 200; fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/:/tmp/:/proc/"; # 注意此處 待會有坑
# pathinfo.conf
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
set $path_info $fastcgi_path_info;
fastcgi_param PATH_INFO       $path_info;
try_files $fastcgi_script_name =404;

500 伺服器錯誤問題

此原因由於匯入出錯造成,而且白屏無錯誤提示,先在index.php里加上:


error_reporting(E_ALL);
ini_set('display_errors', '1');
scandir
然後發現:Fatal error: require(): Failed opening required。。。。,找資料得知發現是php open_basedir 配置的問題,php不能引入其授權目錄上級及其以上的檔案,預設配置在php.ini,一般都沒有設定,預設註釋。我們這裡選擇在fast-cgi中配置,當然在php.ini或者其他地方配置。注意到我上面的標的注意點。我們配置到public下,在require上級目錄時沒有許可權。
配置到其上級目錄。

fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/../:/tmp/:/proc/";

重啟或者重新載入,大工告成。終於可以看到頁面了。

其他

  • 遇到scandir函式不可用的問題,原因是將其禁用了,通過php.ini,將其刪除禁用即可。
    這裡寫圖片描述

  • 看到在php.ini中開啟cgi.fix_pathinfo=1,沒有測試是否有效,又不行的小夥伴可以改一下。

總結

在linux上許可權是個非常值得注意的問題,擁有這方面的思想和經驗很重要。最後小夥伴們記得每次修改配置後重啟或者重新載入配置哦,附上幾個常用的,類推哦。

nginx -s reload
/etc/init.d/nginx -s restart
service nginx reload