当前位置:首页 > 技术 > 正文内容

Nginx 配置与集群部署指南

访客 技术 2026年6月13日 1

Nginx 概述

在现代 Web 架构中,客户端请求如何被正确分发至后端服务器是一个关键问题。随着系统规模扩大,单台服务器难以支撑所有请求,因此需要引入负载均衡机制。

通过部署 Nginx 作为反向代理,可有效管理多个后端服务节点,并实现请求的智能转发:

        服务器A
客户端 → Nginx → 服务器B → 数据库
        服务器C

Nginx 最初由俄罗斯开发者 Igor Sysoev 开发,用于应对 Rambler 网站的高并发需求。其主要优势包括:

  • 稳定可靠,支持长时间连续运行
  • 配置灵活,提供丰富的功能模块
  • 资源占用低,具备强大的并发处理能力

环境准备与基础配置

使用 Docker Compose 快速部署 Nginx 服务:

version: '3.1'
services:
  nginx-service:
    image: nginx:1.9.1
    container_name: nginx-container
    ports:
      - "80:80"
    volumes:
      - ./config/conf.d:/etc/nginx/conf.d

核心配置文件 nginx.conf 结构如下:

user nginx;
worker_processes auto;

events {
    worker_connections 1024;
}

http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    server {
        listen 80;
        server_name localhost;

        location / {
            root /usr/share/nginx/html;
            index index.html index.htm;
        }
    }
}

反向代理配置实践

正向代理由客户端配置,用于隐藏客户端身份;而反向代理部署在服务端,用于隐藏后端服务器结构。

配置示例:将请求转发至 Tomcat 服务

server {
    listen 80;
    server_name localhost;

    location /app/ {
        proxy_pass http://192.168.1.100:8080/;
    }

    location /api/ {
        proxy_pass http://192.168.1.101:8080/api/;
    }
}

路径匹配规则优先级:

  1. 精确匹配 (=)
  2. 前缀匹配 (^~)
  3. 正则匹配 (~, ~*)
  4. 普通前缀匹配
  5. 通用匹配 (/)

负载均衡策略

Nginx 支持多种负载均衡算法:

轮询模式

upstream backend_pool {
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
}

server {
    location / {
        proxy_pass http://backend_pool;
    }
}

权重分配

upstream weighted_pool {
    server 192.168.1.10:8080 weight=3;
    server 192.168.1.11:8080 weight=1;
}

IP 哈希绑定

upstream sticky_pool {
    ip_hash;
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
}

动静分离优化

通过分离静态与动态资源处理,提升系统整体性能:

server {
    listen 80;
    server_name example.com;

    # 静态资源处理
    location /static/ {
        root /var/www;
        expires 1d;
        add_header Cache-Control public;
    }

    # 动态请求转发
    location /api/ {
        proxy_pass http://backend_servers;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

高可用集群架构

为避免单点故障,构建包含主备 Nginx 和负载均衡器的高可用架构:

Docker 构建脚本

FROM nginx:1.13-alpine
RUN apk add --no-cache keepalived haproxy
COPY startup.sh /startup.sh
RUN chmod +x /startup.sh
CMD ["/startup.sh"]

启动脚本

#!/bin/sh
keepalived -D -f /etc/keepalived/keepalived.conf
nginx -g "daemon off;"

服务编排配置

version: '3.1'
services:
  nginx-primary:
    build: .
    networks:
      cluster-net:
        ipv4_address: 172.20.0.10
    cap_add:
      - NET_ADMIN

  nginx-secondary:
    build: .
    networks:
      cluster-net:
        ipv4_address: 172.20.0.11
    cap_add:
      - NET_ADMIN

  load-balancer:
    image: haproxy:1.7-alpine
    ports:
      - "80:80"
    networks:
      - cluster-net

networks:
  cluster-net:
    driver: bridge
    ipam:
      config:
        - subnet: 172.20.0.0/16

Keepalived 主节点配置

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 150
    advert_int 1
    
    authentication {
        auth_type PASS
        auth_pass secret123
    }

    virtual_ipaddress {
        172.20.0.100
    }
}

HAProxy 负载配置

frontend http_front
    bind *:80
    default_backend nginx_cluster

backend nginx_cluster
    balance roundrobin
    server primary 172.20.0.10:80 check
    server secondary 172.20.0.11:80 check

部署完成后,可通过虚拟 IP 地址访问服务。当主节点失效时,备用节点自动接管流量,确保服务持续可用。

标签: Nginx

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。