Nginx(参数设置总结)

文章目录

  • Nginx(工作机制&参数设置)
    • 1.Master&Worker工作机制
        • 1.示意图
        • 2.解释
        • 3.Nginx争抢机制
        • 4.accept_mutex解决惊群现象
        • 5.多进程结构不用多线程结构的好处
        • 6.IO多路复用,实现高并发
        • 7.优势
    • 2.参数配置
        • 1.work_processes
          • 1.基本介绍
          • 2.worker_cpu_affinity理解
          • 3.配置实例
          • 4.具体配置
            • 1.进入nginx安装目录,编辑nginx.conf 配置文件,开启两个工作进程,第一个工作进程使用第一个cpu,第二个工作进程使用第二个cpu
            • 2.重载使配置文件生效 `./sbin/nginx -s reload`
            • 3.查看nginx的进程 `ps -ef | grep nginx` ,可以看到有两个工作进程
        • 2.worker_connection
          • 1.基本介绍
          • 2.计算最大并发数
          • 3.配置linux最大打开文件数(是work_connection可以设置的最大值)
            • 1.查看最大打开文件数 `ulimit -n`
            • 2.临时修改最大打开文件数为65535(重启后失效)`ulimit -n 65535`
            • 3.三种永久修改方式
            • 4.使用第三种方式 `vim /etc/security/limits.conf`
            • 5.重启 reboot,然后 `ulimit -n`查看最大打开文件数
            • 6.如果报错内核错误,编辑/etc/pam.d/login配置文件
  • Nginx(总结)
    • 1.Nginx部署核心机制
        • 1.部署微服务到服务器并提供信息
          • 1.服务发现(ip + 端口)
          • 2.资源路径 (必须包含上下文路径)
        • 2.部署Nginx服务到服务器并提供信息
          • 服务发现(ip + 端口)
        • 3.示意图
        • 4.网络问题
          • 1.确保Nginx服务和Tomcat服务可以ping通
          • 2.浏览器所在服务器和Nginx可以ping通
          • 3.Tomcat开启8080端口(如果与Nginx在同一服务器就可以不开),Nginx开启80端口
        • 5.浏览器请求方式
          • 1.Nginx 服务发现(http://192.168.200.128:80) + 资源路径 (/api/say/hello)
          • 2.url = http://192.168.200.128:80/api/say/hello
          • 3.示意图
        • 6.nginx.conf 解析浏览器请求
          • 1.server块全局配置 ***Nginx服务***(ip/域名 + 端口)
          • 2.location块规则,***匹配资源路径*** /api/xxx,这里匹配到 /api/say/hello
          • 3.location块proxy_pass规则,***服务发现***(http://192.168.200.128:8080)
          • 4.***路径拼接*** http://192.168.200.128:8080 +/api/say/hello
          • 5.完整配置
          • 6.解析步骤
        • 7.启动测试
          • 1.启动Tomcat
          • 2.启动Nginx
          • 3.浏览器请求 http://192.168.200.128:8080/api/say/hello
        • 8.Nginx部署常用命令
          • 1.开启防火墙 80 并查询是否成功
          • 2.启动Nginx
            • 1.进入安装目录 /usr/local/nginx
            • 2.启动Nginx(指定配置文件为安装目录/nginx.conf)
            • 3.查看Nginx进程
            • 4.查看Nginx是否在监听
          • 3.编辑Nginx配置文件
            • 1.进入安装目录 /usr/local/nginx
            • 2.编辑配置文件(也有可能是conf/nginx.conf)
          • 4.重载Nginx**(配置文件更新时使用)**
            • 1.进入安装目录 /usr/local/nginx
            • 2.重载
          • 5.关闭Nginx
            • 1.进入安装目录 /usr/local/nginx
            • 2.关闭
          • 6.查看所有开放的端口
        • 9.部署负载均衡
          • 1.部署:添加一台服务器,内容跟原来的一样,只是ip和端口不同
          • 2.网络问题
            • 保证新增的服务器和Nginx可以互相ping通
            • 开启新增服务器的8081端口
          • 3.请求:浏览器请求方式没有变化依然是Nginx的服务发现 + 资源路径
          • 4.解析:需要配置http全局块和server块
            • 1.http全局块
            • 2.server块
        • 10.Nginx部署核心机制总结
          • 1.部署:将资源部署在指定位置并画出示意图,体现ip+端口以及资源路径
          • 2.网络:确保网络畅通,防火墙开启
          • 3.请求:Nginx服务发现 + 资源路径
          • 4.解析:配置 nginx.conf 进行解析
    • 2.nginx.conf 配置文件详解
        • 1.location语法规则
          • 1.语法
          • 2.优先级
          • 3.匹配的规则
        • 2.实际常用规则模板
          • 1.第一个必选规则-精确匹配网站根目录(匹配到即返回)
          • 2.第二个必选规则-处理静态文件请求(匹配到即返回)
            • 有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用
          • 3.第三个规则就是通用规则,用来转发动态请求到后端应用服务器(匹配符合要求的最长location)
          • 4.常用规则小结
          • 5.nginx.conf 匹配口诀!
            • 1.Nginx服务(ip + 端口)
            • 2.匹配资源路径(根据location匹配资源路径)
            • 3.服务发现(匹配成功则根据 proxy_pass 服务发现)
            • 4.路径拼接(服务发现 与 匹配到的资源路径拼接得到资源)
    • 3.Nginx动静分离
        • 1.决定Nginx服务器要存放静态资源的目录
          • 这里指定图片的存放根路径为 /root/html/
        • 2.存放静态资源
        • 3.浏览器请求方式
          • 1.Nginx 服务发现(http://192.168.200.128:80) + 资源路径 (/search/image/cal.jpg)
          • 2.url = http://192.168.200.128:80/search/image/cal.jpg
          • 3.示意图
        • 4.nginx.conf 解析浏览器请求
          • 1.server块全局配置 ***Nginx服务***(ip/域名 + 端口)
          • 2.location块规则*匹配资源路径* ~* \.(jpg)$ 也就是匹配以.jpg结尾的资源路径,这里匹配到 /search/image/cal.jpg
          • 3.location块root规则,替换资源根路径,这里使用/root/html/来替换/search/image/cal.jpg中的/也就是最后的路径为http://192.168.200.128:80/root/html/search/image/cal.jpg
        • 5.完整配置
        • 6.静态资源的部署说明
          • 1.前端项目build到dist目录下
          • 2.举例dist/hello.html的资源路径就是/static/hello.html
          • 3.此时这个文件的全路径就是 服务发现(本机的ip + 端口) + /static/hello.html
          • 4.如果把这个 /static/hello.html放到Nginx的配置了root的目录下
          • 5.那么此时的浏览器请求方式就是 服务发现(Nginx的ip + 端口) + /static/hello.html
          • 6.静态资源的部署只需要将其放到配置了root的Nginx目录下,然后拦截静态资源,就可以使用服务发现 + 资源路径的方式请求资源

Nginx(工作机制&参数设置)

1.Master&Worker工作机制

1.示意图

image-20240407114952799

2.解释

image-20240407115121172

3.Nginx争抢机制

image-20240407115637074

4.accept_mutex解决惊群现象

image-20240407124315522

5.多进程结构不用多线程结构的好处

image-20240407124618560

6.IO多路复用,实现高并发

image-20240407125005306

7.优势

image-20240407125530674

2.参数配置

1.work_processes
1.基本介绍

image-20240407132323129

2.worker_cpu_affinity理解

image-20240407132438780

3.配置实例

image-20240407132532847

4.具体配置
1.进入nginx安装目录,编辑nginx.conf 配置文件,开启两个工作进程,第一个工作进程使用第一个cpu,第二个工作进程使用第二个cpu

image-20240407132940028

image-20240407132847257

2.重载使配置文件生效 ./sbin/nginx -s reload
3.查看nginx的进程 ps -ef | grep nginx ,可以看到有两个工作进程

image-20240407133701752

2.worker_connection
1.基本介绍

image-20240407134356938

image-20240407134518144

2.计算最大并发数

image-20240407134419880

image-20240407134321731

3.配置linux最大打开文件数(是work_connection可以设置的最大值)
1.查看最大打开文件数 ulimit -n

image-20240407134727846

2.临时修改最大打开文件数为65535(重启后失效)ulimit -n 65535

image-20240407134822060

3.三种永久修改方式

image-20240407135026332

4.使用第三种方式 vim /etc/security/limits.conf

image-20240407135226076

5.重启 reboot,然后 ulimit -n查看最大打开文件数

image-20240407135651788

6.如果报错内核错误,编辑/etc/pam.d/login配置文件

image-20240407135754281

Nginx(总结)

1.Nginx部署核心机制

1.部署微服务到服务器并提供信息
1.服务发现(ip + 端口)
2.资源路径 (必须包含上下文路径)
2.部署Nginx服务到服务器并提供信息
服务发现(ip + 端口)
3.示意图

image-20240407202909151

4.网络问题
1.确保Nginx服务和Tomcat服务可以ping通
2.浏览器所在服务器和Nginx可以ping通
3.Tomcat开启8080端口(如果与Nginx在同一服务器就可以不开),Nginx开启80端口
5.浏览器请求方式
1.Nginx 服务发现(http://192.168.200.128:80) + 资源路径 (/api/say/hello)
2.url = http://192.168.200.128:80/api/say/hello
3.示意图

image-20240407214826110

6.nginx.conf 解析浏览器请求
1.server块全局配置 Nginx服务(ip/域名 + 端口)

image-20240407204251352

2.location块规则,匹配资源路径 /api/xxx,这里匹配到 /api/say/hello
3.location块proxy_pass规则,服务发现(http://192.168.200.128:8080)
4.路径拼接 http://192.168.200.128:8080 +/api/say/hello
5.完整配置
    server {listen       80;server_name  192.168.200.128;location /api/ {proxy_pass http://192.168.200.128:8080;}}
6.解析步骤

image-20240407215346712

7.启动测试
1.启动Tomcat
2.启动Nginx
3.浏览器请求 http://192.168.200.128:8080/api/say/hello
8.Nginx部署常用命令
1.开启防火墙 80 并查询是否成功
firewall-cmd --permanent --add-port=80/tcp && firewall-cmd --reload && firewall-cmd --query-port=80/tcp
2.启动Nginx
1.进入安装目录 /usr/local/nginx
cd /usr/local/nginx
2.启动Nginx(指定配置文件为安装目录/nginx.conf)
./sbin/nginx -c nginx.conf
3.查看Nginx进程
ps -ef | grep nginx
4.查看Nginx是否在监听
netstat -anp | grep nginx
3.编辑Nginx配置文件
1.进入安装目录 /usr/local/nginx
cd /usr/local/nginx
2.编辑配置文件(也有可能是conf/nginx.conf)
vim nginx.conf
4.重载Nginx**(配置文件更新时使用)**
1.进入安装目录 /usr/local/nginx
cd /usr/local/nginx
2.重载
./sbin/nginx -s reload
5.关闭Nginx
1.进入安装目录 /usr/local/nginx
cd /usr/local/nginx
2.关闭
./sbin/nginx -s stop
6.查看所有开放的端口
firewall-cmd --list-all
9.部署负载均衡
1.部署:添加一台服务器,内容跟原来的一样,只是ip和端口不同

image-20240408093125486

2.网络问题
3.请求:浏览器请求方式没有变化依然是Nginx的服务发现 + 资源路径
4.解析:需要配置http全局块和server块
1.http全局块
  • 配置两个服务器的ip + 端口
upstream sunservers {server 192.168.200.128:8080;server 192.168.200.129:8081;
}
2.server块
  • 修改proxy_pass为上面的upstream的名字sunservers
    server {listen       80;server_name  192.168.200.128;location /api/ {proxy_pass http://sunservers;}}
10.Nginx部署核心机制总结
1.部署:将资源部署在指定位置并画出示意图,体现ip+端口以及资源路径
2.网络:确保网络畅通,防火墙开启
3.请求:Nginx服务发现 + 资源路径
4.解析:配置 nginx.conf 进行解析
  • Nginx服务
  • 匹配资源路径
  • 服务发现
  • 路径拼接

2.nginx.conf 配置文件详解

1.location语法规则
1.语法

image-20240406150606136

2.优先级
  • =:精确匹配
  • ^~:匹配以某个路径开头的
  • ~:正则匹配,区分大小写
  • ~*:正则匹配,不区分大小写
  • 普通匹配
3.匹配的规则
  1. 非普通匹配:只要按照优先级匹配到了,就直接返回
  2. 普通匹配:会匹配符合要求的最长路径
  3. 关于普通匹配 /api/ 就相当于/api/* 即只要资源路径的前缀是/api/即可
2.实际常用规则模板
1.第一个必选规则-精确匹配网站根目录(匹配到即返回)
  • Nginx服务 + / 可以匹配到这个location
  • proxy_pass 表示,当匹配到这个的时候,将请求转发到 http://tomcat:8080/index + /
    location = / {proxy_pass http://tomcat:8080/index}
2.第二个必选规则-处理静态文件请求(匹配到即返回)
有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用
  • Nginx服务 + /static/* 可以匹配到这个location
  • root表示,匹配到之后在本服务下找 /webroot/res/ + **/static/***中间的/会自动去掉
    location ^~ /static/ {# 请求/static/a.txt 将被映射到实际目录文件:/webroot/res/static/a.txtroot /webroot/res/;}
  • *Nginx服务 + .(gif|jpg|jpeg|png|css|js|html|ico) 可以匹配到这个location
  • root表示,匹配到之后在本服务下找**/webroot/res/ + .(gif|jpg|jpeg|png|css|js|html|ico)* 中间的/会自动去掉
    location ~* \.(gif|jpg|jpeg|png|css|js|html|ico)$ {root /webroot/res/;}
3.第三个规则就是通用规则,用来转发动态请求到后端应用服务器(匹配符合要求的最长location)
  • Nginx服务 + /* 可以匹配到这个location
  • 如果匹配到则会将请求转发到 http://tomcat:8080/ + /*
    location / {proxy_pass http://tomcat:8080/}
4.常用规则小结
  • 实际上使用的也就是一个精确匹配一个处理静态文件的匹配,还有一堆通用匹配
  • 前两个匹配是正则匹配,只要匹配到了就返回
  • 最后的一堆都是通用匹配,匹配到了不一定马上返回,直到匹配到符合要求的最长location才会返回
5.nginx.conf 匹配口诀!
1.Nginx服务(ip + 端口)
2.匹配资源路径(根据location匹配资源路径)
3.服务发现(匹配成功则根据 proxy_pass 服务发现)
4.路径拼接(服务发现 与 匹配到的资源路径拼接得到资源)

3.Nginx动静分离

1.决定Nginx服务器要存放静态资源的目录
这里指定图片的存放根路径为 /root/html/
2.存放静态资源

image-20240407222733554

3.浏览器请求方式
1.Nginx 服务发现(http://192.168.200.128:80) + 资源路径 (/search/image/cal.jpg)
2.url = http://192.168.200.128:80/search/image/cal.jpg
3.示意图

image-20240407222955592

4.nginx.conf 解析浏览器请求
1.server块全局配置 Nginx服务(ip/域名 + 端口)

image-20240407204251352

2.location块规则匹配资源路径 ~* .(jpg)$ 也就是匹配以.jpg结尾的资源路径,这里匹配到 /search/image/cal.jpg
3.location块root规则,替换资源根路径,这里使用/root/html/来替换/search/image/cal.jpg中的/也就是最后的路径为http://192.168.200.128:80/root/html/search/image/cal.jpg
5.完整配置
    server {listen       80;server_name  192.168.200.128;location ~* \.(jpg)$ {root /root/html/;}}
6.静态资源的部署说明
1.前端项目build到dist目录下
2.举例dist/hello.html的资源路径就是/static/hello.html
3.此时这个文件的全路径就是 服务发现(本机的ip + 端口) + /static/hello.html
4.如果把这个 /static/hello.html放到Nginx的配置了root的目录下

image-20240407231839189

5.那么此时的浏览器请求方式就是 服务发现(Nginx的ip + 端口) + /static/hello.html
6.静态资源的部署只需要将其放到配置了root的Nginx目录下,然后拦截静态资源,就可以使用服务发现 + 资源路径的方式请求资源

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Javaweb项目 博客系统(后端代码编写)

准备工作,创建项目 引入依赖 1.servlet 2.mysql 3.jackson 导入前端代码 1.博客列表页 2.博客详情页 3.登录页 4.博客编辑页 接下来要进行的操作就是两大方面 1.前端和服务器的交互 2.服务器和数据库的交互 进行数据库设计创建数据库和数据表 一把需要把建库建表的操作写错sq…

C语言实验-数组、字符串以及指针

一&#xff1a; 求一个NN矩阵主、次对角线上所有元素之和。矩阵输入、矩阵输出、矩阵对角线求和分别用三个子函数实现。&#xff08;N的值由用户从键盘输入&#xff09; #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h>void print(int(*arr…

323_C++_QT_QProcess执行cmd解压、压缩、删除tar.gz等等其他压缩包文件到指定目录,不需要外部库,QT自带API的就行

// decompressPath : 解压到此目录 // fileName : 解压的tar.gz文件名executeCommand(decompressPath , QString::fromStdString(fileName));// 开始解压 void executeCommand

获取和修改线程的id和名称

当创建两个线程时&#xff0c;需要获取线程的id和名称&#xff0c;这样可以知道是哪个线程执行的 方式1&#xff1a;this.getId()和this.getName() 写代码注意点&#xff1a;要写对类名 方式2&#xff1a;Thread.currentThread().getId()和Thread.currentThread().getName() 修…

初识Node.js-REPL(详解交互式解释器)

目录 一、REPL介绍 1.概念 2.主要特点和用途 3.应用 二、 REPL语法 1.简单的表达式运算 2.使用变量 3.多行表达式 下划线(_)变量 三、REPL 命令 四、停止 REPL 五、Gif 实例演示 六、REPL应用实例 七、总结 一、REPL介绍 1.概念 Read&#xff08;读取&#xff09…

类和对象、this指针、类里的默认生成函数

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…

如何恢复回收站中被删除的文件?3个恢复策略,实测有用!

“刚刚一不小心把回收站清空了&#xff0c;大家有什么好用的方法可以帮我恢复回收站中删除的文件吗&#xff1f;快帮帮我吧&#xff01;” 在使用电脑的过程中&#xff0c;我们有时可能会不小心将重要的文件或文件夹删除到回收站&#xff0c;并且随后可能进一步从回收站中彻底删…

【Git】Git学习-17:git rebase,且解决合并冲突

学习视频链接&#xff1a;【GeekHour】一小时Git教程_哔哩哔哩_bilibili​编辑https://www.bilibili.com/video/BV1HM411377j/?vd_source95dda35ac10d1ae6785cc7006f365780 理论 git rebase 目标分支&#xff1a;把当前分支的提交&#xff0c;从与目标分支的共同主祖先处断开…

【linux】dmesg工具

dmesg介绍 dmesg工具用途&#xff1a; dmesg - print or control the kernel ring buffer kernel ring buffer, 内核环形缓冲区&#xff0c;也叫环形队列&#xff0c;Linux内核日志就存储在一个环形队列中&#xff0c;环形队列满的时候&#xff0c;新的消息会覆盖掉旧的消息。…

UE5自动生成地形一:地形制作

UE5自动生成地形一&#xff1a;地形制作 常规地形制作地形编辑器地形管理添加植被手动修改部分地形的植被 置换贴图全局一致纹理制作地貌裸露岩石地形实例 常规地形制作 地形制作入门 地形导入部分 选择模式&#xff1a;地形模式。选择地形子菜单&#xff1a;管理->导入 …

Windows电脑搭建HarmonyOS NEXTDeveloper Preview2环境详解

Windows电脑搭建HarmonyOS NEXTDeveloper Preview2环境详解&#xff1a; HarmonyOS NEXT Preview系列教程基于Api11讲解-IT营大地老师 1 、电脑要求以及注意事项 操作系统 &#xff1a; Windows10 64 位、 Windows11 64 位 内存 &#xff1a; 8GB 及以上&#xff0c;推荐 16G…

“情况不明,对子先行”攻略

掼蛋作为一种策略性极强的游戏&#xff0c;不仅考验牌技&#xff0c;更考验玩家的智慧和策略布局。这里主要介绍一下当牌力不足的时候的普通策略—情况不明&#xff0c;对子先行。 当你的牌力不强&#xff0c;或者牌局情况不明朗时&#xff0c;自己手上有有比较多的对子&#x…

【Ansible】ansible-playbook剧本

playbook 是ansible的脚本 playbook的组成 1&#xff09;Tasks&#xff1a;任务&#xff1b;通过tasks 调用ansible 的模板将多个操作组织在一个playbook中运行 2&#xff09;Variables&#xff1a;变量 3&#xff09;Templates&#xff1a;模板 4&#xff09;Handles&#xf…

如何开发自己的深度学习优化算法

深度学习优化算法 如何开发自己的深度学习优化算法理解优化算法的基础**核心组件**&#xff1a; 设计自定义优化算法的步骤**步骤 1: 定义问题和目标****步骤 2: 研究现有算法****步骤 3: 开发初步想法****步骤 4: 创建原型****步骤 5: 系统测试与优化** 关键建议 如何开发自己…

C 语言指针怎么理解?

在今天的学习中&#xff0c;我注意到有位学员似乎对 C 语言指针的理解有些困惑。为了帮助大家更好地理解&#xff0c;我来举个例子。 C 语言指针就好比 Windows 桌面上常见的快捷方式。快捷方式可以指向某个游戏&#xff0c;这就是普通指针&#xff1b;它也可以指向另一个快捷…

Apache DolphinScheduler 3.3.0 版本重磅更新提前看!

Apache DolphinScheduler 3.3.0版本终于要在万众期待中发布啦&#xff01;本次发版将有重大功能更新&#xff0c;包括架构上的调整。 为了让广大用户提前尝鲜&#xff0c;社区特别准备了直播活动提前揭秘3.3.0版本中的重要更新&#xff0c;到时候你将会了解到这些信息&#xf…

(四)小程序学习笔记——自定义组件

1、组件注册——usingComponents &#xff08;1&#xff09;全局注册&#xff1a;在app.json文件中配置 usingComponents进行注册&#xff0c;注册后可以在任意页面使用。 &#xff08;2&#xff09;局部注册&#xff0c;在页面的json文件中配置suingComponents进行注册&#…

vector、heap数组、stack数组访问性能验证

测试目的 本次测试旨在比较不同数据结构&#xff08;vector、数组&#xff09;以及不同访问方法&#xff08;[]、at()、offset&#xff09;在性能上的差异&#xff0c;从而为开发者提供在特定情境下做出最佳选择的依据。 测试代码 测试网址:Quick C Benchmarks 使用GCC9.5 …

pxe远程安装

PXE 规模化&#xff1a;可以同时装配多台服务器 自动化&#xff1a;自动安装操作系统和各种配置 不需要光盘U盘 前置需要一台PXE服务器 pxe是预启动执行环境&#xff0c;再操作系统之前运行 实验&#xff1a; 首先先关闭防火墙等操作 [rootlocalhost ~]# systemc…

C++成员初始化列表

我们在类的构造函数中使用成员初始化列表可以带来效率上的提升&#xff0c;那么成员初始化列表在编译后会发生什么就是这篇文章要探究的问题 文章目录 引入成员初始化列表用成员初始化列表优化上面的代码成员初始化列表展开成员初始化列表的潜在危险 参考资料 引入 考虑下面这…