欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

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

程序员文章站 2022-04-21 22:31:07
...

前文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