最近上了一批debian7的机器,刚好有web项目要上,debian7中已经把php-fpm集成进去了,打算把以前的apache+mod_php模式换成nginx+php-fpm或者apache+php-fpm模式,apache毕竟模块多还更稳定一些。
1 nginx+php-fpm
安装nginx
apt-get install nginx安装php及php-fpm
apt-get install php5-mysql php5-gd php5-curl php5-cli php5-cgi php5-dev apt-get install php5-fpm配置php-fpm,php-fpm的主要配置文件在/etc/php5/fpm里面
├── conf.d -> ../conf.d php的扩展模块配置文件 ├── php-fpm.conf php-fpm的主配置文件,include了pool.d里面的conf文件 ├── php.ini php的配置文件 └── pool.d └── www.conf 影响web站点的php-fpm配置文件php-fpm.conf可以配置的选项不多,主要是设置日志级别,超时时间等等,很多都有默认值,其中主要的是www.conf这个文件,他会直接影响你的web站点的php解析。
下面看看默认的www.conf配置:
#设置一个名为www的池 [www] #user是必须设置的 user = www-data #如果没有设置group,默认使用user的group group = www-data #在哪个端口接收FastCGI请求,可以是socket或者端口 listen = /var/run/php5-fpm.sock #主进程管理子进程的模式,动态模式 pm = dynamic #可创建的最大子进程数 pm.max_children = 5 #fpm刚启动时创建的子进程数,默认min_spare_servers+(max_spare_servers- min_spare_servers)/2 pm.start_servers = 2 #可以空闲的最小服务进程 pm.min_spare_servers = 1 #可以空闲的最大服务进程 pm.max_spare_servers = 3 #chroot该目录 chdir = /
这些是安装完后的默认配置,还有很多选项虽然没有列出来,但是都有默认值的。如果在一台机器上部署多个应用,可以根据访问量,在pool.d中为各个应用配置不同的分配模式,能有效起到安全隔离效果。
配置nginx,nginx配置文件主要在/etc/nginx目录
├── conf.d ├── fastcgi_params #可以优化该文件 ├── koi-utf ├── koi-win ├── mime.types ├── naxsi_core.rules ├── naxsi.rules ├── nginx.conf ├── proxy_params ├── scgi_params ├── sites-available │ └── default ├── sites-enabled │ └── default -> /etc/nginx/sites-available/default #主要配置该文件 ├── uwsgi_params └── win-utfdefault文件配置:
upstream php { server unix:/var/run/php5-fpm.sock; } server { listen 80; root /usr/share/nginx/www; index index.php index.html; server_name 192.168.37.37; location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass php; fastcgi_index index.php; include fastcgi_params; } }
设置首页面
echo '<?php phpinfo(); ?>' > /usr/share/nginx/www/index.php启动php-fpm和nginx
/etc/init.d/nginx start /etc/init.d/php5-fpm start
2 apache+php-fpm
为什么用apache+php-fpm呢,稳定一些,经过大量用户考验的,如果不是为了高性能,而是为了稳定,也可以试试这个模式。在debian6中的php版本中,php官方已经把fpm集成进去了,但是debian因为种种原因并没有在debian6的php中集成fpm,不过在debian7中终于等到了...
安装apache2
apt-get install apache2 apache2-mpm-worker libapache2-mod-fastcgi
php及php-fpm已经在上一环节安装,所以不需要再次安装。
开启相关apache模块
a2enmod actions fastcgi alias
apache配置文件目录结构/etc/apache2
├── apache2.conf #主配置文件 ├── conf.d ├── envvars ├── magic ├── mods-available #总模块 ├── mods-enabled #启用模块 ├── ports.conf ├── sites-available #总站点 └── sites-enabled #启用站点,默认启用000-default000-default文件配置
<VirtualHost *:80> ServerAdmin webmaster@localhost ServerName 192.168.37.37 DocumentRoot /var/www <IfModule mod_fastcgi.c> AddHandler php5-fcgi .php Action php5-fcgi /php5-fcgi Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization </IfModule> <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log LogLevel warn CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
针对fcgi可做如下优化/etc/nginx/fastcgi_params:
fastcgi_connect_timeout 60; fastcgi_send_timeout 180; fastcgi_read_timeout 180; fastcgi_buffer_size 128k; fastcgi_buffers 256 4k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; fastcgi_intercept_errors on;
设置首页面/var/www/index.php
echo '<?php echo 'hello guol'; ?>' > /var/www/index.php启动apache和php-fpm
/etc/init.d/php5-fpm start /etc/init.d/apache2 restart