nginx多個虛擬主機noinputfilespecified

科技小先鋒發表於2017-11-16
今天配置nginx rewrite 的時候遇到一個問題,就是訪問伺服器的是時候提示 No input file
specified.訪問PHP,訪問php就沒有事,可以正常訪問。猜想可能是php-cgi的問題吧,google 了一
下,果然問題出現在這裡。

網上提供的解決方法:

1、 php.ini(/usr/local/php/etc/php.ini)的配置中這兩項

cgi.fix_pathinfo=1  (這個是自己新增的)

doc_root=

 2、nginx配置檔案/usr/local/nginx/conf/nginx.conf 中注意以下部分

location ~ .php$ {

                fastcgi_pass   127.0.0.1:9000;

                fastcgi_index  index.php;

                fastcgi_param  SCRIPT_FILENAME  /var/www/www.abc.com/
$fastcgi_script_name;

                include               fastcgi_params;

        }

紅字部分是虛擬主機的根目錄。然後重啟 php-fpm 和nginx

 我只實踐了第二種方法,方法如下:

為 abc.com 建立一個 fastcgi_params 配置檔案

vim /usr/local/nginx/conf/abc_fcgi.conf

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;

fastcgi_param  SERVER_SOFTWARE    nginx;

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_FILENAME    /var/www/www.abc.com/$fastcgi_script_name;
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  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;

紅色部分根據自己需要新增。

abc.com   虛擬主機配置檔案

vim /usr/local/nginx/conf/abc.conf

server

  {

     listen      80;

     server_name  abc.com  www.abc.com;

     index index.html index.htm index.php;

     root  /var/www/www.abc.com;

     include /var/www/www.abc.com/.htaccess;

    location ~ .*.(php|php5)?$

    {

          #fastcgi_pass  unix:/tmp/php-cgi.sock;

          fastcgi_pass  127.0.0.1:9000;

          fastcgi_index index.php;

         include abc_fcgi.conf;

     }

    location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$

   {

        expires      30d;

   }

   location ~ .*.(js|css)?$

   {

      expires      1h;

   }

   error_page  404  =  /404.gif;

   log_format  88  `$remote_addr – $remote_user [$time_local] “$request” `

                     `$status $body_bytes_sent “$http_referer” `

                     `”$http_user_agent” $http_x_forwarded_for`;

   access_log  logs/88_log  88;

}

其實還有一種解決辦法就是很浪費資源,就是拷貝多個 php-fpm.conf 檔案,每個域名一個,開啟不
同的埠,每個配置檔案都要新增不同的目錄.

例如 abc.com  123.com 兩個站點

cp /usr/local/php/etc/php-fpm.conf  /usr/local/php/etc/abc.com.conf

cp /usr/local/php/etc/php-fpm.conf  /usr/local/php/etc/123.com.conf

先修改 abc.com 虛擬主機

找到php_defines,在下面新增

<value name=”open_basedir”>/var/www/www.abc.com:/tmp:/var/tmp</value>

然後修改埠

<value name=”listen_address”>127.0.0.1:9001</value>

修改 123.com 虛擬主機

找到php_defines,在下面新增

<value name=”open_basedir”>/var/www/www.123.com:/tmp:/var/tmp</value>

然後修改埠

<value name=”listen_address”>127.0.0.1:9002</value>

 最後修改啟動指令碼:

vim /usr/local/php/sbin/php-fpm

註釋掉原來的 #$php_fpm_BIN –fpm $php_opts,田間

 $php_fpm_BIN –fpm –fpm-config /usr/local/php/etc/www.abc.com.conf

 $php_fpm_BIN –fpm –fpm-config /usr/local/php/etc/www.123.com.conf

 啟動服務

 #/usr/local/php/sbin/php-fpm restart

 修改  nginx.conf 不同的虛擬主機對應不同的 php-fpm 埠,這樣就不會造成No input file
specified
本文轉自Deidara 51CTO部落格,原文連結:http://blog.51cto.com/deidara/300916,如需轉載請自行聯絡原作者


相關文章