nginx

一、nginx简介

Nginx是一款轻量级HTTP服务器,也是一款邮箱代理服务器,同时具备反向代理、通用TCP/UDP代理功能,Nginx可以运行在x86、ARM等多种平台上,同时支持Linux、Windows等主流的操作系统。

二、Nginx特点

高性能

  • 采用事件驱动的异步非阻塞架构,支持高并发连接。
  • 内存占用低,单机可轻松支持数万并发连接。
  • 高效的静态内容处理能力,适合作为静态资源服务器。

高可靠性

  • 模块化设计,稳定性强,长期运行不易崩溃。
  • 支持热部署,可在不中断服务的情况下更新配置或升级版本。

负载均衡

  • 内置多种负载均衡算法(轮询、权重、IP哈希等)。
  • 支持后端服务器的健康检查,自动剔除故障节点。

反向代理

  • 可隐藏真实服务器信息,增强安全性。
  • 支持缓存加速,减轻后端服务器压力。

灵活的配置

  • 使用声明式配置文件,结构清晰易维护。
  • 支持条件判断、变量和正则表达式,满足复杂业务场景。

扩展性强

  • 丰富的第三方模块生态(如Lua、GeoIP等)。
  • 可通过C语言开发自定义模块。

低资源消耗

  • CPU和内存占用远低于传统服务器(如Apache)。
  • 特别适合资源受限的虚拟化环境。

多协议支持

  • 原生支持HTTP/2、WebSocket、gRPC等现代协议。
  • 可作为邮件代理服务器(IMAP/POP3/SMTP)。

跨平台

  • 支持Linux/BSD/Windows/macOS等多种操作系统。
  • 针对不同平台进行性能优化。

三、Nginx架构

  • 注意:默认情况下,nginx会建立和服务器CPU核心数相等的worker进程,woker进程之间相互独立,若一个进程故障不会影响其它进程

四、nginx关键工作机制

  • 抢占机制:当客户端发起请求时,会激活accept_mutex互斥锁,哪个worker抢占了该互斥锁,该客户端的请求就由那个worker响应和处理
  • 异步非阻塞模式:在传统事件处理模式下,如果所有的worker被客户端阻塞后,新来的客户就需要等待,直到原来的客户端释放worker后才能被处理请求,在异步非阻塞模式下,底层使用了linux的epoll模型,就算worker被阻塞,新的客户端请求也会被正常处理

五、nginx正向代理功能

正向代理(Forward Proxy)是客户端通过代理服务器访问互联网资源的模式。代理服务器代表客户端向目标服务器发起请求,常用于访问控制、缓存加速或隐私保护。Nginx可通过配置实现正向代理功能。

复制代码
    客户端       <一>       代理           <一>        服务端
A租房人(客户端)        B房产中介(代理)            C真实房东(服务端)
  • A租房人(客户端)想租C真实房东的房子,但不认识C真实房东(服务端)

  • B房产中介(代理)认识C真实房东(服务端),并且从C真实房东(服务端)租到了房

  • A租房人(客户端)通过B房产中介(代理)租到了C真实房东(服务端)的房

  • C真实房东(服务端)只知道房子租给了B房产中介(代理),并不知道A租房人(客户端)租了自己的房子

  • 结论:正向代理 是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。就像要访问google用vpn代理翻墙去访问(用户知道要访问真正的服务器)

六、nginx反向代理功能

reverse proxy,指的是代理外网用户的请求到内部的指定的服务器,并将数据返回给用户的一种方式,这是用的比较多的一种方式。

七、负载均衡功能

nginx作为高性能的反向代理服务器,内置了多种负载均衡算法,能够将客户端请求分发到多个后端服务器,提升系统的可用性和扩展性。以下是nginx负载均衡的核心功能和配置方法。

一、 什么是四层和七层负载均衡?

在理解其配置之前,我们先快速区分一下概念:

  • 四层负载均衡(Layer 4, L4)

    • 工作在 OSI 模型的传输层

    • 基于 TCP/UDP 端口 和 IP地址 进行转发。

    • 不解析应用层协议(如 HTTP、FTP、MySQL 等)。它只关心数据包是从哪里来,要转到哪里去。

    • 性能更高,因为处理逻辑简单,开销小。

  • 七层负载均衡(Layer 7, L7)

    • 工作在 OSI 模型的应用层

    • 基于应用层内容 进行转发,例如 HTTP 的 Host头部、URL 路径、Cookie 等。

    • 功能更强大,可以实现基于内容的智能路由、SSL 终结、请求改写等。

    • 性能开销稍大,因为需要解析应用层协议。

八、部署Nginx

复制代码
[root@server ~]# setenforce  0           

[root@server ~]# systemctl stop  firewalld

[root@server ~]# systemctl disable  firewalld

[root@server ~]# yum  install  nginx  -y

[root@server ~]# nginx  -V  # 查看版本,编译器、配置参数等信息

[root@server ~]# systemctl start  nginx   # 启动httpd

[root@server ~]# systemctl enable  nginx  # 设置开机启动
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service.

[root@server ~]# systemctl status  nginx    # 查看状态,q键退出查看

[root@server ~]# ps  -ef  |  grep  nginx  # 查看进程
root        1690       1  0 13:57 ?        00:00:00 nginx: master process /usr/sbin/nginx
nginx       1691    1690  0 13:57 ?        00:00:00 nginx: worker process
nginx       1692    1690  0 13:57 ?        00:00:00 nginx: worker process
root        1726    1510  0 14:00 pts/0    00:00:00 grep --color=auto nginx

# 测试,Windows中打开浏览器输入服务器IP地址

九、常用命令

systemctl系列
复制代码
systemctl  start  nginx   # 启动服务

systemcctl restart  nginx  # 重启服务

systemctl  enable  nginx   # 开机启动

systemctl  stop  nginx     # 停止服务

systemctl  disable  nginx  # 取消开机启动

systemctl  status   nginx  # 查看状态
nginx自带命令
复制代码
nginx    # 启动nginx

nginx   restart  # 重启服务

nginx  -s  reload  # 重新加载配置文件

nginx  -s  stop    # 强行停止服务

nginx  -s  quit    # 优雅停止服务,即所有请求处理完后退出服务

nginx  -v         # 查看版本号

nginx -t         # 检查配置文件的语法错误,无错返回ok

十、OpenResty

一、 什么是 OpenResty?

  • 官方定义:一个基于 Nginx 与 Lua 的高性能 Web 平台。

  • 核心思想:将 Lua 脚本嵌入到 Nginx 的各个请求处理阶段(如重写、访问、内容生成、日志记录等),从而让开发者能够用灵活的脚本语言来操作请求和响应,而无需去编写复杂的 C 语言 Nginx 模块。

  • 关键组件

    1. Nginx Core:提供了事件驱动、异步非阻塞的底层框架。

    2. LuaJIT:一个极快的 Lua 编译器,让 Lua 脚本能以接近 C 的速度运行。

    3. lua-nginx-module:最重要的模块,它充当了 Nginx 和 Lua 之间的桥梁。

    4. 一系列 Lua 库 :如 lua-resty-redis, lua-resty-mysql, lua-resty-string 等,用于方便地与后端服务交互。

二、 OpenResty 与标准 Nginx 的核心区别

特性 标准 Nginx OpenResty
扩展方式 主要依赖配置文件C 模块 Lua 脚本 + 配置文件
灵活性 配置驱动,功能受限于模块 代码驱动,几乎可以编写任何业务逻辑
开发效率 修改复杂逻辑需重新编译,周期长 修改 Lua 脚本即可,热加载,效率极高
能力范围 静态内容、反向代理、负载均衡 完整的 Web 应用、API 网关、防火墙、缓存逻辑等

简单来说,标准 Nginx 是一个强大的网络服务器和代理 ,而 OpenResty 是一个全功能的 Web 应用服务器

三、 OpenResty 的核心架构与执行阶段

这是 OpenResty 最强大的地方。它允许你在 Nginx 请求生命周期的几乎每一个阶段注入 Lua 代码。

主要阶段:

  1. set_by_lua*: 设置变量。

  2. rewrite_by_lua*: 重写 URI、跳转等(在访问阶段之前)。

  3. access_by_lua*: 访问控制、权限验证(如 API 鉴权)。

  4. content_by_lua*: 生成响应内容,这是最常用的阶段。

  5. header_filter_by_lua*: 过滤和设置响应头。

  6. body_filter_by_lua*: 过滤和修改响应体。

  7. log_by_lua*: 记录自定义日志。

相关推荐
渡我白衣1 小时前
字符串的陷阱与艺术——std::string全解析
网络·c++·人工智能·自然语言处理·智能路由器·信息与通信·caffe
小苏兮2 小时前
【把Linux“聊”明白】进程的概念与状态
linux·运维·服务器·学习
杜子不疼.2 小时前
【Linux】网络编程入门:从一个小型回声服务器开始
linux·服务器·网络
shizhan_cloud2 小时前
收集系统资源使用情况
linux·运维
许强0xq3 小时前
稳定币“三明治”:重构全球跨境结算网络
网络·金融·重构·web3·区块链·defi·稳定币
杭州泽沃电子科技有限公司3 小时前
在线监测系统:农药精细化工的“安全锁”与“效率引擎”
运维·人工智能·科技·物联网·化工
shizhan_cloud3 小时前
Linux 进程调度管理
linux·运维
我有毓毓症3 小时前
nginx作业
运维·nginx
JiMoKuangXiangQu3 小时前
Linux 网络:邻居子系统
linux·网络·邻居子系统