当前位置: 代码网 > it编程>数据库>Mysql > Nginx服务部署与配置全过程

Nginx服务部署与配置全过程

2025年12月22日 Mysql 我要评论
一、 概述nginx 是开源、高性能、高可靠的 web服务器 和反向代理服务器,而且支持热部署,几乎可以做到 7 * 24 小时不间断运行,即使运行几个月也不需要重新启动,还能在不间断服务的情况下对软

一、 概述

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com