Nginx优化方案

news2025/7/12 8:00:56

目录

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/8777.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

吉莱斯皮随机模拟算法(SSA)(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

【K8S系列】第十讲:Knative 简介

目录 一、 Serverless介绍 二、Knative 介绍 2.1 Knative 的定位 2.2 Knative的组成 2.2.1 Build 构建系统 2.2.2 Serving:服务系统 2.2.3 Eventing:事件系统 补充: 三、总结: 一、 Serverless介绍 在讲Knative之前&a…

【毕业设计】机器视觉手势检测和识别系统 - python 深度学习

文章目录0 前言1 实现效果2 技术原理2.1 手部检测2.1.1 基于肤色空间的手势检测方法2.1.2 基于运动的手势检测方法2.1.3 基于边缘的手势检测方法2.1.4 基于模板的手势检测方法2.1.5 基于机器学习的手势检测方法3 手部识别3.1 SSD网络3.2 数据集3.3 最终改进的网络结构4 最后0 前…

线程池源码解析 2.工作原理与内部结构

线程池源码解析—工作原理与内部结构 工作原理 概述 线程池是线程的池子,本质上是通过单个线程执行多个并发任务,使得尽量少的创建线程,减少开销。在线程池内部,是没有区分核心线程和非核心线程的,是通过 Set 集合的…

拒绝内卷,阿里架构师整理的这份Java核心手册,堪称最强

2022年注定是不寻常的一年,在今年因为疫情以及各大大厂纷纷传来裁员的消息,引得整个互联网圈动荡不堪。腾讯裁员30%、京东、百度、字节等大厂都在纷纷裁员,引的这些中厂和小厂也跟风裁员。 这个时候外部的各种变化愈发证明一个重要的一点&am…

2022.11.7-11.13 AI行业周刊(第123期):技术人员的职业发展在哪里?

篇章一:技术人员的职业发展 上周和大学时的舍友聊天,交流当前大家的生活状态。 我们已经本科毕业将近10年了,他目前也有两个孩子,在湖北的一个地级市中,从事的是通信行业。 不过随着工作的时间越久,他发…

软件测试面试真题 | 黑盒测试和白盒测试的基本概念是什么?

在软件测试的面试中,什么是黑盒测试,什么是白盒测试是特别容易被问到的一个问题。 面试官问出这个问题,其实考察的是大家对于软件测试基础理论的掌握程度。下面来梳理一下这个问题的回答思路。 黑盒测试 黑盒测试会把被测的软件看作是一个…

只会加班的项目经理,迟早被淘汰

早上好,我是老原。 最近看到一个文章的标题「废掉一个人最好的方式,就是让他忙到没时间学习」,具体内容是什么我还没有细读,只看完标题,有一丝心酸和自豪: 有那么一群人,在玻璃渣里找糖吃&…

皮带跑偏检测系统

皮带跑偏检测系统对皮带运行状态进行全天候实时监测,一旦皮带跑偏检测系统监测到现场皮带跑偏、撕裂、堆煤、异物等异常情况时,系统马上开展警报,通知后台,并提醒相关人员及时处置。皮带跑偏检测系统并把警报截屏和视频储存到数据…

附参考文献丨艾美捷Cholesterol胆固醇说明书

Cholesterol胆固醇以固体形式提供。可以通过将胆固醇溶解在所选择的溶剂中来制备储备溶液,该溶剂应使用惰性气体吹扫。胆固醇以约30mg/ml的浓度溶于有机溶剂氯-仿中。 艾美捷Cholesterol胆固醇参数: CAS号:57-88-5 正式名称:&am…

自动驾驶入门:预测

目录 概念 预测方式 障碍物预测 递归神经网络在预测中的应用 轨迹生成 概念 无人车是在许多物体间穿梭行驶,其中许多物体本身就是一直在移动的,比如像其他汽车、自行车、行人。无人车需要预测这些物体的行为,这样才能确保做出最佳决策。…

工作中对InheritableThreadLocal使用的思考

最近在工作中结合线程池使用 InheritableThreadLocal 出现了获取线程变量“错误”的问题,看了相关的文档和源码后在此记录。 1. 先说结论 InheritableThreadLocal 只有在父线程创建子线程时,在子线程中才能获取到父线程中的线程变量;当配合…

coding持续集成

先看看官网的一些操作提示 1、创建SSH密钥对 2、创建制品仓库 看完官网的介绍,持续集成需要提前准备好SSH凭证和制品仓库,下面将让我们动手开始吧 一、创建SSH密钥对 登录服务器控制台,创建 SSH 密钥对。获取私钥对后将其录入至 CODING 中…

Netty源码阅读(2)之——服务端源码梗概

上文我们把客户端源码梗概大致了解了一下,这样再了解服务端源码就轻松一点,我们将从服务端和客户端的区别着手去解析。 目录 区别 ④ ③ ① ⑤ 区别 ④ 客户端:.option(ChannelOption.TCP_NODELAY, true) 在TCP/IP协议中,无论…

贪心算法小结

A-金银岛 某天KID利用飞行器飞到了一个金银岛上,上面有许多珍贵的金属,KID虽然更喜欢各种宝石的艺术品,可是也不拒绝这样珍贵的金属。但是他只带着一个口袋,口袋至多只能装重量为w的物品。岛上金属有s个种类, 每种金属重量不同&am…

ffmpeg视频编解码 demo初探(一)(包含下载指定windows版本ffmpeg)分离视频文件中的视频流每一帧YUV图片

参考文章1:YUV数据流编码成H264 参考文章2:【FFmpeg编码实战】(1)将YUV420P图片集编码成H264视频文件 文章目录第一个项目:分离视频文件中的视频流每一张图片弯路步入正轨下载官方编译的ffmpeg4.3(win64-g…

SpringFramework:SpringBean的生命周期

SpringFramework:SpringBean的生命周期 文章目录SpringFramework:SpringBean的生命周期一、SpringBean的生命周期1. 实例化 Bean2. 填充属性(DI)3. 初始化4. 销毁二、BeanDefinition1. 基本概念2. 大致结构3. Spring 构建它的优势…

深度学习必备Python基础知识充电2

一、python中的类 1.1 python中是有内置的数据类型的 intstr 1.2 创建新的数据类型 自定义类来实现这样的功能 二、年轻人的第一个python类 2.1 来尝试一下 # 年轻人的第一个自定义python类class Man:def __init__(self, name):self.name nameprint(initialized Succes…

【优雅的参数验证@Validated】@Validated参数校验的使用及注解详解——你还在用if做条件验证?

Validated参数校验的使用及注解详解你还在用if做条件验证吗?一、优雅的参数验证Validated1.Valid和Validated的用法(区别)2.引入并使用Validated参数验证二、javax.validation.constraints下参数条件注解详解三、自定义条件注解你还在用if做条件验证吗? …

【云原生之K8s】 Pod控制器

文章目录一、Pod控制器及其功用二、控制器的类型1.Deployment2.StatefulSet2.1 StatefulSet的组成2.2 常规service和无头服务区别2.3 示例小结3.DaemonSet4.Job5.CronJob一、Pod控制器及其功用 Pod控制器,又称之为工作负载(workload)&#x…