与Apache不同,Nginx不自带PHP模块,对于PHP的处理,需要转发给其他有PHP脚本处理能力的系统服务,包括可以的选择有apache,fastcgi等。
如果用Apache作为Nginx处理PHP的后端,可能有点大才效用,配置繁琐,系统资源占用会比较大。对于有洁癖的系统管理员可能更喜欢用fastcgi的方式配置Nginx的php后端。
下面记录了这种方式的配置方法,系统为Debian Linux。
首先安装nginx和php5-cgi,这两个必须的模块。
apt-get -y install nginx
apt-get -y install php5-cgi
vi /etc/php5/cgi/php.ini
#add:
cgi.fix_pathinfo = 1
vi /etc/init.d/php-fastcgi
#paste from init.d/php-fastcgi file
#注意,修改/usr/bin/php-cgi为/usr/bin/php5-cgi,否则加载不了zend
chmod 755 /etc/init.d/php-fastcgi
vi /etc/default/php-fastcgi
#paste from default/php-fastcgi file
重启php5-cgi
/etc/init.d/php-fastcgi stop
cat /var/run/php-fastcgi.pid, 然后杀死这个pid,然后再
/etc/init.d/php-fastcgi start
禁止 php5-cgi开机运行
vi /etc/default/php-fastcgi
START=no
/usr/bin/php5-cgi -v
可以看到zend optimizer加载了
#start php-fastcgi:
/etc/init.d/php-fastcgi start
ps ax | grep php 可以看到:
/usr/bin/php5-cgi -q -b localhost:9000
#To have php-fastcgi start at boot time, run
update-rc.d php-fastcgi defaults
#Configuring nginx
nginx上传附件大小限制:
server{中添加body size设置,默认是1M
client_max_body_size 100m;
client_body_timeout 300;
client_header_timeout 60; (这个不用了)
vi /etc/nginx/nginx.conf
设置以下参数
user www-data www-data;
worker_processes 5;
keepalive_timeout 30;
events {
use epoll;#Linux 下性能最好的 event 模式
worker_connections 2048;# 每个工作进程允许最大的同时连接数
}
http里面添加:
include /etc/nginx/sites-enabled/*;
把server{}拷贝出来放到虚拟主机目录下面default:
设置虚拟主机目录
mkdir /etc/nginx/sites-enabled/
cd sites-enabled
vi default
拷贝nginx.conf中的虚拟主机server过来
虚拟主机:
index index.php index.html index.htm;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_read_timeout 30;
#fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME /var/www/nginx-default$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
注意
$_SERVER["SERVER_NAME"]或getenv(’SERVER_NAME’)获取的始终将是Nginx server_name配置中的第一个域名,这一点在程序开发中需要注意。这第一个域名就相当于Apache虚拟主机配置中的ServerName,后面的域名就相当于Apache的ServerAlias。
vi /etc/nginx/fastcgi_params
添加这一 //暂时去掉,不管用
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
注意:
$document_root变量只有在location中设置了root才管用,否则默认是/usr/local/nginx/html
重启nginx
/etc/init.d/nginx restart
测试php
vi /var/www/nginx-default/info.php
<?php
phpinfo();
?>