当前位置: 首页 > news >正文

Nginx服务部署与配置

文章目录

  • Nginx服务部署与配置
    • 一、 概述
      • 1.1 Nginx 特点###
      • 1.2 Nginx 作用
      • 1.3 Nginx工作原理
        • 1. 事件驱动架构(Event-Driven)
        • 2. 多进程模型(Master-Worker)
        • 3. 异步非阻塞 I/O
        • 4. 请求处理流程
        • 5. 高性能关键设计
        • 6. 扩展性
      • 总结
    • 二、Nginx服务搭建
      • 2.1 Ningx安装
        • 2.1.1 yum安装
    • 三、Nginx服务平滑升级
      • 3.1 Nginx添加新模块
      • 3.2 Nginx版本升级
    • 四、Nginx服务反向代理
      • 概述
      • 4.1反向代理实战
    • 五、Nginx服务负载均衡
        • 3.5.2 常见配置参数

Nginx服务部署与配置

一、 概述

Nginx 是开源、高性能、高可靠的 Web服务器 和反向代理服务器,而且支持热部署,几乎可以做到 7 * 24 小时不间断运行,即使运行几个月也不需要重新启动,还能在不间断服务的情况下对软件版本进行热更新。性能是 Nginx 最重要的考量,其占用内存少、并发能力强、能支持高达 5w 个并发连接数,最重要的是, Nginx 是免费的并可以商业化,配置使用也比较简单。

1.1 Nginx 特点###

  • 高并发、高性能;
  • 模块化架构使得它的扩展性非常好;
  • 异步非阻塞的事件驱动模型(epoll)这点和 Node.js 相似;
  • 相对于其它服务器来说它可以连续几个月甚至更长而不需要重启服务器使得它具有高可靠性;
  • 热部署、平滑升级;
  • 完全开源,生态繁荣。

1.2 Nginx 作用

  • http服务器。Nginx可以独立提供http服务。可做网页静态服务器。
  • 虚拟主机。可以实现在一台服务器虚拟出多个虚拟服务器。
  • 反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会应为某台服务器负载高宕机而某台服务器闲置的情况。
  • nginx 中也可以配置安全管理、比如可以使用Nginx搭建API接口网关,对每个接口服务进行拦截。

Nginx 是一个高性能的 HTTP反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。它的工作原理主要基于 事件驱动架构异步非阻塞 I/O 模型,使其能够高效处理大量并发连接。以下是 Nginx 的核心工作原理:

1.3 Nginx工作原理

1. 事件驱动架构(Event-Driven)

Nginx 采用 事件驱动 模型(如 epollkqueue),而不是传统的多线程/多进程模型(如 Apache 的 prefork)。

  • 优势
    • 单个工作进程可以处理数千个并发连接,减少上下文切换和内存开销。
    • 通过事件循环(Event Loop)监听文件描述符(如 Socket),当数据就绪时触发回调函数,避免阻塞。

2. 多进程模型(Master-Worker)

Nginx 启动时分为两类进程:

  • Master 进程
    • 负责读取配置文件、管理 Worker 进程(启动、停止、重载配置)。
    • 不直接处理客户端请求。
  • Worker 进程
    • 实际处理请求的进程(数量可配置,通常与 CPU 核心数相同)。
    • 每个 Worker 是独立的,通过事件驱动机制高效处理并发连接。

优势

  • Worker 进程崩溃时,Master 可以快速重启新的 Worker,提高稳定性。
  • 多 Worker 利用多核 CPU,避免线程竞争。

3. 异步非阻塞 I/O

Nginx 使用 非阻塞 I/O 操作:

  • 当 Worker 处理一个请求时,如果遇到 I/O 操作(如读取文件、访问数据库),不会等待完成,而是立即处理其他请求。
  • I/O 操作完成后,通过事件通知(如 epoll)触发回调继续处理。

对比传统阻塞模型

  • Apache 的每个连接可能需要一个线程/进程,高并发时资源消耗大。
  • Nginx 的 Worker 仅在 CPU 计算时占用资源,I/O 等待时不阻塞。

4. 请求处理流程
  1. 接收请求
    • Worker 通过监听端口(如 80)接收客户端连接。
  2. 解析请求
    • 解析 HTTP 头部,确定 Host、URL、方法(GET/POST)等。
  3. 匹配 Location
    • 根据配置文件中的 serverlocation 块匹配请求。
  4. 处理静态/动态内容
    • 静态文件:直接读取文件并返回(高效,默认开启 sendfile 零拷贝)。
    • 动态请求:通过反向代理(如 FastCGI、uWSGI)转发到后端服务(如 PHP、Python)。
  5. 返回响应
    • 组装 HTTP 响应,通过非阻塞 I/O 发送给客户端。

5. 高性能关键设计
  • 零拷贝(sendfile):静态文件直接从磁盘发送到网络,无需经过应用层缓冲区。
  • 连接复用(Keepalive):减少 TCP 握手/挥手的开销。
  • 内存池:减少频繁的内存分配/释放,提高内存管理效率。
  • 负载均衡:作为反向代理时,支持轮询、IP Hash、加权分配等算法。

6. 扩展性
  • 模块化设计:核心功能(如 HTTP、Mail)和第三方模块(如 Lua、WebSocket)可动态加载。
  • 热部署:修改配置后,通过 nginx -s reload 平滑重启,不中断现有连接。

总结

Nginx 的高性能源于:

  1. 事件驱动 + 非阻塞 I/O:用少量进程处理高并发。
  2. 多进程隔离:避免单点故障,利用多核 CPU。
  3. 高效内存/文件处理:零拷贝、内存池等优化。

适合场景:静态资源服务、反向代理、负载均衡、API 网关等。

二、Nginx服务搭建

2.1 Ningx安装

2.1.1 yum安装

yum 安装默认安装在

[root@nginx1~]#yum install -y nginx
##验证安装结果
[root@nginx1~]#rpm -q nginx
nginx-1.20.1-7.el7.x86_64

2.1.2 编译安装

[root@bogon ~]# tar xf nginx-1.25.3.tar.gz 
[root@bogon ~]# ls
anaconda-ks.cfg  ceph-release-1-1.el7.noarch.rpm  nginx-1.25.3  nginx-1.25.3.tar.gz
[root@bogon ~]# yum install -y pcre-devel
[root@bogon ~]# yum install -y zlib-devel
[root@bogon ~]# cd nginx-1.25.3
[root@bogon nginx-1.25.3]# ./configure --prefix=/usr/local/nginx
checking for OS+ Linux 3.10.0-1160.el7.x86_64 x86_64
checking for C compiler ... found+ using GNU C compiler+ gcc version: 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 

三、Nginx服务平滑升级

3.1 Nginx添加新模块

在已编译安装Nginx的基础上添加–with-http_image_filter_module模块。

(1)进入Nginx解压目录

[root@bogon nginx-1.25.3]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.25.3
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
configure arguments: --prefix=/usr/local/nginx

(2)添加–with-http_image_filter_module模块。

[root@bogon nginx-1.25.3]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.25.3
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
configure arguments: --prefix=/usr/local/nginx  –with-http_image_filter_module
[root@bogon nginx-1.25.3]# make

备份原Nginx二进制文件

[root@bogon nginx-1.25.3]# mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak

复制新的nginx二进制文件,进入新的nginx源码包

[root@bogon nginx-1.25.3]# cp /root/nginx-1.25.3/objs/nginx /usr/local/nginx/sbin/nginx

测试新版本的nginx是否正常

[root@bogon nginx-1.25.3]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

3.2 Nginx版本升级

1.25版本------>1.27版本

#解压新版本
[root@bogon ~]# tar zxf  nginx-1.27.3.tar.gz -C /usr/local/
[root@bogon ~]# cd /usr/local/nginx-1.27.3/
[root@bogon nginx-1.27.3]# ./configure --prefix=/usr/local/nginx
checking for OS+ Linux 3.10.0-1160.el7.x86_64 x86_64
checking for C compiler ... found
#进行编译
#注意:这里不能进行,make install 操作,否则将会被覆盖,可能会影响线上业务。
[root@bogon nginx-1.27.3]# make 
#拷贝Nginx1.27版本的二进制文件到1.25版本
[root@bogon ~]# mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak  #先备份一份
[root@bogon ~]# cp /usr/local/nginx-1.18.0/objs/nginx /usr/local/nginx/sbin/
#启动新的主进程,查看升级后的版本
[root@bogon ~]# kill -USR2 $(cat /usr/local/nginx/logs/nginx.pid)
#查看升级后的版本
[root@bogon ~]# /usr/local/nginx/sbin/nginx -V

四、Nginx服务反向代理

概述

什么是反向代理

反向代理代理的是服务端

反向代理:(reverse proxy),指的是代理外网用户的请求到内部的指定的服务器,并将数据返回给用户的一种方式
客户端不直接与后端服务器进行通信,而是与反向代理服务器进行通信,隐藏了后端服务器的 IP 地址

4.1反向代理实战

反向代理服务器 192.168.49.134
主机 192.168.49.135
服务器 192.168.49.136

要求主机访问反向代理服务器时,其实是去找服务器,隐藏服务器ip地址
反向代理服务器 安装nginx 配置好文件
在nginx.conf中配置

 server {listen       80;server_name  localhost;location / {proxy_pass http://192.168.49.136;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}
#测试nginx
nginx -t
#重新加载
nginx -s reload

五、Nginx服务负载均衡

服务端 192.168.49.136 ;客户端 192.168.49.135

代理端 192.168.49.134
反向代理实现负载均衡配置:
NGINX的负载均衡原理是基于反向代理和事件驱动的机制。

当客户端发送请求时,NGINX作为反向代理服务器接收请求,并根据配置的负载均衡算法将请求转发到后端的多个服务器上,实现负载均衡。

3.5.2 常见配置参数
location / {proxy_pass http://192.168.49.136;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;
}

轮询实现负载均衡配置:

upstream group1{server 192.164.49.134;server 192.164.49.136;}location / {pass_proxy http://group1;
}nginx -t
nginx -s reload
#重新加载
http://www.lqws.cn/news/522505.html

相关文章:

  • DexGraspVLA:面向通用灵巧抓取的分层VLA-2025.5.22-北京大学
  • HTML表格元素
  • Spring 用的是什么动态代理?它是怎么配置的?
  • fluentd + elasticsearch + grafana 不能显示问题
  • 16.7 Prometheus+Grafana实战:容器化监控与日志聚合一站式解决方案
  • Linux远程机器无法连接-------解决方案
  • 开源代码修复新标杆——月之暗面最新开源编程模型Kimi-Dev-72B本地部署教程,自博弈修复 Bug
  • AI知识库搭建需要的开源技术方案
  • C#.Net筑基-优雅LINQ的查询艺术
  • 基于Hp感染的慢性胃炎居家管理小程序的设计与实现(消息震动)
  • 连锁企业网络互联方案对比:MPLS专线 vs 内网穿透
  • MySQL为什么默认引擎是InnoDB?
  • 永磁同步电机无速度算法--基于三角函数锁相环的滑模观测器
  • django 中间件
  • 打造丝滑的Android应用:LiveData完全教程
  • YOLOv8 改进点详解
  • 联邦学习中的本地迭代误差与全局聚合误差
  • CSMatIO库的安装与C#实现.mat文件生成
  • 数据库系统总结
  • cocos2 实现全局音量管理
  • 51c嵌入式~CAN~合集2
  • 数据文件写入技术详解:从CSV到Excel的ETL流程优化
  • 使用AkShare获取股票报表
  • [省选联考 2025] 推箱子
  • Java 的强制类型转换
  • Sortablejs动态同类型穿插
  • npm 报错:“无法加载文件 ...npm.ps1,因为在此系统上禁止运行脚本” 解决方案(附执行策略说明)
  • 创新让生活更美好丨“鑫亘科技亮相2025上海CMEF,创新医疗材料引领未来!”
  • 【Docker基础】Docker容器管理:docker pause、stop、kill区别
  • Gemini 2.5 Pro vs Claude 4:2025年高考物理真题实战对比评测(国内直接使用)