Nginx + PHP (via php-fpm) on Ubuntu 环境最佳实践12.04版

前文Nginx + PHP (via php-fpm) on Ubuntu 环境最佳实践大致提了Ubuntu下的Ngnx+Php环境,但随着时间推移,旧版本组件之间维护程度的不协调问题会越来越多。

PHP 5.4带来了很多改进,以往运行环境必须的优化在5.4后都不必要了。

安装

1
2
3
4
5
6
7
8
9
apt-get install python-software-properties
add-apt-repository ppa:ondrej/php5
 
apt-get update
apt-get install nginx
apt-get install php5-cgi php5-mysql php5-fpm php5-curl php5-mcrypt php-pear php5-gd php-apc
 
service nginx start
service php5-fpm start

配置

Nginx

upstream php {
        server unix:/var/run/php-fpm/php-fpm.sock;
        #server 127.0.0.1:9000;
}
 
server
{
        listen       80;
 
        index index.html index.htm index.php;
        server_name     site.com;
        root    /srv/http/pt-sites/wordpress;
 
        client_max_body_size 32m;
        client_body_buffer_size 128k;
        server_tokens off;
 
        location / {
            try_files $uri $uri/ /index.php?$args;
        }
 
        location ~ \.php$ {
              include fastcgi.conf;
              #fastcgi_param  HTTPS on;
              fastcgi_intercept_errors on;
              #fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name; #Ubuntu 版本的nginx不需要这句,但Fedora或者可能其他发行版的自带没有定义,会返回空白的php,需要这句。
              fastcgi_pass php;
        }
}

PHP

设置timezone

sed -i '/;date.timezone/adate.timezone = "Asia/Shanghai"\ndate.default_latitude = 31.5167\ndate.default_longitude = 121.4500' /etc/php5/fpm/php.ini

另可参考(php.ini):

post_max_size = 16M
upload_max_filesize = 16M

FPM

php5-fpm默认参数启动的服务器还是比较耗资源的,如果环境不充裕(如512内存以下的VPS),可以做下配置。

这个包的fpm的默认配置文件是/etc/php5/fpm/main.conf,但对子进程的配置是在其包含的/etc/php5/fpm/pool.d/目录内,里面有个www.conf,可以对以下的参数做以下修改:

pm = dynamic              ;动态管理php-fpm的子进程
pm.max_children = 5       ;最多的时候开不超过5个
pm.start_servers = 2      ;启动服务时候开2个
pm.min_spare_servers = 2  ;空闲时候最少留2个
pm.max_spare_servers = 5  ;最多留5个
pm.max_requests = 300     ;每个子进程最多处理300个请求就退出换新的子进程。

按需调整这些参数可以达到最佳动态分配资源的效果。

如果在一台机器上部署多个应用,可以根据访问量,在pool.d中为各个应用配置不同的分配模式,能有效起到安全隔离效果。(注意pool.d内的文件,除了文件名不一样,里面定义的中括号[Name]也需要不一样。)

Fastcgi

Fastcgi和nginx的通信参数,可做以下配置:

加入到:/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;

php-apc

因为PHP的设计问题,opcode缓冲对大流量APP来说是必不可少的,APC是不错的选择。但是默认参数似乎效果有问题(通过munin监控发现没有设置一下参数,几乎没有使用system-cache,统统都是miss,一加上就好了,估计是BUG)。

加入到 /etc/php5/conf.d/20-apc.ini

apc.enabled = 1
apc.shm_segments = 1
apc.shm_size = 64
apc.ttl=7200
apc.user_ttl=7200

参考:Nginx and PHP-FPM Configuration and Optimizing Tips and Tricks

文章分类 Unix/Linux, web技术 标签: , ,

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*