記一次安裝Nginx+php-fpm安裝后無法解析.php文件,狀態碼200,但顯示空白頁


安裝環境:

Nginx:Nginx1.12.2

PHP:PHP 7.2

系統:CentOS 7.4

安裝方式:

Nginx與PHP都是yum安裝的,具體步驟:

1.安裝epel源再安裝Nginx:

rpm -Uvh https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm
~]# yum install -y nginx

2.安裝PHP epel源再yum安裝php7.2與相關依賴包

rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
yum install -y yum install php72w-common php72w-fpm php72w-opcache php72w-gd php72w-mysqlnd php72w-mbstring php72w-pecl-redis php72w-pecl-memcached php72w-devel

3.修改Nginx配置,將收到的以.php結尾的文件轉發至php-fpm解析,最初的配置如下:

location ~ .php$ { #匹配規則
  fastcgi_pass   127.0.0.1:9000; #交由fastcgi(php-fpm)處理
  fastcgi_index  index.php;
  include        fastcgi_params;
}

在加完這個配置后,自動Nginx和php-fpm發現都沒有報錯,在網頁根目錄創建index.php文件

<?php phpinfo(); ?>

訪問時確出現了問題,狀態碼為200,但沒有頁面顯示。

將Nginx配置修改后:

location ~ .php$ {
  fastcgi_pass   127.0.0.1:9000;
  fastcgi_index  index.php;
  fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name; #加了這一項
  include        fastcgi_params;
}

重啟Nginx和php-fpm后便能正常顯示php頁面了。后來將 include fastcgi_params; 這一項刪掉保留上一項,發現php網頁也顯示空白頁。

在查閱資料后大致原因是:在Nginx+php-fpm的組合中,Nginx將php交由php-fpm處理時需要使用 fastcgi_params 中的內建參數來解析處理請求。

安裝完成Nginx后會自動生成 fastcgi_params 文件。

查看Nginx中 fastcgi_params 的具體參數:

[root@localhost ~]# cat /etc/nginx/fastcgi_params

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;

原來在yum安裝Nginx后默認配置中並沒有 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 這一項,而這一項的意思是指腳本文件請求的路徑,也就是說當訪問127.0.0.1/index.php的時候,需要讀取網站根目錄下面的index.php文件,如果沒有配置這一配置項時,nginx不回去網站根目錄下訪問.php文件,所以返回空白

所以若默認 fastcgi_params 中若有 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 參數,則在Nginx配置中只需要加 include fastcgi_params; 這一項即可;若默認配置中沒有則可以單獨加上。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM