秀米云香港服务器

使用Nginx搭配PHP已有7年的这份经历让我们学会如何为高流量站点优化NGINX和PHP-fpm配置。

以下正是这方面的一些提示和建议:

序列号 CPU RAM HDD 带宽 售价(美元) 免费试用
香港服务器1 E5-2620 32G 1T HDD 50M/无限流量 $196.00 立即申请
香港服务器2 E5-2650 32G 1T HDD 50M/无限流量 $256.00 立即申请
香港服务器3 E5-2680 32G 1T HDD 50M/无限流量 $316.00 立即申请
香港服务器4 E5-2690 32G 1T HDD 50M/无限流量 $336.00 立即申请
香港服务器5 E5-2697 32G 1T HDD 50M/无限流量 $376.00 立即申请
香港服务器6 E5-2620*2 32G 1T HDD 50M/无限流量 $376.00 立即申请
香港服务器7 E5-2650*2 32G 1T HDD 50M/无限流量 $436.00 立即申请
香港服务器8 E5-2680*2 32G 1T HDD 50M/无限流量 $476.00 立即申请
香港服务器9 E5-2690*2 32G 1T HDD 50M/无限流量 $556.00 立即申请
香港服务器10 E5-2697*2 32G 1T HDD 50M/无限流量 $596.00 立即申请
香港服务器11 E5-2680v4*2 32G 1T HDD 50M/无限流量 $696.00 立即申请
香港服务器12 E5-2698v4*2 32G 1T HDD 50M/无限流量 $796.00 立即申请

1. 将TCP切换为UNIX域套接字

UNIX域套接字相比TCP套接字在loopback接口上能提供更好的性能(更少的数据拷贝和上下文切换)。

但有一点需要牢记:仅运行在同一台服务器上的程序可以访问UNIX域套接字(显然没有网络支持)。

upstreambackend{#UNIXdomainsocketsserverunix:/var/run/fastcgi.sock;#TCPsockets#server127.0.0.1:8080;}2. 调整工作进程数

现代计算机硬件是多处理器的,NGINX可以利用多物理或虚拟处理器。

多数情况下,你的Web服务器都不会配置为处理多种任务(比如作为Web服务器提供服务的同时也是一个打印服务器),你可以配置NGINX使用所有可用的处理器,NGINX工作进程并不是多线程的。

运行以下命令可以获知你的机器有多少个处理器:

Linux上 -

cat/proc/cpuinfo|grepprocessor

FreeBSD上 -

sysctldev.cpu|greplocation

将nginx.conf文件中work_processes的值设置为机器的处理器核数。

同时,增大worker_connections(每个处理器核心可以处理多少个连接)的值,以及将”multi_accept”设置为ON,如果你使用的是Linux,则也使用”epoll”:

#Wehave16coresworker_processes16;#connectionsperworkerevents{worker_connections4096;multi_accepton;}3. 设置upstream负载均衡

以我们的经验来看,同一台机器上多个upstream后端相比单个upstream后端能够带来更高的吞吐量。

例如,如果你想支持最大1000个PHP-fpm子进程(children),可以将该数字平均分配到两个upstream后端,各自处理500个PHP-fpm子进程:

upstreambackend{serverunix:/var/run/php5-fpm.sock1weight=100max_fails=5fail_timeout=5;serverunix:/var/run/php5-fpm.sock2weight=100max_fails=5fail_timeout=5;}

以下是两个来自php-fpm.conf的进程池:

www1/var/run/php5-fpm.sock1-10666wwwwwwstatic50050000020s/var/log/php-slow.logno5000127.0.0.1$HOSTNAME/usr/local/bin:/usr/bin:/bin/usr/tmp/usr/tmp/usr/tmp$OSTYPE$MACHTYPE2www2/var/run/php5-fpm.sock2-10666wwwwwwstatic50050000020s/var/log/php-slow.logno5000127.0.0.1$HOSTNAME/usr/local/bin:/usr/bin:/bin/usr/tmp/usr/tmp/usr/tmp$OSTYPE$MACHTYPE24. 禁用访问日志文件

这一点影响较大,因为高流量站点上的日志文件涉及大量必须在所有线程之间同步的IO操作。

access_logoff;log_not_foundoff;error_log/var/log/nginx-error.logwarn;

若你不能关闭访问日志文件,至少应该使用缓冲:

access_log/var/log/nginx/access.logmainbuffer=16k;5. 启用GZipgzipon;gzip_disable"msie6";gzip_varyon;gzip_proxiedany;gzip_comp_level6;gzip_min_length1100;gzip_buffers168k;gzip_http_version1.1;gzip_typestext/plaintext/cssapplication/jsonapplication/x-javascripttext/xmlapplication/xmlapplication/xml+rsstext/javascript;6. 缓存被频繁访问的文件相关的信息open_file_cachemax=200000inactive=20s;open_file_cache_valid30s;open_file_cache_min_uses2;open_file_cache_errorson;7. 调整客户端超时时间client_max_body_size500M;client_body_buffer_size1m;client_body_timeout15;client_header_timeout15;keepalive_timeout22;send_timeout15;sendfileon;tcp_nopushon;tcp_nodelayon;8. 调整输出缓冲区大小fastcgi_buffers25616k;fastcgi_buffer_size128k;fastcgi_connect_timeout3s;fastcgi_send_timeout120s;fastcgi_read_timeout120s;reset_timedout_connectionon;server_names_hash_bucket_size100;9. /etc/sysctl.conf调优#RecycleZombieconnectionsnet.inet.tcp.fast_finwait2_recycle=1net.inet.tcp.maxtcptw=200000#Increasenumberoffileskern.maxfiles=65535kern.maxfilesperproc=16384#Increasepagesharefactorperprocessvm.pmap.pv_entry_max=54272521vm.pmap.shpgperproc=20000#Increasenumberofconnectionsvfs.vmiodirenable=1kern.ipc.somaxconn=3240000net.inet.tcp.rfc1323=1net.inet.tcp.delayed_ack=0net.inet.tcp.restrict_rst=1kern.ipc.maxsockbuf=2097152kern.ipc.shmmax=268435456#Hostcachenet.inet.tcp.hostcache.hashsize=4096net.inet.tcp.hostcache.cachelimit=131072net.inet.tcp.hostcache.bucketlimit=120#Increasenumberofportsnet.inet.ip.portrange.first=2000net.inet.ip.portrange.last=100000net.inet.ip.portrange.hifirst=2000net.inet.ip.portrange.hilast=100000kern.ipc.semvmx=131068#DisablePing-floodattacksnet.inet.tcp.msl=2000net.inet.icmp.bmcastecho=1net.inet.icmp.icmplim=1net.inet.tcp.blackhole=2net.inet.udp.blackhole=110. 监控

持续监控打开连接的数目,空闲内存以及等待状态线程的数目。

设置警报在超出阈值时通知你。你可以自己构建这些警报,或者使用类似ServerDensity的东西。

确认安装了NGINX的stub_status模块。该模块默认并不会编译进NGINX,所以可能你需要重新编译NGINX -

./configure--with-http_ssl_module--with-http_stub_status_module--without-mail_pop3_module--without-mail_imap_module--without-mail_smtp_modulemakeinstallBATCH=yes

标题:Nginx与PHP-fpm环境在大流量下的优化配置

地址: https://www.yunhk.xyz/26439.html