D5-Nginx_conf 与 Php-fpm_conf
1 nginx.conf
- 1.1 nginx 主配置文件
- $ cat nginx.conf
- user www www;
- worker_processes 2;
- error_log /usr/local/nginx/logs/nginx_error.log crit;
- pid /usr/local/nginx/logs/nginx.pid;
- worker_rlimit_nofile 65535;
- events
- {
- use epoll;
- worker_connections 65535;
- }
- http
- {
- include mime.types;
- default_type application/octet-stream;
- charset utf8;
- server_tokens off;
- server_name_in_redirect off;
- server_names_hash_bucket_size 128;
- client_header_buffer_size 32k;
- large_client_header_buffers 4 32k;
- client_max_body_size 8m;
- sendfile on;
- tcp_nopush on;
- tcp_nodelay on;
- keepalive_timeout 60;
- fastcgi_connect_timeout 300;
- fastcgi_send_timeout 300;
- fastcgi_read_timeout 300;
- fastcgi_buffer_size 64k;
- fastcgi_buffers 4 64k;
- fastcgi_busy_buffers_size 128k;
- fastcgi_temp_file_write_size 128k;
- gzip on;
- gzip_min_length 1k;
- gzip_buffers 4 16k;
- gzip_http_version 1.0;
- gzip_comp_level 2;
- gzip_types text/plain application/x-javascript text/css application/xml;
- gzip_vary on;
- #limit_zone crawler 10m;
- log_format access '$remote_addr - $remote_user [$time_local] "$request" '
- '$status $body_bytes_sent "$http_referer" '
- '"$http_user_agent" $http_x_forwarded_for';
- server
- {
- listen 0.0.0.0:80;
- server_name check.test.com;
- index index.html index.htm index.php;
- #autoindex on;
- #autoindex_localtime on;
- root /usr/local/nginx/html/;
- access_log /usr/local/nginx/logs/access.log access;
- }
- include vhosts/*;
- }
- 1.2 虚拟主机配置文件
- $ cat vhosts/www.test.com
- server {
- listen 0.0.0.0:80;
- server_name www.test.com;
- index index.html index.htm index.php;
- root /var/www/html/www;
- location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
- {
- expires 300d;
- }
- error_page 404 = /404.html;
- location ~ \.(js|css|htm|html|shtml)$
- {
- expires 60m;
- }
- access_log /var/log/httpd/www/access.log access;
- }
- $ cat vhosts/bbs.test.com
- server
- {
- listen 0.0.0.0:80;
- server_name bbs.test.com forum.test.com;
- index index.shtml index.php index.html;
- root /var/www/html/bbs;
- location ~ .*\.(php|php5)?$
- {
- fastcgi_pass 127.0.0.1:9000;
- fastcgi_index index.php;
- fastcgi_param SCRIPT_FILENAME /var/www/html/bbs$fastcgi_script_name;
- include fastcgi_params;
- }
- location ^~ /iso/
- {
- proxy_pass http://192.168.57.71/iso/;
- }
- location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
- {
- expires 300d;
- }
- location ~ .*\.(js|css)?$
- {
- expires 60m;
- }
- access_log /var/log/httpd/bbs/access.log access;
- }
- $ cat vhosts/blog.test.com
- server
- {
- listen 0.0.0.0:80;
- server_name blog.test.com t.test.com;
- index index.shtml index.php index.html;
- root /var/www/html/blog;
- location ~ .*\.(php|php5)?$
- {
- fastcgi_pass 127.0.0.1:9000;
- fastcgi_index index.php;
- fastcgi_param SCRIPT_FILENAME /var/www/html/blog$fastcgi_script_name;
- include fastcgi_params;
- }
- location ^~ /iso/
- {
- proxy_pass http://192.168.57.71/iso/;
- }
- location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
- {
- expires 300d;
- }
- location ~ .*\.(js|css)?$
- {
- expires 60m;
- }
- access_log /var/log/httpd/blog/access.log access;
- }
2 php-fpm.conf
- $ grep -Ev '^$|^;|^ ' /usr/local/php/etc/php-fpm.conf (1GB 内存)
- [global]
- pid = run/php-fpm.pid
- error_log = log/php-fpm.log
- log_level = notice
- [www]
- listen = 127.0.0.1:9000
- user = www
- group = www
- pm = static
- pm.max_children = 35
- pm.start_servers = 20
- pm.min_spare_servers = 5
- pm.max_spare_servers = 35
- pm.max_requests = 500
以下摘自
http://os.51cto.com/art/201111/304577.htm
php-fpm对于进程的管理存在两种风格static和dynamic,和之前的版本的进程管理其实还是一样的,只是将apache-like改成了dynamic这样更容易理解;
如果设置成static php-fpm进程数自始至终都是pm.max_children指定的数量,不再增加或减少;
如果设置成dynamic 则php-fpm进程数是动态的,最开始是pm.start_servers指定的数量,如果请求较多则会自动增加;
保证空闲的进程数不小于pm.min_spare_servers,如果进程数较多也会进行相应清理,保证多余的进程数不多于 pm.max_spare_servers。
这两种不同的进程管理方式,可以根据服务器的实际需求来进行调整。
这里先说一下涉及到这个的几个参数,他们分别是pm、pm.max_children、pm.start_servers、pm.min_spare_servers和pm.max_spare_servers;
pm表示使用那种方式,有两个值可以选择,就是static(静态)或者dynamic(动态),在更老一些的版本中dynamic被称作apache-like;
这个要注意看配置文件的说明。下面4个参数的意思分别为:
pm.max_children:静态方式下开启的php-fpm进程数量;
pm.start_servers:动态方式下的起始php-fpm进程数量;
pm.min_spare_servers:动态方式下的最小php-fpm进程数量;
pm.max_spare_servers:动态方式下的最大php-fpm进程数量。
如果dm设置为static,那么其实只有pm.max_children这个参数生效,系统会开启设置数量的php-fpm进程;
如果dm设置为 dynamic,那么pm.max_children参数失效,后面3个参数生效;
系统会在php-fpm运行开始 的时候启动pm.start_servers个php-fpm进程,然后根据系统的需求动态;
在pm.min_spare_servers和 pm.max_spare_servers之间调整php-fpm进程数。
那么,对于我们的服务器,选择哪种执行方式比较好呢?事实上跟Apache一样,运行的PHP程序在执行完成后,或多或少会有内存泄露的问题;
这也是为什么开始的时候一个php-fpm进程只占用3M左右内存,运行一段时间后就会上升到20-30M的原因了。
对于内存大的服务器(比如8G以上)来说,指定静态的max_children实际上更为妥当,因为这样不需要进行额外的进程数目控制,会提高效率;
因为频繁开关php-fpm进程也会有时滞,所以内存够大的情况下开静态效果会更好;
数量也可以根据 内存/30M 得到,比如8GB内存可以设置为100,那么php-fpm耗费的内存就能控制在 2G-3G的样子;
如果内存稍微小点,比如1G,那么指定静态的进程数量更加有利于服务器的稳定,这样可以保证php-fpm只获取够用的内存;
将不多的 内存分配给其他应用去使用,会使系统的运行更加畅通。
对于小内存的服务器来说,比如256M内存的VPS,即使按照一个20M的内存量来算,10个php-cgi进程就将耗掉200M内存;
那系统的崩 溃就应该很正常了,因此应该尽量地控制php-fpm进程的数量,大体明确其他应用占用的内存后,给它指定一个静态的小数量;
会让系统更加平稳一些或者使用动态方式,因为动态方式会结束掉多余的进程,可以回收释放一些内存;
所以推荐在内存较少的服务器或VPS上使用具体最大数量根据 内存/20M 得到。
比如说512M的VPS,建议pm.max_spare_servers设置为20,至于pm.min_spare_servers,则建议根据服务器的负载情况来设置,比较合适的值在5~10之间.
#update 20130210 512MB的VPS
- awk '! /^$|^;|^ /' /usr/local/php/etc/php-fpm.conf
- [global]
- pid = run/php-fpm.pid
- error_log = log/php-fpm.log
- ;log_level = notice
- emergency_restart_threshold = 10
- emergency_restart_interval = 1m
- [www]
- user = www
- group = www
- listen = 127.0.0.1:9000
- listen.owner = www
- listen.group = www
- listen.mode = 0666
- pm = dynamic
- pm.max_children = 20
- pm.start_servers = 5
- pm.min_spare_servers = 5
- pm.max_spare_servers = 15
- pm.max_requests = 1024
- slowlog = var/log/php-fpm.log.slow
- request_slowlog_timeout = 20
- request_terminate_timeout = 60s
- rlimit_files = 65535
- rlimit_core = 0
详细的php-fpm.conf 配置参数
- FPM 配置文件为php-fpm.conf,其语法类似 php.ini 。
- 全局配置段([global])
- pid string
- PID文件的位置. 默认为空.
- error_log string
- 错误日志的位置. 默认: 安装路径#INSTALL_PREFIX#/log/php-fpm.log.
- log_level string
- 错误级别. 可用级别为: alert(必须立即处理), error(错误情况), warning(警告情况), notice(一般重要信息), debug(调试信息). 默认: notice.
- emergency_restart_threshold int
- 如果子进程在emergency_restart_interval设定的时间内收到该参数设定次数的SIGSEGV 或者 SIGBUS退出信息号,则FPM会重新启动。 0 表示 '关闭该功能'. 默认值: 0 (关闭).
- emergency_restart_interval mixed
- emergency_restart_interval用于设定平滑重启的间隔时间. 这么做有助于解决加速器中共享内存的使用问题. 可用单位: s(秒), m(分), h(小时), 或者 d(天). 默认单位: s(秒). 默认值: 0 (关闭).
- process_control_timeout mixed
- 设置子进程接受主进程复用信号的超时时间. 可用单位: s(秒), m(分), h(小时), 或者 d(天) 默认单位: s(秒). 默认值: 0.
- daemonize boolean
- 设置FPM在后台运行. 设置 'no' 将 FPM 保持在前台运行用于调试. 默认值: yes.
- 运行配置区段([www])
- 在FPM中,可以使用不同的设置来运行多个进程池。 这些设置可以针对每个进程池单独设置。
- listen string
- 设置接受FastCGI请求的地址. 可用格式为: 'ip:port', 'port', '/path/to/unix/socket'. 每个进程池都需要设置.
- listen.backlog int
- 设置 listen(2) 的半连接队列长度. '-1' 表示无限制. 默认值: -1.
- listen.allowed_clients string
- 设置允许连接到FastCGI的服务器IPV4地址. 等同于PHP FastCGI (5.2.2+)中的 FCGI_WEB_SERVER_ADDRS环境变量. 仅对TCP监听起作用. 每个地址是用逗号分隔. 如果没有设置或者为空,则允许任何服务器请求连接. 默认值: any.
- listen.owner string
- 如果使用,表示设置Unix套接字的权限. 在Linux中,读写权限必须设置,以便用于WEB服务器连接. 在很多BSD派生的系统中可以忽略权限允许自由连接. 默认值: 运行所使用的用户合租, 权限为0666.
- listen.group string
- 参见 listen.owner.
- listen.mode string
- 参见 listen.owner.
- user string
- FPM 进程运行的Unix用户. 必须设置.
- group string
- FPM 进程运行的Unix用户组. 如果没有设置,则默认用户的组被使用.
- pm string
- 设置进程管理器如何管理子进程. 可用值: static, dynamic. 必须设置.
- static - 子进程的数量是固定的 (pm.max_children).
- dynamic - 子进程的数量在下面配置的基础上动态设置: pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers.
- pm.max_children int
- 子进程的数量,pm 设置为 static 时表示创建的, pm 设置为 dynamic 时表示最大可创建的. 必须设置.
- 该选项设置可以同时提供服务的请求数限制. 类似 Apache 的 mpm_prefork 中 MaxClients 的设置和 普通PHP FastCGI中的 PHP_FCGI_CHILDREN 环境变量.
- pm.start_servers in
- 设置启动时创建的子进程数目. 仅在 pm 设置为 dynamic 时使用. 默认值: min_spare_servers + (max_spare_servers - min_spare_servers) / 2.
- pm.min_spare_servers int
- 设置空闲服务进程的最低数目. 仅在 pm 设置为 dynamic 时使用. 必须设置.
- pm.max_spare_servers int
- 设置空闲服务进程的最大数目. 仅在 pm 设置为 dynamic 时使用. 必须设置.
- pm.max_requests int
- 设置每个子进程重生之前服务的请求数. 对于可能存在内存泄漏的第三方模块来说是非常有用的. 如果设置为 '0' 则一直接受请求. 等同于 PHP_FCGI_MAX_REQUESTS 环境变量. 默认值: 0.
- pm.status_path string
- FPM状态页面的网址. 如果没有设置, 则无法访问状态页面. 默认值: none.
- ping.path string
- FPM监控页面的ping网址. 如果没有设置, 则无法访问ping页面. 该页面用于外部检测FPM是否存活并且可以响应请求. 请注意必须以斜线开头 (/).
- ping.response string
- 用于定义ping请求的返回相应. 返回为 HTTP 200 的 text/plain 格式文本. 默认值: pong.
- request_terminate_timeout mixed
- 设置单个请求的超时中止时间. 该选项可能会对php.ini设置中的'max_execution_time'因为某些特殊原因没有中止运行的脚本有用. 设置为 '0' 表示 'Off'. Available
- units: s(econds)(default), m(inutes), h(ours), or d(ays). Default value: 0.
- request_slowlog_timeout mixed
- 当一个请求该设置的超时时间后,就会将对应的PHP调用堆栈信息完整写入到慢日志中. 设置为 '0' 表示 'Off'. 可用单位: s(秒)(默认), m(分), h(小时), 或者 d(天). 默认值: 0.
- slowlog string
- 慢请求的记录日志. 默认值: #INSTALL_PREFIX#/log/php-fpm.log.slow.
- rlimit_files int
- 设置文件打开描述符的rlimit限制. 默认值: 系统定义值.
- rlimit_core int
- 设置核心rlimit最大限制值. 可用值: 'unlimited' 、0或者正整数. 默认值: 系统定义值.
- chroot string
- 启动时的Chroot目录. 所定义的目录需要是绝对路径. 如果没有设置, 则chroot不被使用.
- chdir string
- 设置启动目录,启动时会自动Chdir到该目录. 所定义的目录需要是绝对路径. 默认值: 当前目录,或者/目录(chroot时).
- catch_workers_output boolean
- 重定向运行过程中的stdout和stderr到主要的错误日志文件中. 如果没有设置, stdout 和 stderr 将会根据FastCGI的规则被重定向到 /dev/null . 默认值: 空.
注意:
request_terminate_timeout = 30
#表示等待30秒后,结束那些没有自动结束的php脚本,以释放占用的资源。
php.ini里面的max_execution_time 也需要调整
结束
更多请:
linux 相关 37275208
vmware 虚拟化相关 166682360
本文转自 dongnan 51CTO博客,原文链接:http://blog.51cto.com/dngood/947595