Nginx + PHP (via php-fpm) on Ubuntu 环境最佳实践12.04版
前文Nginx + PHP (via php-fpm) on Ubuntu 环境最佳实践大致提了Ubuntu下的Ngnx+Php环境,但随着时间推移,旧版本组件之间维护程度的不协调问题会越来越多。 PHP 5.4带来了很多改进,以往运行环境必须的优化在5.4后都不必要了。 安装 apt-get install python
前文Nginx + PHP (via php-fpm) on Ubuntu 环境最佳实践大致提了Ubuntu下的Ngnx+Php环境,但随着时间推移,旧版本组件之间维护程度的不协调问题会越来越多。
PHP 5.4带来了很多改进,以往运行环境必须的优化在5.4后都不必要了。
安装
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
原文地址:Nginx + PHP (via php-fpm) on Ubuntu 环境最佳实践12.04版, 感谢原作者分享。