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

导读

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

5379f33e93da447f9dfa2e46.html

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

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

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

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

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

upstream backend

{

# UNIX domain sockets

server unix:/var/run/fastcgi.sock;

# TCP sockets

# server 127.0.0.1:8080;

}

2. 调整工做进程数

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

多数状况下,你的Web服务器都不会配置为处理多种任务(好比做为Web服务器提供服务的同时也是一个打印服务器),你能够配置NGINX使用全部可用的处理器,NGINX工做进程并非多线程的。java

运行如下命令能够获知你的机器有多少个处理器:node

Linux上 -nginx

cat /proc/cpuinfo | grep processor

FreeBSD上 -json

sysctl dev .cpu | grep location

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

同时,增大worker_connections(每一个处理器核心能够处理多少个链接)的值,以及将"multi_accept"设置为ON,若是你使用的是Linux,则也使用"epoll":缓存

# We have 16 cores

worker_processes 16;

# connections per worker

events

{

worker_connections 4096;

multi_accept on;

}

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. 禁用访问日志文件

这一点影响较大,由于高流量站点上的日志文件涉及大量必须在全部线程之间同步的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. 启用GZip

gzip 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. 缓存被频繁访问的文件相关的信息

open_file_cache max=200000 inactive=20s;

open_file_cache_valid 30s;

open_file_cache_min_uses 2;

open_file_cache_errors on;

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. 调整输出缓冲区大小

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. /etc/sysctl.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. 监控

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

设置警报在超出阈值时通知你。你能够本身构建这些警报,或者使用相似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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值