secce 发表于 2018-11-10 14:25:06

D5-Nginx_conf 与 Php-fpm_conf

  D5-Nginx_conf 与 Php-fpm_conf
  1 nginx.conf
  


[*]1.1 nginx 主配置文件
[*]$ cat nginx.conf
[*]userwww www;
[*]worker_processes 2;
[*]error_log/usr/local/nginx/logs/nginx_error.logcrit;
[*]pid      /usr/local/nginx/logs/nginx.pid;
[*]worker_rlimit_nofile 65535;
[*]
[*]events
[*]{
[*]use epoll;
[*]worker_connections 65535;
[*]}
[*]
[*]http
[*]{
[*]include       mime.types;
[*]default_typeapplication/octet-stream;
[*]charsetutf8;
[*]
[*]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_nopushon;
[*]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_length1k;
[*]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_zonecrawler    10m;
[*]
[*]log_formataccess'$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_namecheck.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.logaccess;
[*]}
[*]include vhosts/*;
[*]}
[*]
[*]1.2 虚拟主机配置文件
[*]$ cat vhosts/www.test.com
[*]server {
[*]      listen       0.0.0.0:80;
[*]      server_namewww.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_namebbs.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_nameblog.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 内存)
[*]
[*]pid = run/php-fpm.pid
[*]error_log = log/php-fpm.log
[*]log_level = notice
[*]
[*]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
[*]
[*]pid = run/php-fpm.pid
[*]error_log = log/php-fpm.log
[*];log_level = notice
[*]emergency_restart_threshold = 10
[*]emergency_restart_interval = 1m
[*]
[*]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 。
[*]
[*]全局配置段()
[*]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.
[*]
[*]
[*]运行配置区段()
[*]在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


页: [1]
查看完整版本: D5-Nginx_conf 与 Php-fpm_conf