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是有的,这里是关闭缓存文件错误... ...
}

相关内容

热门资讯

遵义15家优质企业享便利化政策... 9月18日,记者从国家外汇管理局遵义市分局获悉,该市优质企业贸易外汇收支便利化政策试点银行网点目前已...
托管闲置车辆起纠纷 车主哪些诉... 随着共享经济的深入发展,汽车租赁市场呈现蓬勃发展态势,越来越多的车主选择将闲置车辆托管给租赁公司获取...
“无法继续起诉”,英国“中国间... 【环球时报综合报道】一场“中国间谍案”在英国政坛闹得沸沸扬扬,最终却以指控撤销落幕,留下一地争议。综...
锚定双向开放,政策组合拳料精准... 近日,德国中小企业总部集聚区(芜湖)揭牌,该集聚区将重点聚焦汽车零部件、高端智能制造等领域的德国“隐...
多元化解涉企纠纷(金台锐评) 张天培 企业遇到纠纷,只有诉至法庭才能解决?某电气设备公司因迟迟收不到货款,一气之下将某建设公司告上...
福登:艰难平局背后的成长与未来... 在9月22日的英超赛场上,曼城与阿森纳的对决吸引了无数球迷的目光。这场比赛以1-1的平局收场,曼城在...
硅谷高管忙着评估影响,白宫官员... 【环球时报驻美国特约记者 李准 环球时报特约记者 任重 余见】美国总统特朗普19日签署公告,将企业为...
字节跳动:将按中国法律推进Ti... 丨2025年9月15日—9月21日丨 #电商零售 NO.1 字节跳动:将按中国法律推进TikTok相...
西安一男孩在小区玩耍坠入深井身... 有媒体称,9月20日,西安11岁男孩小航在小区楼下玩耍时坠入深井,当晚不幸去世。目前,警方、住建、应...
全家人傻眼!62岁农村大爷3个... 近日,河南周口的的何女士求助@小莉帮忙,称自己意外发现了父亲的一个惊天秘密!这究竟是怎么回事呢? 据...