开发者社区> 科技小能手> 正文

D5-Nginx_conf 与 Php-fpm_conf

简介:
+关注继续查看

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
18789 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
27959 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
22045 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
20098 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
15484 0
腾讯云服务器 设置ngxin + fastdfs +tomcat 开机自启动
在tomcat中新建一个可以启动的 .sh 脚本文件 /usr/local/tomcat7/bin/ export JAVA_HOME=/usr/local/java/jdk7 export PATH=$JAVA_HOME/bin/:$PATH export CLASSPATH=.
14867 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
20882 0
23704
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载