nginx调优(二)

news2025/4/20 11:41:07

一、event模块:

用于配置服务器的事件驱动机制的模块。它定义了 Nginx 如何处理并发连接和网络事件,以及如何与底层操作系统的事件机制交互。

  1.最大并发连接数:

worker_connections  65536;

  2.选择事件驱动:

   nginx默认使用epoll时间驱动类型:

   use epoll;     ##不写默认是epoll

  3.互斥锁:

    使用互斥锁来限制同时只有一个 worker 进程能够接受新的连接。在高并发环境中可以提高性能和稳定性。在高流量和高并发的情况下,使用 accept_mutex on; 可能会导致性能下降,因为每个 worker 进程在接受新连接时都需要等待互斥锁的释放。

accept_mutex on;

#追求稳定打开

4.网络多连接:

multi_accept 设置为 on 时,Nginx 的 worker 进程会一次性接受多个新连接,在高并发环境中,可以提高性能。可能会导致某些 worker 进程在某一时刻接受了更多的连接,而其他进程接受较少的连接。这可能会影响负载均衡。(建议设置on,处理高并发)

multi_accept on; 

二、http模块:

     是用于配置 HTTP 服务器功能的核心模块。定义和管理 HTTP 服务、虚拟主机、反向代理、负载均衡、缓存、访问控制等一系列与 Web 服务器相关的功能。

1.server块 基于域名构建虚拟主机:

  1.1 指定子配置文件:

    多个服务编写在不同的子配置文件中,可以更好地管理。

mkdir -p /apps/nginx/conf.d

vim /apps/nginx/conf/nginx.conf  

    include       /apps/nginx/conf.d/*.conf;

 1.2 编写子配置文件:

cd /apps/nginx/conf.d

vim pc.conf

    server {
        listen 80;
        server_name www.wzw.com;
        root /apps/nginx/html/pc/;
    }

vim m.conf

    server {
        listen 80;
        server_name m.wzw.com;
        root /apps/nginx/html/m/;
    }

 

1.3 构建数据文件:

1.创建文件夹

mkdir /apps/nginx/html/{pc,m}

2.构建数据

echo pc > /apps/nginx/html/pc/index.html
echo mmm > /apps/nginx/html/m/index.html

nginx -s reload

1.4 测试:

客户机更改host文件:

vim /etc/hosts

    192.168.88.100 www.wzw.com m.wzw.com

 

 1.5 基于端口:

   更改子配置文件

server{
        listen 192.168.91.100:80;
        server_name www.wzw.com;
        root /data/nginx/html/pc;

}

server{
        listen   192.168.91.100:8080;
        server_name m.wzw.com;
        root  /data/nginx/html/m;
}

1.6 基于IP:

    需要添加一块虚拟网卡

ifconfig ens33:0 192.168.88.101

 更改子配置文件IP

server{
        listen 192.168.91.100;
        server_name www.wzw.com;
        root /data/nginx/html/pc;

}

server{
        listen   192.168.91.101;
        server_name m.wzw.com;
        root  /data/nginx/html/m;
}

2.alias 设置别名:

server {
   listen 80;
   server_name www.wzw.com;
   location /nwes {
        root /data/nginx/html/pc/;
        #相当于追加  将文件夹news追加到/data/nginx/html/pc/news
        }
   location /study{
        alias /mnt/nginx/sports/;
        #相当于替换访问路径 你访问 study  就是访问/mnt/nginx/sports
        }
}

3.location:

   在一个server中location配置段可存在多个,用于实现从uri到文件系统的路径映射;ngnix会根据用户请求的URI来检查定义的所有location,按一定的优化级找出一个最佳匹配。

 3.1 格式:

location [ = | ~ | ~* | ^~ ] uri { ... }

=                  #需要请求字串与uri精确匹配,大小敏感,如果匹配成功就停止立即处理请求
^~                #表示包含正则表达式,并且匹配以指定的正则表达式开头,不区分字符大小写
~                  #表示包含正则表达式,并且区分大小写
~*                #表示包含正则表达式,并且不区分大写
不带符号              #匹配起始于此uri的所有的uri
 \                 #表示包含正则表达式并且转义字符。可以将 . * ?等转义为普通符号

#匹配优先级从高到低:
=,   ^~ ,   ~/~* ,  不带符号

  3.2 案例:

location = / {
   [ configuration A ]
}
location / {
   [ configuration B ]
}
location /documents/ {
   [ configuration C ]
}
location ^~ /images/ {
   [ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ {
   [ configuration E ]
}

访问路径是    /                     
访问路径是    /index.html
访问路径是    /documents/document.html
访问路径是    /images/1.gif
访问路径是    /documents/1.jpg

4.access四层控制模块:

location / {
    allow 192.168.1.0/24;
    allow 10.1.1.0/16;
    deny  all;
}

  匹配了之后就不往下匹配了,所以范围小的往上放

5.验证模块:

server {
        listen 80;
        server_name www.wzw.com;
        root /apps/nginx/html/pc/;

          location = / {
            root /apps/nginx/html/pc;
}

location /admin{
        auth_basic      "admin site";
        auth_basic_user_file /apps/nginx/conf.d/.httpuser;
 }
}

5.1 htpasswd:

  此命令来自于 httpd-tools 包,如果没有安装 一下即可

yum -y install httpd-tools

第一次生成文件:

htpasswd -bc 文件路径 姓名 密码           直接将密码跟在后面

第二次生成文件:

htpasswd -b  文件路径 姓名 密码           直接将密码跟在后面 

-c  代表新建用户名和密码对应的文件
-b  将密码跟在用户名后

 

 

6.自定义错误界面:

server {
        listen 80;
        server_name www.wzw.com;
        root /apps/nginx/html/pc/;
        error_page 404 /40x.html;   
        location = /40x.html {
        root /apps/nginx/html/pc/error/;

          location = / {
            root /apps/nginx/html/pc;   ##当出现404就去找40x.html这个文件
}

location /admin{
        auth_basic      "admin site";
        auth_basic_user_file /apps/nginx/conf.d/.httpuser;
 }

}



 

6.1 自定义状态码:

server {
        listen 80;
        server_name www.wzw.com;
        error_page 404 =302 /40x.html;    #建议使用302
        location = /40x.html {
        root /apps/nginx/html/pc/error/;

          location = / {
            root /apps/nginx/html/pc;
}

location /admin{
        auth_basic      "admin site";
        auth_basic_user_file /apps/nginx/conf.d/.httpuser;
 }


}
把错误码 404 指定成302    注意此处的  40x.html 需要真实存在建立的页面必须一致

 7.日志位置存放:

server {
        listen 80;
        server_name www.wzw.com;
        root /apps/nginx/html/pc/;
        access_log /apps/nginx/logs/wzw_access.log;

  ##添加日志存放位置

          location = / {
            root /apps/nginx/html/pc/;
}
 location /admin{
        root /apps/nginx/html/pc/admin.html;
        auth_basic    "admin site";
        auth_basic_user_file /apps/nginx/conf.d/.httpuser;
}
}

8.检测文件是否存在:

    try_files会按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件夹),如果所有文件或文件夹都找不到,会进行一个内部重定向到最后一个参数。只有最后一个参数可以引起一个内部重定向,之前的参数只设置内部URI的指向。最后一个参数是回退URI且必须存在,否则会出现内部500错误。

server {
        listen 80;
        server_name 192.168.88.100;
        root /apps/nginx/html;

          location  / {
          root /apps/nginx/html;
          try_files $uri  $uri.html $uri/index.html /about/default.html;
}
}

当test存在时:

 当test被删除时,会找到test.html:

 没有匹配项时,托底的default:

 9.作为下载服务器配置:

server {
        listen 80;
        server_name 192.168.88.100;
        root /apps/nginx/html;

location /download {
        autoindex on;              #开启下载服务器
        autoindex_exact_size on;   #开启确切大小
        autoindex_localtime on;    #使用当地时间
        limit_rate 1024k;          #所有人限速1024k,默认单位是字节数
        alias /opt/download;       #别名,当访问download时跳转到/opt/download
}
}

mkdir /opt/download


mount /dev/sr0 /opt/download/

 10.其他设置:

   limit_except method ... { ... },仅用于location
#限制客户端使用除了指定的请求方法之外的其它方法 
method:GET, HEAD, POST, PUT, DELETE,MKCOL, COPY, MOVE, OPTIONS, PROPFIND, 
PROPPATCH, LOCK, UNLOCK, PATCH
limit_except GET {
 allow 192.168.91.101;
 deny all;
}
#除了GET和HEAD 之外其它方法仅允许192.168.1.0/24网段主机使用

三、高级配置:

  1.网页的状态页:

      基于nginx 模块 ngx_http_stub_status_module 实现,在编译安装nginx的时候需要添加编译参数 --with-http_stub_status_module,否则配置完成之后监测会是提示语法错误注意: 状态页显示的是整个服务器的状态,而非虚拟主机的状态

   这里为了安全起见添加了验证模块:

server {
        listen 80;
        server_name 192.168.88.100;
        root /apps/nginx/html/pc/;

location /admin{
        stub_status;                          #启用status
        auth_basic    "admin site";
        auth_basic_user_file /apps/nginx/conf.d/.httpuser;
 }
}

1.1.状态信息介绍:

Active connections: 
#当前处于活动状态的客户端连接数,包括连接等待空闲连接数=reading+writing+waiting
accepts:
#统计总值,Nginx自启动后已经接受的客户端请求的总数。
handled:
#统计总值,Nginx自启动后已经处理完成的客户端请求总数,通常等于accepts,除非有因worker_connections限制等被拒绝的连接
requests:
#统计总值,Nginx自启动后客户端发来的总的请求数。
Reading:
#当前状态,正在读取客户端请求报文首部的连接的连接数,数值越大,说明排队现象严重,性能不足
Writing:
#当前状态,正在向客户端发送响应报文过程中的连接数,数值越大,说明访问量很大
Waiting:
#当前状态,正在等待客户端发出请求的空闲连接数,开启 keep-alive的情况下,这个值等于active – (reading+writing)

 2.Nginx 第三方模块:

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

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

相关文章

【Java】Java基础

环境准备 安装JDK和JRE 下载JDK,可以在官网Java Downloads | Oracle 中国下载,但是这里需要注册才能够下载。在Index of java-local/jdk (huaweicloud.com)也可以下载到,但是版本比较老,关系不大,直接下载&#xff0…

OpenGL-入门-BMP像素图glReadPixels

glReadPixels函数用于从帧缓冲区中读取像素数据。它可以用来获取屏幕上特定位置的像素颜色值或者获取一块区域内的像素数据。下面是该函数的基本语法: void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *da…

【Kafka】Kafka Stream简单使用

一、实时流式计算 1. 概念 一般流式计算会与批量计算相比较。在流式计算模型中,输入是持续的,可以认为在时间上是无界的,也就意味着,永远拿不到全量数据去做计算。同时,计算结果是持续输出的,也即计算结果…

微信小程序 基于Android的美容理发师预约管理系统

,本系统主要根据管理员、用户及理发师的实际需要,方便用户利用互联网实现对商品信息进行立即订购,同时让管理者可以通过这个系统对用户实际需求以及各信息进行管理。设计该系统主要目的是为了方便用户、理发师可以有一个非常好的平台体验&…

Mac下Docker Desktop开启本地远程访问

mac系统下,为了在idea里方便使用docker,需要开启Docker Desktop本地远程访问。 开启方法是在设置-高级下,开启“Allow the default Docker socket to be used (requires password)”,特此记录一下: 开启后的效果&…

iOS swift5 扫描二维码

文章目录 1.生成二维码图片2.扫描二维码(含上下扫描动画)2.1 记得在info.plist中添加相机权限描述 1.生成二维码图片 import UIKit import CoreImagefunc generateQRCode(from string: String) -> UIImage? {let data string.data(using: String.En…

计算机视觉:深层卷积神经网络的构建

本文重点 上一节课程中我们学习了单卷积层的前向传播,本次课程我们构建一个具有三个卷积层的卷积神经网络,然后从输入(39*39*3)开始进行三次卷积操作,我们来看一下每次卷积的输入和输出维度的变化。 第一层 第一层使用3*3*3的过滤器来提取特征,那么f[1]=3,然后步长s[…

4. 池化层相关概念

4.1 池化层原理 ① 最大池化层有时也被称为下采样。 ② dilation为空洞卷积,如下图所示。 ③ Ceil_model为当超出区域时,只取最左上角的值。 ④ 池化使得数据由5 * 5 变为3 * 3,甚至1 * 1的,这样导致计算的参数会大大减小。例如1080P的电…

PHP8的匿名函数-PHP8知识详解

php 8引入了匿名函数(Anonymous Functions),它是一种创建短生命周期的函数,不需要命名,并且可以在其作用域内直接使用。以下是在PHP 8中使用匿名函数的知识要点: 1、创建匿名函数,语法格式如下&…

7.react useReducer使用与常见问题

useReducer函数 1. useState的替代方案.接收一个(state, action)>newState的reducer, 并返回当前的state以及与其配套的dispatch方法2. 在某些场景下,useReducer会比useState更加适用,例如state逻辑较为复杂, 且**包含多个子值**,或者下一个state依赖于之前的state等清楚us…

postgresql-日期函数

postgresql-日期函数 日期时间函数计算时间间隔获取时间中的信息截断日期/时间创建日期/时间获取系统时间CURRENT_DATE当前事务开始时间 时区转换 日期时间函数 PostgreSQL 提供了以下日期和时间运算的算术运算符。 计算时间间隔 age(timestamp, timestamp)函数用于计算两…

Uniapp笔记(五)uniapp语法4

本章目标 授权登录【难点、重点】 条件编译【理解】 小程序分包【理解】 一、授权登录 我的模块其实是两个组件&#xff0c;一个是登录组件&#xff0c;一个是用户信息组件&#xff0c;根据用户的登录状态判断是否要显示那个组件 1、登录的基本布局 <template><…

LLMs NLP模型评估Model evaluation ROUGE and BLEU SCORE

在整个课程中&#xff0c;你看到过类似模型在这个任务上表现良好&#xff0c;或者这个微调模型在性能上相对于基础模型有显著提升等陈述。 这些陈述是什么意思&#xff1f;如何形式化你的微调模型在你起初的预训练模型上的性能改进&#xff1f;让我们探讨一些由大型语言模型开…

【Linux】【驱动】注册字符设备号

【Linux】【驱动】注册字符设备号 1. 绪论1 、静态分配设备号2、动态分配设备号3、注销设备号 2 实现的代码3 加载驱动程序 1. 绪论 在之前杂项设备的时候&#xff0c;设备号是固定的&#xff0c;字符设备就需要自己去申请设备号了&#xff0c; 申请设备号有两个方式&#xff…

2024年Android应用开发的6大框架

2024年Android应用开发的6大Framwork 2024年Android应用开发的6大框架&#xff0c;影响移动应用开发领域&#xff0c;改变应用的创建和用户使用方式。随着移动应用市场不断发展&#xff0c;对灵活和高效框架的需求也在增加。这些框架为开发人员提供资源和工具&#xff0c;构建…

手写RPC框架--1.介绍与网络传输

介绍与网络传输 0.介绍a.什么是rpcb.rpc的通信流程 1.网络传输a.零拷贝1) 零拷贝的概念2) Netty的零拷贝 b.IO多路复用c.Netty入门1) netty中的helloworld d.封装报文1) 协议结构2) 模拟封装报文 e.序列化f.压缩和解压缩 0.介绍 a.什么是rpc rpc 的全称是 Remote Procedure C…

S905L3A(M401A)拆解, 运行EmuELEC和Armbian

关于S905L3A / S905L3AB S905Lx系列没有公开资料, 猜测是Amlogic用于2B的芯片型号, 最早的 S905LB 是 S905X 的马甲, 而这个 S905L3A/S905L3AB 则是 S905X2 的马甲, 因为在性能评测里这两个U的得分几乎一样. S905L3A/S905L3AB 和 S905X2, S905X3 一样 GPU 是 G31, 相比前一代的…

【Linux】深入理解文件操作

文章目录 初次谈论文件重温C语言文件操作系统文件操作接口openwriteread 再次谈论文件文件描述符文件描述符的分配规则 重定向什么是重定向重定向的本质系统调用接口实现重定向<、>、>> 初次谈论文件 开始之前先谈论一下关于文件的一些共识性问题。 一个文件可以…

(笔记一)利用open_cv在图像上进行点标记,文字注记,画圆、多边形、椭圆

&#xff08;1&#xff09;CV2中的绘图函数&#xff1a; cv2.line() 绘制线条cv2.circle() 绘制圆cv2.rectangle() 绘制矩形cv2.ellipse() 绘制椭圆cv2.putText() 添加注记 &#xff08;2&#xff09;注释 img表示需要绘制的图像color表示线条的颜色&#xff0c;采用颜色矩阵…

联想电脑装系统无法按F9后无法从系统盘启动的解决方案

开机时按F9发现没有加载系统盘. 打开BIOS设置界面&#xff0c;调整设置如下: BOOT MODE: Legacy Support.允许legacy方式boot. BOOT PRIORITY: Legacy First. Legacy方式作为首选的boot方式. USB BOOT: ENABLED. 允许以usb方式boot. Legacy: 这里设置legacy boot的优先级,…