• 技术文章 >php教程 >php手册

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

    2016-06-06 20:07:47原创913

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

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:Nginx PHP via php-fpm Ubuntu
    上一篇:php 编译安装imagick报错 wand/MagickWand.h:没有那个文件或目 下一篇:PHP Warning: PHP Startup: Unable to load dynamic l
    20期PHP线上班

    相关文章推荐

    精选22门好课,价值3725元,开通VIP免费学习!• 投票管理程序_php基础• php实现爬取和分析知乎用户数据,php• PHP数组和explode函数示例总结,数组explode• PHP实现多图片上传类实例• php实现保存submit内容之后禁止刷新
    1/1

    PHP中文网