D5-Nginx_conf 与 Php-fpm_conf

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

D5-Nginx_conf 与 Php-fpm_conf

1 nginx.conf

 
  1. 1.1 nginx 主配置文件
  2. $ cat nginx.conf 
  3. user  www www; 
  4. worker_processes 2; 
  5. error_log  /usr/local/nginx/logs/nginx_error.log  crit; 
  6. pid        /usr/local/nginx/logs/nginx.pid; 
  7. worker_rlimit_nofile 65535; 
  8.  
  9. events 
  10.   use epoll; 
  11.   worker_connections 65535; 
  12.  
  13. http 
  14.   include       mime.types; 
  15.   default_type  application/octet-stream; 
  16.   charset  utf8; 
  17.       
  18.   server_tokens off; 
  19.   server_name_in_redirect off; 
  20.   server_names_hash_bucket_size 128; 
  21.   client_header_buffer_size 32k; 
  22.   large_client_header_buffers 4 32k; 
  23.   client_max_body_size 8m; 
  24.       
  25.   sendfile on; 
  26.   tcp_nopush  on; 
  27.   tcp_nodelay on; 
  28.   keepalive_timeout 60; 
  29.   fastcgi_connect_timeout 300; 
  30.   fastcgi_send_timeout 300; 
  31.   fastcgi_read_timeout 300; 
  32.   fastcgi_buffer_size 64k; 
  33.   fastcgi_buffers 4 64k; 
  34.   fastcgi_busy_buffers_size 128k; 
  35.   fastcgi_temp_file_write_size 128k; 
  36.   gzip on; 
  37.   gzip_min_length  1k; 
  38.   gzip_buffers     4 16k; 
  39.   gzip_http_version 1.0; 
  40.   gzip_comp_level 2; 
  41.   gzip_types       text/plain application/x-javascript text/css application/xml; 
  42.   gzip_vary on; 
  43.   #limit_zone  crawler    10m; 
  44.  
  45.   log_format  access  '$remote_addr - $remote_user [$time_local] "$request" ' 
  46.                       '$status $body_bytes_sent "$http_referer" ' 
  47.                       '"$http_user_agent" $http_x_forwarded_for'; 
  48.   
  49.   server 
  50.   { 
  51.     listen       0.0.0.0:80; 
  52.     server_name  check.test.com; 
  53.     index index.html index.htm index.php; 
  54.     #autoindex on; 
  55.     #autoindex_localtime on; 
  56.     root  /usr/local/nginx/html/; 
  57.     access_log  /usr/local/nginx/logs/access.log  access; 
  58.   } 
  59.   include vhosts/*
  60.  
  61. 1.2 虚拟主机配置文件 
  62. $ cat vhosts/www.test.com 
  63. server { 
  64.         listen       0.0.0.0:80; 
  65.         server_name  www.test.com; 
  66.         index index.html index.htm index.php; 
  67.         root  /var/www/html/www; 
  68.  
  69.         location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ 
  70.         { 
  71.         expires 300d; 
  72.         } 
  73.  
  74.         error_page 404 = /404.html; 
  75.  
  76.         location ~ \.(js|css|htm|html|shtml)$ 
  77.         { 
  78.         expires 60m; 
  79.         } 
  80.  
  81.         access_log /var/log/httpd/www/access.log access; 
  82.  
  83.  
  84. $ cat vhosts/bbs.test.com 
  85. server 
  86.     listen      0.0.0.0:80; 
  87.     server_name  bbs.test.com forum.test.com; 
  88.     index index.shtml index.php index.html; 
  89.     root  /var/www/html/bbs; 
  90.  
  91.     location ~ .*\.(php|php5)?$ 
  92.     { 
  93.       fastcgi_pass 127.0.0.1:9000; 
  94.       fastcgi_index index.php; 
  95.       fastcgi_param SCRIPT_FILENAME /var/www/html/bbs$fastcgi_script_name
  96.       include fastcgi_params; 
  97.     } 
  98.    
  99.     location ^~ /iso/ 
  100.         { 
  101.         proxy_pass http://192.168.57.71/iso/; 
  102.         } 
  103.  
  104.     location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ 
  105.     { 
  106.       expires      300d; 
  107.     } 
  108.  
  109.     location ~ .*\.(js|css)?$ 
  110.     { 
  111.       expires      60m; 
  112.     }   
  113.  
  114.     access_log  /var/log/httpd/bbs/access.log access; 
  115.  
  116.  
  117. $ cat vhosts/blog.test.com 
  118. server 
  119.     listen      0.0.0.0:80; 
  120.     server_name  blog.test.com t.test.com; 
  121.     index index.shtml index.php index.html; 
  122.     root  /var/www/html/blog; 
  123.  
  124.     location ~ .*\.(php|php5)?$ 
  125.     { 
  126.       fastcgi_pass 127.0.0.1:9000; 
  127.       fastcgi_index index.php; 
  128.       fastcgi_param SCRIPT_FILENAME /var/www/html/blog$fastcgi_script_name
  129.       include fastcgi_params; 
  130.     } 
  131.    
  132.     location ^~ /iso/ 
  133.         { 
  134.         proxy_pass http://192.168.57.71/iso/; 
  135.         } 
  136.  
  137.     location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ 
  138.     { 
  139.       expires      300d; 
  140.     } 
  141.  
  142.     location ~ .*\.(js|css)?$ 
  143.     { 
  144.       expires      60m; 
  145.     }   
  146.  
  147.     access_log  /var/log/httpd/blog/access.log access; 
  148.  



2 php-fpm.conf

 
  1. $ grep -Ev '^$|^;|^ ' /usr/local/php/etc/php-fpm.conf (1GB 内存) 
  2. [global] 
  3. pid = run/php-fpm.pid 
  4. error_log = log/php-fpm.log 
  5. log_level = notice 
  6. [www] 
  7. listen = 127.0.0.1:9000 
  8. user = www 
  9. group = www 
  10. pm = static 
  11. pm.max_children = 35 
  12. pm.start_servers = 20 
  13. pm.min_spare_servers = 5 
  14. pm.max_spare_servers = 35 
  15. 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

 
  1. awk '! /^$|^;|^ /' /usr/local/php/etc/php-fpm.conf 
  2. [global] 
  3. pid = run/php-fpm.pid 
  4. error_log = log/php-fpm.log 
  5. ;log_level = notice 
  6. emergency_restart_threshold = 10 
  7. emergency_restart_interval = 1m  
  8. [www] 
  9. user = www 
  10. group = www 
  11. listen = 127.0.0.1:9000 
  12. listen.owner = www 
  13. listen.group = www 
  14. listen.mode = 0666 
  15. pm = dynamic 
  16. pm.max_children = 20 
  17. pm.start_servers = 5 
  18. pm.min_spare_servers = 5 
  19. pm.max_spare_servers = 15 
  20. pm.max_requests = 1024 
  21. slowlog = var/log/php-fpm.log.slow 
  22. request_slowlog_timeout = 20 
  23. request_terminate_timeout = 60s 
  24. rlimit_files = 65535 
  25. rlimit_core = 0 

详细的php-fpm.conf 配置参数

 
  1. FPM 配置文件为php-fpm.conf,其语法类似 php.ini 。 
  2.  
  3. 全局配置段([global]) 
  4. pid string 
  5. PID文件的位置. 默认为空. 
  6.  
  7. error_log string 
  8. 错误日志的位置. 默认: 安装路径#INSTALL_PREFIX#/log/php-fpm.log. 
  9.  
  10. log_level string 
  11. 错误级别. 可用级别为: alert(必须立即处理), error(错误情况), warning(警告情况), notice(一般重要信息), debug(调试信息). 默认: notice. 
  12.  
  13. emergency_restart_threshold int 
  14. 如果子进程在emergency_restart_interval设定的时间内收到该参数设定次数的SIGSEGV 或者 SIGBUS退出信息号,则FPM会重新启动。 0 表示 '关闭该功能'. 默认值: 0 (关闭). 
  15.  
  16. emergency_restart_interval mixed 
  17. emergency_restart_interval用于设定平滑重启的间隔时间. 这么做有助于解决加速器中共享内存的使用问题. 可用单位: s(秒), m(分), h(小时), 或者 d(天). 默认单位: s(秒). 默认值: 0 (关闭). 
  18.  
  19. process_control_timeout mixed 
  20. 设置子进程接受主进程复用信号的超时时间. 可用单位: s(秒), m(分), h(小时), 或者 d(天) 默认单位: s(秒). 默认值: 0. 
  21.  
  22. daemonize boolean 
  23. 设置FPM在后台运行. 设置 'no' 将 FPM 保持在前台运行用于调试. 默认值: yes. 
  24.  
  25.  
  26. 运行配置区段([www]) 
  27. 在FPM中,可以使用不同的设置来运行多个进程池。 这些设置可以针对每个进程池单独设置。 
  28.  
  29. listen string 
  30. 设置接受FastCGI请求的地址. 可用格式为: 'ip:port', 'port', '/path/to/unix/socket'. 每个进程池都需要设置. 
  31.  
  32. listen.backlog int 
  33. 设置 listen(2) 的半连接队列长度. '-1' 表示无限制. 默认值: -1. 
  34.  
  35. listen.allowed_clients string 
  36. 设置允许连接到FastCGI的服务器IPV4地址. 等同于PHP FastCGI (5.2.2+)中的 FCGI_WEB_SERVER_ADDRS环境变量. 仅对TCP监听起作用. 每个地址是用逗号分隔. 如果没有设置或者为空,则允许任何服务器请求连接. 默认值: any. 
  37.  
  38. listen.owner string 
  39. 如果使用,表示设置Unix套接字的权限. 在Linux中,读写权限必须设置,以便用于WEB服务器连接. 在很多BSD派生的系统中可以忽略权限允许自由连接. 默认值: 运行所使用的用户合租, 权限为0666. 
  40.  
  41. listen.group string 
  42. 参见 listen.owner. 
  43.  
  44. listen.mode string 
  45. 参见 listen.owner. 
  46.  
  47. user string 
  48. FPM 进程运行的Unix用户. 必须设置. 
  49.  
  50. group string 
  51. FPM 进程运行的Unix用户组. 如果没有设置,则默认用户的组被使用. 
  52.  
  53. pm string 
  54. 设置进程管理器如何管理子进程. 可用值: static, dynamic. 必须设置. 
  55. static - 子进程的数量是固定的 (pm.max_children). 
  56. dynamic - 子进程的数量在下面配置的基础上动态设置: pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers. 
  57.  
  58. pm.max_children int 
  59. 子进程的数量,pm 设置为 static 时表示创建的, pm 设置为 dynamic 时表示最大可创建的. 必须设置. 
  60. 该选项设置可以同时提供服务的请求数限制. 类似 Apache 的 mpm_prefork 中 MaxClients 的设置和 普通PHP FastCGI中的 PHP_FCGI_CHILDREN 环境变量. 
  61.  
  62. pm.start_servers in 
  63. 设置启动时创建的子进程数目. 仅在 pm 设置为 dynamic 时使用. 默认值: min_spare_servers + (max_spare_servers - min_spare_servers) / 2. 
  64.  
  65. pm.min_spare_servers int 
  66. 设置空闲服务进程的最低数目. 仅在 pm 设置为 dynamic 时使用. 必须设置. 
  67.  
  68. pm.max_spare_servers int 
  69. 设置空闲服务进程的最大数目. 仅在 pm 设置为 dynamic 时使用. 必须设置. 
  70.  
  71. pm.max_requests int 
  72. 设置每个子进程重生之前服务的请求数. 对于可能存在内存泄漏的第三方模块来说是非常有用的. 如果设置为 '0' 则一直接受请求. 等同于 PHP_FCGI_MAX_REQUESTS 环境变量. 默认值: 0. 
  73.  
  74. pm.status_path string 
  75. FPM状态页面的网址. 如果没有设置, 则无法访问状态页面. 默认值: none. 
  76.  
  77. ping.path string 
  78. FPM监控页面的ping网址. 如果没有设置, 则无法访问ping页面. 该页面用于外部检测FPM是否存活并且可以响应请求. 请注意必须以斜线开头 (/). 
  79.  
  80. ping.response string 
  81. 用于定义ping请求的返回相应. 返回为 HTTP 200 的 text/plain 格式文本. 默认值: pong. 
  82.  
  83. request_terminate_timeout mixed 
  84. 设置单个请求的超时中止时间. 该选项可能会对php.ini设置中的'max_execution_time'因为某些特殊原因没有中止运行的脚本有用. 设置为 '0' 表示 'Off'. Available  
  85. units: s(econds)(default), m(inutes), h(ours), or d(ays). Default value: 0. 
  86.  
  87. request_slowlog_timeout mixed 
  88. 当一个请求该设置的超时时间后,就会将对应的PHP调用堆栈信息完整写入到慢日志中. 设置为 '0' 表示 'Off'. 可用单位: s(秒)(默认), m(分), h(小时), 或者 d(天). 默认值: 0. 
  89.  
  90. slowlog string 
  91. 慢请求的记录日志. 默认值: #INSTALL_PREFIX#/log/php-fpm.log.slow. 
  92.  
  93. rlimit_files int 
  94. 设置文件打开描述符的rlimit限制. 默认值: 系统定义值. 
  95.  
  96. rlimit_core int 
  97. 设置核心rlimit最大限制值. 可用值: 'unlimited' 、0或者正整数. 默认值: 系统定义值. 
  98.  
  99. chroot string 
  100. 启动时的Chroot目录. 所定义的目录需要是绝对路径. 如果没有设置, 则chroot不被使用. 
  101.  
  102. chdir string 
  103. 设置启动目录,启动时会自动Chdir到该目录. 所定义的目录需要是绝对路径. 默认值: 当前目录,或者/目录(chroot时). 
  104.  
  105. catch_workers_output boolean 
  106. 重定向运行过程中的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

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
开发框架 应用服务中间件 PHP
Mac Nginx 关联 php 详细配置以及常见错误
Mac Nginx 关联 php 详细配置以及常见错误
198 1
|
运维 监控 应用服务中间件
【运维知识进阶篇】zabbix5.0稳定版详解3(监控Nginx+PHP服务状态信息)(二)
【运维知识进阶篇】zabbix5.0稳定版详解3(监控Nginx+PHP服务状态信息)(二)
233 0
|
缓存 前端开发 JavaScript
PHP - Laravel 创建项目到服务器(nginx、apache)运行(附带目录结构)
PHP - Laravel 创建项目到服务器(nginx、apache)运行(附带目录结构)
350 0
|
1月前
|
tengine 应用服务中间件 Linux
Tengine、Nginx安装PHP命令教程
要在阿里云Linux上安装PHP,请先更新YUM源并启用PHP 8.0仓库,然后安装PHP及相关扩展。通过`php -v`命令验证安装成功后,需修改Nginx配置文件以支持PHP,并重启服务。最后,创建`phpinfo.php`文件测试安装是否成功。对于CentOS系统,还需安装EPEL源和Remi仓库,其余步骤类似。完成上述操作后,可通过浏览器访问`http://IP地址/phpinfo.php`测试安装结果。
|
3月前
|
应用服务中间件 Linux PHP
Linux搭建tengine2.0<Nginx>+php7环境
本文介绍了在Linux系统上搭建Tengine 2.0(一个Nginx的增强版本)和PHP 7环境的详细步骤,包括创建安装目录、下载源码包及依赖库、编译安装Nginx、配置Nginx、安装PHP及其依赖、设置PHP-FPM、配置环境变量、安装Git和Composer,以及服务管理和日志查看等。
85 0
|
3月前
|
Ubuntu 应用服务中间件 Linux
如何在Ubuntu 14.04上使用Nginx和Php-fpm安全地托管多个网站
如何在Ubuntu 14.04上使用Nginx和Php-fpm安全地托管多个网站
24 0
|
5月前
|
NoSQL 关系型数据库 MySQL
linux服务器重启php,nginx,redis,mysql命令
linux服务器重启php,nginx,redis,mysql命令
110 1
|
6月前
|
应用服务中间件 PHP nginx
php如何实现检测nginx配置的正确性
请确保在执行此操作时,PHP有足够的权限来执行Nginx命令和访问Nginx配置文件。另外,将上述代码嵌入到您的应用程序中时,要注意安全性,以防止潜在的命令注入攻击。
123 3
|
6月前
|
应用服务中间件 Linux PHP
linux 查看nginx状态和php-fpm状态 nginx-status和php-status
linux 查看nginx状态和php-fpm状态 nginx-status和php-status
68 0
|
6月前
|
应用服务中间件 Linux PHP
Linux下安装php环境并且配置Nginx支持php-fpm模块
Linux下安装php环境并且配置Nginx支持php-fpm模块
394 0