Linux运维-陈雷雷


nginx优化

admin 2020-03-06 449浏览 0条评论
首页/正文
分享到: / / / /

1. nginx 基础优化

gzip 优化

#gzip优化
gzip on;
gzip_min_length 500;
gzip_buffers 4 256k;
gzip_http_version 1.1;
gzip_comp_level 5;
gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_disable "MSIE [1-6]\.";

报文头的修改行为:

  • 删除所有空值的报文头,空值没有意义的,不需要转发到后台服务器
  • 包含下划线 "_" 的报文头会被默认丢弃,如需要开启可以使用指令 underscores_in_headerson 这样做是为了避免在讲header射到CGI变量时混淆,因为在这个过程中,破折号和下划线都呗映射到了下划线.
  • Host报文头会被重写为 $proxy_host变量值,这个变量值在 proxy_pass 指令中所包含的域名或IP地址
  • Conntection报文头会被修改为close, HTTP1.1协议会被修改为HTTP1.0,这样的行为会让收到服务器端响应后立即关闭,服务器中的连接不会被保持,HTTP1.1变量,可以用 proxy_http_version 指定

修改host报文头例子:

语法:
proxy_set_header field value;
默认语法: proxy_set_header Host $proxy_host; proxy_set_header Connection close;
作用区块: http,server,location
变量值 描述
$proxy_host 该变量的值是从proxy_paas指令后的url获取,为替换host请求报文头的默认值
$http_host $http_变量群中的一个,$http_后跟小写的报文头名称,所有短划线均由下划线代替。当客户端请求没有有效的“Host”报文头时,这可能会获取失败。
$host 该如果原始请求中包含Host,就是请求中host除端口部分,如果没有,就是server_name

2. 负载均衡 proxy 优化

2.0 负载均衡

在多台服务器之间有效的分配客户端请求,或者网络负载 通过仅向正常服务器发送请求来确保高可用和可靠性 业务不中断的情况下,按需弹性分配服务器资源 优势: 1. 减少宕机时间 2. 系统高可用 3. 动态扩展 4, 加快访问速度

2.1 负载均衡基本配置

1. 负载均衡基本配置:

http {
	upstream leilei {
		server 10.0.0.10:8080;
		server 10.0.0.11:8080;         <----- 后端服务器
	}
	server {
		listen 80;
		server_name www.chenleilei.net;    <---- 前端接受流量的入口
		location / {
			proxy_pass http://leilei;
		}
	}
}

2.2 proxy_cache

proxy_cache 示例:
http {
...
...
proxy_cache_path /www/cache  keys_zone=my_cache:10m levels=1:2 max_size=10g inactive=60m use_temp_path=off;
...
...
upsteam leilei {
	server 127.0.0.1:8080 max_fails=10;
	}
server {
	location / {
		proxy_cache my_cache;
		proxy_pass http://leilei
	}
	}

2.3 proxy_buff

proxy_buffering :  是否开启buffer  默认开启, 如果关闭的花,服务器发送的数据会直接发送给客户端.

proxy_buffers : 控制一个TCP连接对后端影响的缓冲区数量,  第一个参数:  数量  第二个参数: 大小  默认是 8个缓冲区,每个缓冲区是一页 也就是4k或8k

proxy_buffer_size: 来自后端服务器的响应的初始部分与其余相应分开缓冲,该指令为响应的这一部分设置的缓冲区大小,默认情况下,它和porxy_buffers相同

proxy_busy_buffers_size: 用于 标记 客户端就绪,并因此繁忙的缓冲区最大大小.客户端一次只能从一个缓冲区读取数据,而缓冲区却被放入列队中,以成束的形式发送给客户端,

proxy_max_temp_file_size: 这是请求磁盘上的临时文件的最大大小,他们是再上游响应太大,而无法放入缓冲区时创建的 准备就绪,因此很忙. 客户端一次只能从一个缓冲区读取数据,而缓冲区被放入列队中,以成束的形式发送给客户端. 此伪指令控制 允许处于此状态的缓冲区空间的大小.

2.4 proxy_ignore_client_abort

proxy_ignore_client_abort off;   #默认关闭
开启为 on 的情况下: 如果nginx和Linux系统中有buffers,客户端请求的时候会缓存为buffer再给nginx,如果开启后,客户端请求会直接传递给nginx,不再产生buffers,它的效率会更高. 

2.5 client_max_body_size

client_max_body_size 1M;    #默认1M,客户端请求正文允许的大小,在 "Content-Length" 请求字段中指定,如果请求的大小超过配置的值,则会向用户返回413错误,设置为0 将会金庸对客户端请求主体大小的检查.

2.6 proxy_connect_timeout

proxy_connect_timeout 45;   #默认值75 这是设置代理服务器简历连接的超时时间,通常不超过75s

2.7 proxy_send_timeout

proxy_send_timeout 60;    #设置请求发送到后端服务器的超时,超时尽在两个连续写操作之间设置,而不用于整个请求的传输,如果后端服务器在此时间内未收到任何信息,它将会被关闭.

2.8 proxy_read_timeout

proxy_read_timeout 90;    #设置读取后端响应后的超时时间 连接建立成功后,多久没数据传输被关闭.

2.9 proxy_set_header

 proxy_set_header Host $host;    # 是把原http请求的Header中的Host字段也放到转发的请求里
 proxy_set_header X-Forwarded-Proto $scheme;   #将请求转变为https
 proxy_set_header X-Real-IP $remote_addr;   #引用后端真实IP 
 proxy_set_header X-Forwarded-for $proxy_add_x_forwarded_for;  #记录IP

3.upstream优化

upstream leilei {
#创建一个共享内存区域
zone backend 64k;
#加密算法
#ip_hash;
#后端节点信息
server 127.0.0.1:8080 max_fails=10;

#keep连接缓存.
keepalive 128;

#每个连接最大请求书
keepalive_requests 100;

#长连接超时时间
keepalive_timeout 45s;

3.cpu优化

#自动配置使用进程数
worker_processes auto;
#cpu指定
worker_cpu_affinity 0101 1010;
#文件句柄数
worker_rlimit_nofile 65535;

#进程优先级
worker_priority -20;

4. 事件驱动优化

use epoll;
multi_accept on;
accept_mutex on;
accept_mutex_delay 1ms;

5. 系统内核优化 /etc/sysctl.conf

#fast open 配置 协议级别的优化 其中1表示客户端开启,2表示服务端开启,3表示客户端和服务器同时开启
net.ipv4.tcp_fastopen = 3

#丢包重传上限,到达上限,更新缓存
net.ipv4.tcp_retries1 = 3

# 到达上限,关闭tcp连接
net.ipv4.tcp_retries2 = 15

#TIME_WAIT状态优化
net.ipv4.tcp_fin_timeout = 30

#允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭
net.ipv4.tcp_tw_reuse = 1

#可用端口数
net.ipv4.ip_local_port_range 20000 65000

#单个进程较大可以打开的句柄数
fs.file-max = 999999

#当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为10分钟
net.ipv4.tcp_keepalive_time = 600

#减少TIME_WAIT连接状态
net.ipv4.tcp_tw_recycle = 1

#服务器资源(并非单指端口资源,拒绝服务有很多种资源不足的情况)不足的情况下,尽量不要拒绝TCP的syn(连接)请求,尽量把syn请求缓存起来,留着过会儿有能力的时候处理这些TCP的连接请求
net.ipv4.tcp_syncookies = 1

#当keepalive 起用的时候,TCP 发送keepalive 消息的频度。缺省是2 小时。
net.ipv4.tcp_keepalive_time = 600


=======================================
#优化参数:
cat >>/etc/sysctl.conf<<EOF
net.ipv4.tcp_fastopen = 3
net.ipv4.tcp_retries1 = 3
net.ipv4.tcp_retries2 = 15
net.ipv4.tcp_fin_timeout = 2
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.ip_local_port_range = 4000 65000
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_max_tw_buckets = 10000
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.core.somaxconn = 16384
net.core.netdev_max_backlog = 16384
net.ipv4.tcp_max_orphans = 16384
EOF
sysctl -p

6.缓冲列队

6. nginx后端真实IP获取案例

例子: 服务器获取真实客户端IP

location /leilei {
	proxy_set_header HOST $host;
	proxy_set_header X-Forwarded-Proto $scheme;
	proxy_set_header X-Real-IP $remote_addr;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	proxy_pass http://example.com;
	}
X-Forwarded-Proto 所使用的传输协议http/https
X-Real-IP 使用$remote_addr的值,该值为客户端IP地址
X-Forwarded-For 该报文头是一个list,如该请求被多次代理转发,在每次的转发中
每一级转发服务器都可以将自己的IP地址添加到这个list,
$proxy_add_x_forwarded_for 这个变量继承来原来报文头中的X-Forwarded-For 报文内容
并且把nginx自己的ip地址添加在最后
最后修改:2020-03-06 22:29:26 © 著作权归作者所有
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付

上一篇

发表评论

评论列表

还没有人评论哦~赶快抢占沙发吧~

博客信息

  • 文章数目 123
  • 标签数目 333
  • 运行天数
  • 最后活动

广告



文章目录