今天配置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;
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 虚拟主机
<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,如需转载请自行联系原作者