设为首页 收藏本站
查看: 785|回复: 0

[经验分享] D5-Nginx_conf 与 Php-fpm_conf

[复制链接]

尚未签到

发表于 2018-11-10 14:25:06 | 显示全部楼层 |阅读模式
  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



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-633350-1-1.html 上篇帖子: 启动nginx服务提示98: Address already in use 下篇帖子: nginx日志不记录及日志切割
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表