Nginx服务部署与配置全过程

 更新时间:2025年12月22日 10:29:42   作者:Tianzs_  
Nginx是一个高性能的Web服务器和反向代理服务器,具有高并发、高可靠性、热部署等特性,它支持HTTP、HTTPS、IMAP、POP3和SMTP协议,适用于静态资源服务、反向代理、负载均衡和API网关等场景,文章还介绍了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. 请求处理流程

接收请求

  • Worker 通过监听端口(如 80)接收客户端连接。

解析请求

  • 解析 HTTP 头部,确定 Host、URL、方法(GET/POST)等。

匹配 Location

  • 根据配置文件中的 serverlocation 块匹配请求。

处理静态/动态内容

  • 静态文件:直接读取文件并返回(高效,默认开启 sendfile 零拷贝)。
  • 动态请求:通过反向代理(如 FastCGI、uWSGI)转发到后端服务(如 PHP、Python)。

返回响应

  • 组装 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作为反向代理服务器接收请求,并根据配置的负载均衡算法将请求转发到后端的多个服务器上,实现负载均衡。

常见配置参数

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
#重新加载

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Nginx配置文件的具体使用

    Nginx配置文件的具体使用

    本文主要介绍了Nginx配置文件的具体使用,其配置文件通常位于 /etc/nginx/nginx.conf 或 /usr/local/nginx/conf/nginx.conf,下面就来介绍一下,感兴趣的可以了解一下
    2024-08-08
  • 浅析nginx 客户端返回499的错误码的问题

    浅析nginx 客户端返回499的错误码的问题

    我们服务器客户端一直有返回错误码499的日志,以前觉得比例不高,就没有仔细查过,最近有领导问这个问题,为什么耗时只有0.0几秒,为啥还499了?最近几天就把这个问题跟踪定位了一下,这里做个记录,对nginx返回499错误码相关知识感兴趣的朋友一起看看吧
    2022-10-10
  • 详解Nginx 工作原理

    详解Nginx 工作原理

    这篇文章主要介绍了Nginx 工作原理,帮助大家更好的理解和学习nginx,感兴趣的朋友可以了解下
    2020-10-10
  • Nginx为Tomcat服务器作反向代理的配置教程

    Nginx为Tomcat服务器作反向代理的配置教程

    这篇文章主要介绍了Nginx为Tomcat服务器作反向代理的配置教程,文中以Windows系统为环境来演示驱动JSP程序的示例,需要的朋友可以参考下
    2016-03-03
  • 使用Nginx服务器如何实现动静分离和反向代理

    使用Nginx服务器如何实现动静分离和反向代理

    这篇文章主要介绍了使用Nginx服务器如何实现动静分离和反向代理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • Centos系统中如何在指定位置下安装Nginx

    Centos系统中如何在指定位置下安装Nginx

    这篇文章主要介绍了Centos系统中如何在指定位置下安装Nginx,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • 超实用的Nginx常见配置合集分享

    超实用的Nginx常见配置合集分享

    这篇文章主要为大家详细介绍了超实用的Nginx常见配置合集,文中的示例代码讲解详细,对我们学习或工作有一定的参考价值,感兴趣的可以了解一下
    2022-07-07
  • 强大的 Web 应⽤服务器OpenResty安装(Nginx仓库)

    强大的 Web 应⽤服务器OpenResty安装(Nginx仓库)

    OpenResty 是⼀个强大的 Web 应⽤服务器,Web 开发⼈员可以使用 Lua 脚本语⾔调动 Nginx ⽀持的各种 C 以及 Lua 模块,更主要的是在性能方面,OpenResty可以快速构造出足以胜任 10K 以上并发连接响应的超高性能 Web 应用系统
    2023-06-06
  • Nginx Lua 缓存配置的实现步骤

    Nginx Lua 缓存配置的实现步骤

    在Web应用缓存层次中,Nginx Lua缓存因其高效的协程机制,与Nginx的集成,以及OpenResty的扩展性,成为了一种高性能的缓存解决方案,本文就来详细介绍,感兴趣的可以了解一下
    2022-05-05
  • nginx配置多个前端项目实现步骤

    nginx配置多个前端项目实现步骤

    本文主要介绍了nginx配置多个前端项目实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03

最新评论