Nginx优化方案
创始人
2024-01-22 11:50:47
0

目录

一、Nginx返回错误页面

1、HTTP常见状态代码列表

二、Nginx状态页面

1、安装status模块

2、激活status

三、优化并发连接数

1、压力测试软件ab(http-tools)

2、优化并发连接数

2.1、修改nginx并发数

2.2、修改内核最大文件数量

四、Nginx日志分割

五、开启gzip压缩

六、开启文件缓存


一、Nginx返回错误页面

1、HTTP常见状态代码列表

返回码描述
200一切正常            
400请求语法错误
401访问被拒绝(账号或密码错误)
403资源不可用,通常由于服务器上文件或目录的权限设置导致
403禁止访问:如客户端的IP地址被拒绝,无法验证密码
404无法找到指定位置的资源(Not found)
414请求URL头部太长
500服务器内部错误
502服务器作为网关或者代理时,为了完成请求访问下一个服务器,但该服务器返回了非法的应答(Bad Gatwway)

2、自定义错误返回页面

vim /usr/local/nginx/conf/nginx.conf

默认nginx.conf的server下面都有个注释的error_page配置,取消注释,更改为自定义页面或图片就行了:

server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        error_page  404              /my404.html;    #html可以自定义,但要实际存在

        #error_page  404              /my404.jpg;     #也可以显示图片,选用一个即可

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

... ...

}

【注】:上面的my404.html和my404.jpg文件前面的“/”不是系统的跟目录,而是nginx的html的根目录,即/usr/local/nginx/html/下

/usr/local/nginx/sbin/nginx -s reload

客户端测试:访问一个不存在的地址:

 返回图片:

二、Nginx状态页面

1、安装status模块

nginx编译安装时./confiugre后面需要添加--with-http_stub_status_module开启模块功能,该模块可以查看Nginx连接数等信息

Nginx安装参考:Nginx安装、升级与基础配置_桂安俊@kylinOS的博客-CSDN博客

2、激活status

vim /usr/local/nginx/conf/nginx.conf

新增一个location,用于访问status:

server {
        listen       80;
        server_name  localhost;

        
        location /status {
            stub_status on;

            #allow  IP;     #可设置限制访问

            #deny all;
        }

        location / {
            root   html;
            index  index.html index.htm;
        }

/usr/local/nginx/sbin/nginx -s reload

客户端测试:浏览器访问192.168.1.20/status

【参数说明】:

Active connections:当前活动的连接数量,实时并发量

Accepts:已经接受客户端的连接总数量,三次握手建立

Handled:已经处理客户端的连接总数量,一般与accepts一致,除非服务器限制了连接数量

Requests:客户端发送的请求数量

Reading:当前服务器正在读取的客户端请求头的数量

Writing:当前服务器正在写响应信息的数量

Waiting:当前多少客户端在等待服务器的响应

三、优化并发连接数

1、压力测试软件ab(http-tools)

yum -y install httpd-tools#-c后面代表总人数,-n后面代表总访问量,如下即模拟100个人共访问100次,即平均一人访问一次
#所以-c的值必须要大于等于-n的值,不然会报语法错误,且网址最后面必须以“/”斜线结尾,否则也会报语法错误
ab -c 100 -n 100 http://192.168.1.20/ab -c 2000 -n 2000 http://192.168.1.20/

测试:

100人100次模拟访问:

ab -c 100 -n 100 http://192.168.1.20/

2000人2000次模拟访问:

ab -c 2000 -n 2000 http://192.168.1.20/

 如上可以看到2000人2000次访问报错了,这时候就需要优化Nginx,以满足更高并发量。

2、优化并发连接数

2.1、修改nginx并发数

vim /usr/local/nginx/conf/nginx.conf

worker_processes  2;                    #启动多少个nginx worker进程,需要与CPU核心数量一致


events {
    worker_connections  50000;     #每个nginx worker进程能够支持的最大并发连接数量
}

/usr/local/nginx/sbin/nginx -s reload

2.2、修改内核最大文件数量

除此以外还要修改内核参数,修改最大文件数量:

ulimit -a

 可以看到默认最大文件打开数是1024。

a、临时修改:

ulimit -n 100000    #临时修改最大文件打开数,重启系统失效

b、永久修改:

vim /etc/security/limits.conf  #永久修改,需重启生效

新增如下内容:

*           soft        nofile       100000
*           hard       nofile       100000

#格式说明:用户或组   软限制或硬限制   项目    值

#其中soft软限制是可以突破的,hard硬限制是不可以突破的,nofile代表最大文件打开数量

再次客户端高并发测试,可以完成2000并发:

ab -c 2000 -n 2000 http://192.168.1.20/

四、Nginx日志分割

脚本日志切割

vim /usr/local/nginx/logbak.sh
#!/bin/bash
date=`date +%Y%m%d`
logpath=/usr/local/nginx/logs
mv $logpath/access.log $logpath/access-$date.log
mv $logpath/error.log $logpath/error-$date.log
kill -USR1 $(cat $logpath/nginx.pid)    #这里的kill不是杀死进程,是生成新的日志文件

设置定时任务,比如每周五03点03分自动执行脚本完成日志切割:

crontab  -e
03 03 * * 5 /usr/local/nginx/logbak.sh

五、开启gzip压缩

如果是访问很多图片内容网站,如果不压缩,直接不压缩传递,就会占用很多流量并且传输很慢。

开启压缩功能:

http {... ...gzip  on;                      #开启压缩gzip_min_length 1000;          #小文件不压缩,如满足1000字节之后才压缩,小文件越压缩反而越大gzip_comp_level   4;           #压缩比率,压缩比率太大会导致压缩时间长gzip_types   text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;    #对特定文件压缩,类型参考mime.types文件,在/usr/local/nginx/conf/mime.types... ...}

【注】mime.types说明,后面是文件格式类型,前面为对应gzip_types,填写前面的:

【说明】这里是压缩,解压得话是浏览器完成,几乎所有得浏览器都支持自动解压。

六、开启文件缓存

使用内存缓存磁盘中的文件,html页面是存放在/usr/local/nginx/html目录下的,这是存放在硬盘上的,如果把用户经常访问的html页面缓存到内存中,那访问速度可以更快。

修改如下,开启文件缓存:

vim /usr/local/nginx/conf/nginx.conf
http {... ...open_file_cache    max=2000  inactive=20s;   #设置服务器内存中最大缓存2000个句柄,关闭20秒内无请求的文件句柄,从内存中清除open_file_cache_valid   60s;       #文件句柄的最长有效时间是60秒,60秒后过期,不管是不是一直被访问,这样防止硬盘html修改了内容,但是一直缓存在内存中的html没有更新,导致用户访问的页面一直没更新open_file_cache_min_uses   5;      #只有访问次数超过5次会被缓存open_file_cache_errors    off;     #内存缓存html过期,用户访问内存html找不到会报错,但是硬盘html是有的,这里是关闭缓存文件错误... ...
}

相关内容

热门资讯

蚌埠曹山街道民政服务站开展 医... 为切实保障曹山街道辖区居民医疗保障权益,让医保惠民政策深入人心,11月11日,龙子湖区曹山街道民政服...
李玟二姐起诉营销号侵权,索赔2... 企查查APP显示,11月11日,法院刊登李玟二姐李思林与彭某某网络侵权责任纠纷法院公告,原告提出诉讼...
贵州:大数据实现政策与企业智能... 原标题:从“找政策”到“政策找上门” 大数据实现政策与企业智能匹配 “以前是我们‘找政策’,现在是政...
男子节假日微信汇报工作,离职后... 在当今快节奏的职场环境中,加班似乎成了许多打工人无法逃避的话题。而节假日期间用微信处理工作,究竟算不...
免门票!昌吉州5A景区发布最新... 昌吉州这两个5A级景区发福利啦! 主打一个“宠粉无上限” 免门票福利多到像在发钱 当别人还在买票 而...
男子因结账纠纷脱裤羞辱火锅店女... 11月9日晚,安徽亳州一男子酒后刁难辱骂火锅店女店员,并当众对其脱裤羞辱。餐厅老板出面维护女员工并报...
*ST金泰投资者诉讼案一审免责... 11月11日,*ST金泰(300225)发布公告,近日收到上海金融法院送达的《民事判决书》,涉及原告...
爱丽家居(603221)发布募... 截至2025年11月11日收盘,爱丽家居(603221)报收于12.43元,较前一交易日上涨0.73...
辽宁公安严打危害鸟类犯罪,已放... 在公安部“平安原野-2025”专项行动统一部署下,全国公安机关依法严厉打击危害鸟类等野生动物犯罪活动...
定西高强董事长朱平被问询:控制... 瑞财经 严明会 11月7日,定西高强度紧固件股份有限公司(以下简称:定西高强)北交所IPO披露审核问...