linux服务-nginx原理与安装-1

nginx原理与安装

nginx配置章节:nginx原理与安装-1nginx配置示例2nginx配置示例3豆包ai,多敲几次记记关键字

一、前言

Nginx 是一款高性能的 HTTP 服务器、反向代理服务器、负载均衡器 和 IMAP/POP3/SMTP 代理服务器,其核心优势是 高并发、低内存占用、高稳定性,广泛用于生产环境的服务部署。

二、nginx整体架构

2.1、多进程 / 多线程模型

  • Nginx 采用 "master 进程 + worker 进程" 的架构,配合高效的事件驱动模型,实现高并发处理:

    进程类型 作用
    Master 进程(主进程) 1. 读取并验证配置文件(nginx.conf); 2. 管理 worker 进程(创建、销毁、监控); 3. 接收管理员命令(重启、停止、重载配置); 4. 不处理具体请求,仅负责管理。
    Worker 进程(工作进程) 1. 实际处理客户端请求(HTTP、反向代理等); 2. 数量可配置(通常设为 CPU 核心数,充分利用多核资源); 3. 基于 epoll/kqueue 等事件驱动模型,实现 "非阻塞 I/O"。
  • 关键:事件驱动与非阻塞 I/O

    • 传统服务器(如 Apache prefork 模型):1 个请求对应 1 个进程 / 线程,并发量受限于进程数(上下文切换开销大)。
    • Nginx :1 个 worker 进程可同时处理 成千上万 个请求,核心是 "事件驱动"------worker 进程通过 epoll 监听多个 socket 连接,当连接有数据可读 / 可写时才处理,无需阻塞等待。
  • 跨平台事件驱动模型:epoll/kqueue 适配

    • Linux 系统:默认使用epoll 模型 (异步非阻塞 I/O 核心),通过 "事件通知" 机制 ,单线程可高效管理数万并发连接,避免传统 select 模型的轮询性能瓶颈:
      • select 模型:需遍历所有监听的文件描述符(FD)才能找到就绪连接,时间复杂度 O (n),并发量越高性能越差;
      • epoll 模型:通过 "事件通知" 机制,仅返回就绪的文件描述符,时间复杂度 O (1),即使监听数万连接也能保持高效。
    • BSD 类系统(FreeBSD、macOS) :使用 kqueue 模型,功能与 epoll 类似,同样支持高效的事件通知和海量连接管理;
    • 其他系统:支持 /dev/poll、poll 等模型,确保在不同环境下的兼容性。
  • 多进程架构优势 :采用Master-Worker模式,Master进程负责管理配置和Worker进程,Worker进程处理实际请求,支持动态扩展和热部署。

2.2、功能原理

  1. HTTP 服务器(静态资源服务)

    • 直接读取本地文件(HTML、CSS、JS、图片等)并返回给客户端,无需转发到后端服务。核心是 文件读取优化(sendfile 零拷贝技术),减少数据在内核态和用户态的拷贝,提升传输效率。
  2. 反向代理

    • http反向代理 : 客户端请求先发送到 Nginx,Nginx 再转发到后端业务服务器(如 Tomcat、Node.js、Java 服务),后端服务器处理后将响应通过 Nginx 返回给客户端。
      • 作用:隐藏后端服务器地址、统一入口、缓存静态资源、解决跨域问题。
      • 原理:Nginx 作为 "中间人",维护与后端的长连接,复用连接减少握手开销。
    • tcp反向代理: 直接代理tcp端口进行转发
  3. 负载均衡

    • 当后端有多台业务服务器时,Nginx 按配置的策略将请求分发到不同服务器,实现负载分担,避免单台服务器过载。

    • 负载策略:支持轮询(默认)、加权轮询(weight,按权重分配请求,适配不同性能的后端节点)、IP 哈希(ip_hash,基于客户端 IP 哈希分配,实现会话保持)、最少连接(least_conn,优先分发到连接数最少的节点)等算法;

    • 健康检查:内置健康检查机制,自动检测后端节点状态,剔除故障节点(如服务器宕机、响应超时),待节点恢复后自动重新纳入集群,提升服务可用性。

  4. 缓存

    • Nginx 可缓存后端服务器的响应结果(如静态资源、接口数据),后续相同请求直接从 Nginx 缓存返回,减少后端压力,提升响应速度。

2.3、模块化设计与扩展性

Nginx 采用 "核心 + 模块" 的架构,实现功能解耦和灵活扩展:

  • 功能解耦:核心框架仅包含事件驱动模块、进程管理模块等基础组件,体积小巧、性能高效;HTTP 处理、SSL 加密、缓存、负载均衡等功能均通过独立模块实现,降低组件间耦合度,便于维护和迭代;
  • 热加载:支持动态模块加载(Dynamic Modules),无需重启 Nginx 服务即可加载新模块或更新已有模块,避免服务中断;
  • 扩展性 :官方提供丰富的内置模块(如 ngx_http_proxy_module 反向代理、ngx_http_gzip_module 压缩),同时支持第三方模块(如限流模块 ngx_http_limit_req_module、防盗链模块),可按需扩展功能。

三、nginx安装

  1. 服务安装

    1. 安装依赖

      bash 复制代码
      yum install -y gcc gcc-c++ perl perl-devel pcre pcre-devel pcre2 pcre2-devel zlib zlib-devel openssl-devel patch
    2. 第三方模块说明

      官方链接:sticky-1.24+nginx_upstream_check_modulenginx-module-vts‌ngx_http_consistent_hash

      模块名 说明
      Sticky 基于cookie的一种nginx的负载均衡解决方案
      nginx_upstream_check_module nginx主动健康检查
      Nginx-module-vts Nginx的虚拟主机流量监控模块
    3. 下载源包

      bash 复制代码
      wget https://nginx.org/download/nginx-1.29.3.tar.gz
      wget https://github.com/PolloChang/nginx-sticky-module-ng/releases/download/v1.24.0/nginx-sticky-module-ng-v1.24.0.tar.gz
      wget https://github.com/yaoweibin/nginx_upstream_check_module/archive/refs/tags/v0.4.0.tar.gz
      wget https://github.com/vozlt/nginx-module-vts/archive/refs/tags/v0.2.4.tar.gz
      
      # 需要打开进去下载,右上角raw旁边有个下载按钮, 给它用nginx_upstream_check_module
      https://github.com/yaoweibin/nginx_upstream_check_module/blob/master/check_1.20.1+.patch
    4. 编译并安装

      • 源码包说明

        bash 复制代码
        # 我们准备以下包, 如果懒得下载,直接单用 nginx-1.29.3.tar.gz 练手也是ok的
        [root@localhost ss]# ll
        nginx-1.29.3.tar.gz
        nginx-module-vts-master.zip
        nginx-sticky-module-ng-1.24.0.tar.gz
        nginx_upstream_check_module-0.4.0.tar.gz
        openssl-1.1.1n.tar.gz
        check_1.20.1+.patch
      • 模块说明

        bash 复制代码
        # 将以上文件全部解压, 略过, 模块说明
        cd nginx-1.29.3
        ./configure --prefix=/data/nginx \
        --with-http_stub_status_module \  # 状态监控模块
        --with-http_realip_module \       # 真实 IP 透传模块
        --with-http_ssl_module \          # HTTPS 加密模块
        --with-pcre \                     # PCRE 正则支持模块
        --with-stream \                   # 四层代理/负载均衡模块 tcp/udp代理模块
        --with-http_gzip_static_module \  # 静态压缩模块
        
        ####### 如果单独测,以下四行不要, 去掉静态压缩模块后的\
        --with-openssl=/解压目录/openssl-1.1.1n \
        --add-module=/解压目录/nginx-module-vts-master \
        --add-module=/解压目录/nginx_upstream_check_module-0.4.0 \
        --add-module=/解压目录/nginx-sticky-module-ng-1.24.0
      • 安装

        bash 复制代码
        # 给nginx打个补丁,不然nginx_upstream_check_module安不上去,如果不要也可以忽略这里
        cd nginx-1.29.3
        patch -p1 < ../check_1.20.1+.patch 
        
        ./configure --prefix=/data/nginx --with-http_stub_status_module --with-http_realip_module --with-http_ssl_module --with-pcre --with-stream --with-http_gzip_static_module --with-openssl=/解压目录/openssl-1.1.1n --add-module=/解压目录/nginx-module-vts-master --add-module=/解压目录/nginx_upstream_check_module-0.4.0 --add-module=/解压目录/nginx-sticky-module-ng-1.24.0
        # 安装过程自己看一下 确保没有not found, 一般有的话 就是 yum install 名称-devel安装就行
        
        make -j cpu核数 && make -j cpu核数 install
        
        # 比如我64核
        make -j 64 && make -j 64 install
    5. 目录结构

      bash 复制代码
      cd /data/nginx/          # Nginx 安装根目录
      ├── conf/             # 配置文件目录(核心目录)
      ├── html/             # 默认静态资源目录(默认网站根目录)
      ├── logs/             # 日志文件目录(访问日志、错误日志等)
      └── sbin/             # 执行程序目录(Nginx 主程序)
      
      conf/
          ├── nginx.conf        # Nginx 主配置文件(核心中的核心)
          ├── mime.types        # MIME 类型映射文件(识别文件后缀对应的 Content-Type)
          ├── fastcgi.conf      # FastCGI 相关配置(适配 PHP 等动态语言)
          ├── fastcgi_params    # FastCGI 参数配置(与 fastcgi.conf 功能类似,参数更少)
          ├── proxy_params      # 反向代理默认参数配置(如转发时的请求头)
          ├── scgi_params       # SCGI 协议配置(较少使用)
          ├── uwsgi_params      # uWSGI 协议配置(适配 Python WSGI 应用)
          └── koi-utf、koi-win、win-utf  # 字符集编码映射文件(适配中文等特殊字符)
      
      sbin/
          └── nginx             # Nginx 主执行程序(二进制文件)
    6. systemctl脚本

      bash 复制代码
      cat > /usr/lib/systemd/system/nginx.service << EOF
      [Unit]
      Description=Nginx High Performance Web Server
      Documentation=http://nginx.org/en/docs/
      After=network.target remote-fs.target nss-lookup.target
      
      [Service]
      Type=forking
      # Nginx 主程序路径(/data/nginx/sbin/nginx)
      ExecStart=/data/nginx/sbin/nginx
      # 优雅停止(等待请求处理完成)
      ExecStop=/data/nginx/sbin/nginx -s quit
      # 强制停止(快速关闭,紧急情况使用)
      ExecStopPost=/bin/rm -f /data/nginx/logs/nginx.pid
      # 重载配置(热部署)
      ExecReload=/data/nginx/sbin/nginx -s reload
      # 验证配置(启动/重载前自动验证,避免配置错误)
      ExecStartPre=/data/nginx/sbin/nginx -t -q -g 'daemon on; master_process on;'
      
      # 进程权限配置(安全优化)
      User=root
      Group=root
      PrivateTmp=true
      
      # 服务稳定性配置
      Restart=on-failure
      RestartSec=5s
      LimitNOFILE=65535  # 限制最大文件描述符(适配高并发)
      
      [Install]
      WantedBy=multi-user.target
      EOF
    7. 启动

      bash 复制代码
      systemctl start nginx
      systemctl enable nginx
    8. 其它

      bash 复制代码
      # 常用命令
      /data/nginx/sbin/nginx -s stop   # 停止
      /data/nginx/sbin/nginx -s reload # 重载配置(无需停止服务)
      /data/nginx/sbin/nginx -t       # 验证配置文件正确性
    9. 整包压缩后,后续还能用得上

    10. 浏览器访问 http://服务器IP,若出现 "Welcome to nginx!" 页面,则安装成功。

    11. 通过网盘分享的文件:linux 提取码: 1234

相关推荐
LumenL1u1 小时前
CentOS 7/8/9 上安装 MySQL 8.0+ 完整指南
linux·mysql
伊卡洛斯az2 小时前
Linux veth
linux·服务器
brucelee1862 小时前
在 Linux Ubuntu 24.04 安装 IntelliJ IDEA
linux·ubuntu·intellij-idea
阿伟实验室2 小时前
debian10部署简易web服务器
运维·服务器·前端
Linux技术芯3 小时前
金刚经修心课 你的生活指南
linux
北京阿法龙科技有限公司3 小时前
AR眼镜赋能跨国设备运维:打破空间隔阂,重构高效协作|阿法龙XR云平台
运维·重构·ar
Kathleen1003 小时前
计算机网络——应用层
运维·服务器·计算机网络
java_logo3 小时前
BUSYBOX Docker 容器化部署指南
java·运维·python·nginx·docker·容器·运维开发
Mr.H01274 小时前
多线程文件拷贝:从原理到实现的完整指南
linux·运维