跨境互联网 跨境互联网
首页
  • AI 工具

    • 绘图提示词工具 (opens new window)
    • ChatGPT 指令 (opens new window)
  • ChatGPT

    • ChatGP T介绍
    • ChatGPT API 中文开发手册
    • ChatGPT 中文调教指南
    • ChatGPT 开源项目
  • Midjourney

    • Midjourney 文档
  • Stable Diffusion

    • Stable Diffusion 文档
  • 其他

    • AIGC 热门文章
    • 账号合租 (opens new window)
    • 有趣的网站
  • Vue

    • Vue3前置
  • JAVA基础

    • Stream
    • Git
    • Maven
    • 常用第三方类库
    • 性能调优工具
    • UML系统建模
    • 领域驱动设计
    • 敏捷开发
    • Java 测试
    • 代码规范及工具
    • Groovy 编程
  • 并发编程&多线程

    • 并发编程
    • 高性能队列 Disruptor
    • 多线程并发在电商系统下的应用
  • 其他

    • 面试题
  • 消息中间中间件

    • Kafka
    • RabbitMQ
    • RocketMQ
  • 任务调度

    • Quartz
    • XXL-Job
    • Elastic-Job
  • 源码解析

    • Mybatis 高级使用
    • Mybatis 源码剖析
    • Mybatis-Plus
    • Spring Data JPA
    • Spring 高级使用
    • Spring 源码剖析
    • SpringBoot 高级使用
    • SpringBoot 源码剖析
    • Jdk 解析
    • Tomcat 架构设计&源码剖析
    • Tomcat Web应用服务器
    • Zookeeper 高级
    • Netty
  • 微服务框架

    • 分布式原理
    • 分布式集群架构场景化解决方案
    • Dubbo 高级使用
    • Dubbo 核心源码剖析
    • Spring Cloud Gateway
    • Nacos 实战应用
    • Sentinel 实战应用
    • Seata 分布式事务
  • 数据结构和算法的深入应用
  • 存储

    • 图和Neo4j
    • MongoDB
    • TiDB
    • MySQL 优化
    • MySQL 平滑扩容实战
    • MySQL 海量数据存储与优化
    • Elasticsearch
  • 缓存

    • Redis
    • Aerospike
    • Guava Cache
    • Tair
  • 文件存储

    • 阿里云 OSS 云存储
    • FastDF 文件存储
  • 基础

    • Linux 使用
    • Nginx 使用与配置
    • OpenResty 使用
    • LVS+Keepalived 高可用部署
    • Jekins
  • 容器技术

    • Docker
    • K8S
    • K8S
  • 01.全链路(APM)
  • 02.电商终极搜索解决方案
  • 03.电商亿级数据库设计
  • 04.大屏实时计算
  • 05.分库分表的深入实战
  • 06.多维系统下单点登录
  • 07.多服务之间分布式事务
  • 08.业务幂等性技术架构体系
  • 09.高并发下的12306优化
  • 10.每秒100W请求的秒杀架构体系
  • 11.集中化日志管理平台的应用
  • 12.数据中台配置中心
  • 13.每天千万级订单的生成背后痛点及技术突破
  • 14.红包雨的架构设计及源码实现
  • 人工智能

    • Python 笔记
    • Python 工具库
    • 人工智能(AI) 笔记
    • 人工智能(AI) 项目笔记
  • 大数据

    • Flink流处理框架
  • 加密区

    • 机器学习(ML) (opens new window)
    • 深度学习(DL) (opens new window)
    • 自然语言处理(NLP) (opens new window)
AI 导航 (opens new window)

Revin

首页
  • AI 工具

    • 绘图提示词工具 (opens new window)
    • ChatGPT 指令 (opens new window)
  • ChatGPT

    • ChatGP T介绍
    • ChatGPT API 中文开发手册
    • ChatGPT 中文调教指南
    • ChatGPT 开源项目
  • Midjourney

    • Midjourney 文档
  • Stable Diffusion

    • Stable Diffusion 文档
  • 其他

    • AIGC 热门文章
    • 账号合租 (opens new window)
    • 有趣的网站
  • Vue

    • Vue3前置
  • JAVA基础

    • Stream
    • Git
    • Maven
    • 常用第三方类库
    • 性能调优工具
    • UML系统建模
    • 领域驱动设计
    • 敏捷开发
    • Java 测试
    • 代码规范及工具
    • Groovy 编程
  • 并发编程&多线程

    • 并发编程
    • 高性能队列 Disruptor
    • 多线程并发在电商系统下的应用
  • 其他

    • 面试题
  • 消息中间中间件

    • Kafka
    • RabbitMQ
    • RocketMQ
  • 任务调度

    • Quartz
    • XXL-Job
    • Elastic-Job
  • 源码解析

    • Mybatis 高级使用
    • Mybatis 源码剖析
    • Mybatis-Plus
    • Spring Data JPA
    • Spring 高级使用
    • Spring 源码剖析
    • SpringBoot 高级使用
    • SpringBoot 源码剖析
    • Jdk 解析
    • Tomcat 架构设计&源码剖析
    • Tomcat Web应用服务器
    • Zookeeper 高级
    • Netty
  • 微服务框架

    • 分布式原理
    • 分布式集群架构场景化解决方案
    • Dubbo 高级使用
    • Dubbo 核心源码剖析
    • Spring Cloud Gateway
    • Nacos 实战应用
    • Sentinel 实战应用
    • Seata 分布式事务
  • 数据结构和算法的深入应用
  • 存储

    • 图和Neo4j
    • MongoDB
    • TiDB
    • MySQL 优化
    • MySQL 平滑扩容实战
    • MySQL 海量数据存储与优化
    • Elasticsearch
  • 缓存

    • Redis
    • Aerospike
    • Guava Cache
    • Tair
  • 文件存储

    • 阿里云 OSS 云存储
    • FastDF 文件存储
  • 基础

    • Linux 使用
    • Nginx 使用与配置
    • OpenResty 使用
    • LVS+Keepalived 高可用部署
    • Jekins
  • 容器技术

    • Docker
    • K8S
    • K8S
  • 01.全链路(APM)
  • 02.电商终极搜索解决方案
  • 03.电商亿级数据库设计
  • 04.大屏实时计算
  • 05.分库分表的深入实战
  • 06.多维系统下单点登录
  • 07.多服务之间分布式事务
  • 08.业务幂等性技术架构体系
  • 09.高并发下的12306优化
  • 10.每秒100W请求的秒杀架构体系
  • 11.集中化日志管理平台的应用
  • 12.数据中台配置中心
  • 13.每天千万级订单的生成背后痛点及技术突破
  • 14.红包雨的架构设计及源码实现
  • 人工智能

    • Python 笔记
    • Python 工具库
    • 人工智能(AI) 笔记
    • 人工智能(AI) 项目笔记
  • 大数据

    • Flink流处理框架
  • 加密区

    • 机器学习(ML) (opens new window)
    • 深度学习(DL) (opens new window)
    • 自然语言处理(NLP) (opens new window)
AI 导航 (opens new window)
  • Linux

  • Nginx

    • Nginx基础
      • 1 Nginx基础
        • 1.1 Nginx 到底是什么?
        • 1.2 Nginx应⽤场景
        • 1.3 Nginx 的特点
        • 1.4 Nginx的安装
        • 1.5 Nginx主要命令
      • 2 Nginx核⼼配置⽂件解读
        • 2.1 全局块
        • 2.2 events块
        • 2.3 http块
      • 3 Nginx应⽤场景之反向代理
        • 3.1 需求:
        • 3.2 需求⼀完成
        • 3.3 需求⼆完成
      • 4 Nginx应⽤场景之负载均衡
        • 4.1 Nginx负载均衡策略
      • 5 Nginx应⽤场景之动静分离
      • 6 底层进程机制剖析
        • 6.1 master进程
        • 6.2 worker进程
        • 6.3 Nginx进程模型示意图如下
        • 6.4 以 ./nginx -s reload 来说明nginx信号处理这部分**
        • 6.5 worker进程处理请求部分的说明
        • 6.6 nginx多进程模型好处
    • Nginx 使用与配置
  • OpenResty 使用
  • LVS+Keepalived 高可用部署
  • jekins

  • DevOps
  • Nginx
Revin
2023-08-05
目录

Nginx基础

# 1 Nginx基础

Nginx课程笔记_Page1_01

# 1.1 Nginx 到底是什么?

Nginx 是⼀个⾼性能的HTTP和反向代理web服务器,核⼼特点是占有内存少,并发能⼒强

# 1.2 Nginx应⽤场景

Http服务器(Web服务器)

性能⾮常⾼,⾮常注重效率,能够经受⾼负载的考验。

⽀持50000个并发连接数,不仅如此,CPU和内存的占⽤也⾮常的低,10000个没有活动的连接才占⽤2.5M的内存。

反向代理服务器

  • 正向代理

在浏览器中配置代理服务器的相关信息,通过代理服务器访问⽬标⽹站,代理服务器收到⽬标⽹站的响应之后,会把响应信息返回给我们⾃⼰的浏览器客户端

Nginx课程笔记_Page2_01

  • 反向代理

浏览器客户端发送请求到反向代理服务器(⽐如Nginx),由反向代理服务器选择原始服务器提供服务获取结果响应,最终再返回给客户端浏览器

Nginx课程笔记_Page2_02

负载均衡服务器

负载均衡,当⼀个请求到来的时候(结合上图),Nginx反向代理服务器根据请求去找到⼀个原始服务器来处理当前请求,那么这叫做反向代理。那么,如果⽬标服务器有多台(⽐如上图中的tomcat1,tomcat2,tomcat3...),找哪⼀个⽬标服务器来处理当前请求呢,这样⼀个寻找确定的过程就叫做负载均衡。

⽣活中也有很多这样的例⼦,⽐如,我们去银⾏,可以处理业务的窗⼝有多个,那么我们会被分配到哪个窗⼝呢到底,这样的⼀个过程就叫做负载均衡。

负载均衡就是为了解决⾼负载的问题。

动静分离

Nginx课程笔记_Page3_01

# 1.3 Nginx 的特点

  • 跨平台:Nginx可以在⼤多数类unix操作系统上编译运⾏,⽽且也有windows版本

  • Nginx的上⼿⾮常容易,配置也⽐较简单

  • ⾼并发,性能好

  • 稳定性也特别好,宕机概率很低

# 1.4 Nginx的安装

  • 上传nginx安装包到linux服务器,nginx安装包(.tar⽂件)下载地址:http://nginx.org

本文使⽤1.17.8版本Nginx课程笔记_Page3_02

  • 安装Nginx依赖,pcre、openssl、gcc、zlib(推荐使⽤yum源⾃动安装)
yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
1
  • 解包Nginx软件包
tar -xvf nginx-1.17.8.tar
1
  • 进⼊解压之后的⽬录 nginx-1.17.8
cd nginx-1.17.8
1
  • 命令⾏执⾏./configure

  • 命令⾏执⾏make

  • 命令⾏执⾏ make install,完毕之后在/usr/local/下会产⽣⼀个nginx⽬录

Nginx课程笔记_Page4_01

进⼊sbin⽬录中,执⾏启动nginx命令

cd nginx/sbin
./nginx
1
2

然后访问服务器的80端⼝(nginx默认监听80端⼝)

Nginx课程笔记_Page4_02

# 1.5 Nginx主要命令

./nginx 启动nginx

./nginx -s stop 终⽌nginx(当然也可以找到nginx进程号,然后使⽤kill -9 杀掉nginx进程)

./nginx -s reload (重新加载nginx.conf配置⽂件)
1
2
3
4
5

# 2 Nginx核⼼配置⽂件解读

Nginx的核⼼配置⽂件conf/nginx.conf包含三块内容:全局块、events块、http块

# 2.1 全局块

从配置⽂件开始到events块之间的内容,此处的配置影响nginx服务器整体的运⾏,⽐如worker进程的数量、错误⽇志的位置等

Nginx课程笔记_Page5_01

# 2.2 events块

events块主要影响nginx服务器与⽤户的⽹络连接,⽐如worker_connections 1024,标识每个workderprocess⽀持的最⼤连接数为1024

Nginx课程笔记_Page5_02

# 2.3 http块

http块是配置最频繁的部分,虚拟主机的配置,监听端⼝的配置,请求转发、反向代理、负载均衡等

Nginx课程笔记_Page5_03

Nginx课程笔记_Page6_01

Nginx课程笔记_Page7_01

# 3 Nginx应⽤场景之反向代理

# 3.1 需求:

Nginx课程笔记_Page8_01

# 3.2 需求⼀完成

  • 部署tomcat,保持默认监听8080端⼝

  • 修改nginx配置,并重新加载

修改nginx配置

Nginx课程笔记_Page8_02

重新加载nginx配置

./nginx -s reload
1
  • 测试,访问http://111.229.248.243:9003,返回tomcat的⻚⾯

Nginx课程笔记_Page9_01

# 3.3 需求⼆完成

  • 再部署⼀台tomcat,保持默认监听8081端⼝

  • 修改nginx配置,并重新加载

Nginx课程笔记_Page9_02

  • 这⾥主要就是多location的使用,这里的nginx中server/location就好比tomcat中的HostHost/Context

location 语法如下:

location [=|~|~*|^~] /uri/ { … }
1

在nginx配置⽂件中,location主要有这⼏种形式:

1)正则匹配 location ~ /lagou { }

2)不区分⼤⼩写的正则匹配 location ~* /lagou { }

3)匹配路径的前缀 location ^~ /lagou { }

4)精确匹配 location = /lagou { }

5)普通路径前缀匹配 location /lagou { }

优先级

4 > 3 > 2 > 1 > 5
1

# 4 Nginx应⽤场景之负载均衡

Nginx课程笔记_Page10_01

# 4.1 Nginx负载均衡策略

  • 轮询

默认策略,每个请求按时间顺序逐⼀分配到不同的服务器,如果某⼀个服务器下线,能⾃动剔除

upstream lagouServer{
	server 111.229.248.243:8080;
	server 111.229.248.243:8082;
}

location /abc {
	proxy_pass http://lagouServer/;
}
1
2
3
4
5
6
7
8
  • weight

weight代表权重,默认每⼀个负载的服务器都为1,权重越⾼那么被分配的请求越多(⽤于服务器性能不均衡的场景)

upstream lagouServer{
	server 111.229.248.243:8080 weight=1;
	server 111.229.248.243:8082 weight=2;
}
1
2
3
4
  • ip_hash

每个请求按照ip的hash结果分配,每⼀个客户端的请求会固定分配到同⼀个⽬标服务器处理,可以解决session问题

upstream lagouServer{
	ip_hash;
	server 111.229.248.243:8080;
	server 111.229.248.243:8082;
}
1
2
3
4
5

# 5 Nginx应⽤场景之动静分离

动静分离就是讲动态资源和静态资源的请求处理分配到不同的服务器上,⽐较经典的组合就是Nginx+Tomcat架构(Nginx处理静态资源请求,Tomcat处理动态资源请求),那么其实之前的讲解中,Nginx反向代理⽬标服务器Tomcat,我们能看到⽬标服务器ROOT项⽬的index.jsp,这本身就是Tomcat在处理动态资源请求了。

所以,我们只需要配置静态资源访问即可。

Nginx课程笔记_Page11_01

Nginx配置

Nginx课程笔记_Page11_02

# 6 底层进程机制剖析

Nginx启动后,以daemon*多进程⽅式在后台运⾏,包括⼀个Master进程和多个Worker进程,Master进程是领导,是⽼⼤,Worker进程是⼲活的⼩弟。

Nginx课程笔记_Page11_03

# 6.1 master进程

主要是管理worker进程,⽐如:

  • 接收外界信号向各worker进程发送信号(./nginx -s reload)

  • 监控worker进程的运⾏状态,当worker进程异常退出后Master进程会⾃动重新启动新的worker进程等

# 6.2 worker进程

worker进程具体处理⽹络请求。多个worker进程之间是对等的,他们同等竞争来⾃客户端的请求,各进程互相之间是独⽴的。⼀个请求,只可能在⼀个worker进程中处理,⼀个worker进程,不可能处理其它进程的请求。worker进程的个数是可以设置的,⼀般设置与机器cpu核数⼀致。

# 6.3 Nginx进程模型示意图如下

Nginx课程笔记_Page12_01

# 6.4 以 ./nginx -s reload 来说明nginx信号处理这部分**

1)master进程对配置⽂件进⾏语法检查

2)尝试配置(⽐如修改了监听端⼝,那就尝试分配新的监听端⼝)

3)尝试成功则使⽤新的配置,新建worker进程

4)新建成功,给旧的worker进程发送关闭消息

5)旧的worker进程收到信号会继续服务,直到把当前进程接收到的请求处理完毕后关闭所以reload之后worker进程pid是发⽣了变化的

Nginx课程笔记_Page12_02

# 6.5 worker进程处理请求部分的说明

例如,我们监听9003端⼝,⼀个请求到来时,如果有多个worker进程,那么每个worker进程都有可能处理这个链接。

  • master进程创建之后,会建⽴好需要监听的的socket,然后从master进程再fork出多个worker进程。所以,所有worker进程的监听描述符listenfd在新连接到来时都变得可读。

  • nginx使⽤互斥锁来保证只有⼀个workder进程能够处理请求,拿到互斥锁的那个进程注册listenfd读事件,在读事件⾥调⽤accept接受该连接,然后解析、处理、返回客户端

# 6.6 nginx多进程模型好处

  • 每个worker进程都是独⽴的,不需要加锁,节省开销

  • 每个worker进程都是独⽴的,互不影响,⼀个异常结束,其他的照样能提供服务

  • 多进程模型为reload热部署机制提供了⽀撑

上次更新: 2025/04/03, 11:07:08
Linux 常用命令
Nginx 使用与配置

← Linux 常用命令 Nginx 使用与配置→

最近更新
01
tailwindcss
03-26
02
PaddleSpeech
02-18
03
whisper
02-18
更多文章>
Theme by Vdoing | Copyright © 2019-2025 跨境互联网 | 豫ICP备14016603号-5 | 豫公网安备41090002410995号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式