高流量站点NGINX与PHP-fpm配置优化

2025-05-12 07:59:41

1、1. 将TCP切换为UNIX域套接字1. 将TCP切换为UNIX域套接字UNIX域套接字相比TCP套接字在loopback接口上能提供更好的性能(更少的数据拷贝和上下文切换)。但有一点需要牢记:仅运行在同一台服务器上的程序可以访问UNIX域套接字(显然没有网络支持)。upstream backend { # UNIX domain sockets server unix:/var/run/fastcgi.sock; # TCP sockets # server 127.0.0.1:8080; }

2、2. 瓢遥费涓调整工作进程数现代计算机硬件是多处理器的,NGINX可以利用多物理或虚拟处理器。多数情况下,你的Web服务器都不会配置为处理多种任务(比如作为Web服务器提供服务的同时也是一个打印服务器),你可以配置NGINX使用所有可用的处理器,NGINX工作进程并不是多线程的。运行以下命令可以获知你的机器有多少个处理器:Linux上 -cat /proc/cpuinfo | grep processorFreeBSD上 -sysctl dev .cpu | grep location将nginx.conf文件中work_processes的值设置为机器的处理器核数。同时,增大worker_connections(每个处理器核心可以处理多少个连接)的值,以及将"multi_accept"设置为ON,如果你使用的是Linux,则也使用"epoll":www.linuxprobe.com/nginx-php-fpm.html# We have 16 cores worker_processes 16; # connections per worker events { worker_connections 4096; multi_accept on; }

3、3. 设醅呓择锗置upstream负载均衡以我们的经验来看,同一台机器上多个upstream后端相比单个upstream后端能够带来更高的吞吐量。例如,如果你想支持最大1000个PHP-fpm子进程(children),可以将该数字平均分配到两个upstream后端,各自处理500个PHP-fpm子进程:upstream backend { server unix:/var/run/php5-fpm.sock1 weight=100 max_fails=5 fail_timeout=5; server unix:/var/run/php5-fpm.sock2 weight=100 max_fails=5 fail_timeout=5; }

4、4. 禁用访问日志文件这一点影响较大,因为高流量站点上的日志文件涉及大量必须在所有线程之间同步的IO操作。access_log off; log_not_found off; error_log /var/log/nginx-error.log warn;若你不能关闭访问日志文件,至少应该使用缓冲:access_log /var/log/nginx/access.log main buffer=16k;

5、5. 启用GZipgzip on; gzip_disable "msie6"; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_min_length 1100; gzip_buffers 16 8k; gzip_http_version 1.1; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

6、6. 缓存被频繁访问的文件相关的信息open_file_cache max=200000 inactive=20s; open_file_cache_valid 30s; open_file_cache_min_uses 2; open_file_cache_errors on;

7、7. 调整客户端超时时间client_max_body_size 500M; client_body_buffer_size 1m; client_body_timeout 15; client_header_timeout 15; keepalive_timeout 2 2; send_timeout 15; sendfile on; tcp_nopush on; tcp_nodelay on;

8、8. 调整输出缓冲区大小fastcgi_buffers 256 16k;fastcgi_buffer_size 128k;fastcgi_connect_timeout 3s;fastcgi_send_timeout 120s;fastcgi_read_timeout 120s;reset_timedout_connection on;server_names_hash_bucket_size 100;

9、9. /etc/sy衡痕贤伎sctl.conf调优# Recycle Zombie connections net.inet.tcp.fast_熠硒勘唏finwait2_recycle=1 net.inet.tcp.maxtcptw=200000 # Increase number of files kern.maxfiles=65535 kern.maxfilesperproc=16384 # Increase page share factor per process vm.pmap.pv_entry_max=54272521 vm.pmap.shpgperproc=20000 # Increase number of connections vfs.vmiodirenable=1 kern.ipc.somaxconn=3240000 net.inet.tcp.rfc1323=1 net.inet.tcp.delayed_ack=0 net.inet.tcp.restrict_rst=1 kern.ipc.maxsockbuf=2097152 kern.ipc.shmmax=268435456 # Host cache net.inet.tcp.hostcache.hashsize=4096 net.inet.tcp.hostcache.cachelimit=131072 net.inet.tcp.hostcache.bucketlimit=120 # Increase number of ports net.inet.ip.portrange.first=2000 net.inet.ip.portrange.last=100000 net.inet.ip.portrange.hifirst=2000 net.inet.ip.portrange.hilast=100000 kern.ipc.semvmx=131068 # Disable Ping-flood attacks net.inet.tcp.msl=2000 net.inet.icmp.bmcastecho=1 net.inet.icmp.icmplim=1 net.inet.tcp.blackhole=2 net.inet.udp.blackhole=1

10、10. 监控持续监控打开连接的数目,空闲内存以及等待状态线程的数目。设置警报在超出阈值时通知你。你可以自己构建这些警报,或者使用类似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_module make install BATCH=yes

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢