nginx优化实战

本文详细介绍了如何通过调整Nginx配置提升服务器性能,包括进程数、并发数、长连接、压缩、状态监控等关键参数的优化,适用于高并发场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

3.4Nginx配置进程数、并发数、系统优化

  • 调整Nginx的主配置文件,增加并发量

worker processes 2; #调整到与CPU数量一致

events{

worker connection 65535; #每个worker最大并发连接数

}

  • 调整内核参数

[root@proxy ~]# ulimit-a #查看所有的属性值

[root@proxy ~# ulimit-Hn 100000 #临时设置硬限制

[root@proxy ~]# ulimit-Sn 100000 并设置软限制

[root@proxy ~]# vim /etc/security/limits.conf

soft nofile 100000

hard nofile 100000

用户/组 软/硬限制 需要限制的项目 限制的值

验证

[root@proxy ~]# ab-n 2000-c 2000 http://192.168.136.131/ #自己访问自己,测试一下配置效果

 

 

 

3.5高并发下Nginx长连接

 

  • nginx长连接短连接,可以增强服务器的容灾能力
  • 场景:

HTTP1.1之后, HTTP协议支持持久连接,也就是长连接,优点在于在一个TCP连接上可以传送多个HTTP请求和响应减少了建立和关闭连接的消耗和延迟。如果我们使用了nginx去作为反向代理或者负载均衡,从客户端过来的长连接请求就会被转换成短连接发送给服务器端,为了支持长连接,我们需要在nginx服务器上做一些配置

  • 要求:

使用nginx时,想要做到长连接,我们必须做到以下两点:1:从client到nginx是长连接2:从nginx到server是长连接对于客户端而言, nginx其实扮演着server的角色,反之,之于server, nginx就是一个client

  • 配置:

我们要想做到Client与Nginx之间保持长连接,需要:

1: Client发送过来的请求携带"keep-alive"header.

2: Nginx设置支持keep-alive

 

 

 

3.6高并发下Nginx压缩

  • gzip压缩作用:将响应报文发送至客户端之前可以启用压缩功能,这能够有效地节约带宽,并提高响应至客户端的速度,压缩会消耗nginx的cpu性能。
  • gzip压缩可以配置http,server和location模块下

 

gzip on;

#设置允许压缩的页面最小字节数,页面字节数从header头得content-1ength中进行获取。默认值是0,不管页面多大都压缩。建议设置成大于2k的字节数,小于2k可能会越压越大。

gzip_min_length 2k;

#设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。例如4 4k代表以4k为单位,按照原始数据大小以4k为单位的4倍申请内存。48k代表以8k为单位,按照原始数据大小以8k为单位的4倍申请内存。#如果没有设置,默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩结果。

gzip_buffers 4 16k;

#压缩级别, 1-10,数字越大压缩的越好,也越占用CPU时间

gzip_comp_leve1 5;

 

#默认值: gzip-types text/html (默认不对js/css文件进行压缩)

#压缩类型,匹配MIME类型进行压缩

#不能用通配符text/*

#(无论是否指定)text/htm1默认已经压缩

#设置哪压缩种文本文件可参考conf/mime.types

gzip_types text/plain application/x-javascript text/css application/xm1;

#值为1.0和1.1代表是否压缩http协议1.0,选择1.0则1.0和1.1都可以压缩

gzip_http_version 1.0

#IE6及以下禁止压缩gzip.disable "MSIE [1-6]\.";

#默认值: off

#Nginx作为反向代理的时候启用,开启或者关闭后端服务器返回的结果,匹配的前提是后端服务器必须要返包含"via"的 header头。

#off -关闭所有的代理结果数据的压缩

#expired-启用压缩,如果header头中包含"Expires"头信息

#no-cache-启用压缩,如果header头中包含"Cache-Control :no-cache"头信息

#no-store-启用压缩,如果header头中包含"Cache-Control :no-store"头信息

# private-启用压缩,如果header头中包含"Cache-Control :private"头信息

#no_l ast_modified -启用压缩,如果header头中不包含"Last-Modified"头信息

#no_etag-启用压缩,如果header头中不包含"ETag"头信息

#auth-启用压缩,如果header头中包含"Authorization"头信息

#any-无条件启用压缩

gzip_proxied expired no-cache no-store private auth:

#给CDN和代理服务器使用,针对相同ur1,可以根据头信息返回压缩和非压缩副本

gzip_vary on;

 

 

 

3.7高并发下Nginx状态监控

 

参数说明:

#活跃的连接数量

active connections

#总共处理了n个连接,成功创建n次握手,总共处理了n个请求

server accepts handled requests

#每个连接有三种状态waiting, reading, writing

reading-读取客户端的Header信息数这个操作只是读取头部信息,读取完后马上进入writing状态,因此时间很短writing一响应数据到客户端的Header信息数这个操作不仅读取头部,还要等待服务响应,因此时间比较长。

waiting-开启keep-alive后等候下一次请求指令的驻留连接

正常情况下waiting数量是比较多的,并不能说明性能差。反而如果reading +writing数量比较多说明服务并发有问题。

查看Nginx并发进程数: ps-eflgrep nginx | wc-

查看Web服务器TCP连接状态: netstat-n | awk '/^tcp/ (++S[$NF] END {for(a in S) print a, S[a]

 

 

 

解析:

CLOSED //无连接是活动的或正在进行

LISTEN //服务器在等待进入呼叫

SYN RECV //-个连接请求已经到达,等待确认

SYN SENT //应用已经开始,打开一个连接

ESTABLISHED /正常数据传输状态/当前并发连接数

FIN_ WAIT1 //应 它已经完成

FIN WAIT2 //另一边已同意释放

ITMED WAIT //等待所有分组死掉

CLOSING //两边同时尝试关闭

TIMEWAIT //另一边已初始化一个释放

LAST ACK //等待所有分组死掉

查看Web服务器TCP连接状态: netstat-n | awk '/^tcp/ {++S[$NF] END {for(a in S) print a, S[a]

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值