nginx(笔记)

配置高可用集群

🧱 Nginx 高可用架构图(主流方案)

          ⬇️客户端请求
       ┌───────────────┐
       │   Virtual IP  │  ← Keepalived 提供高可用浮动IP
       └──────┬────────┘
              │
   ┌──────────┴──────────┐
   │                     │
┌──▼───┐             ┌───▼───┐
│Nginx主│             │Nginx备│   ← 两台Nginx组成主备
└──┬───┘             └───┬───┘
   │                      │
   ▼                      ▼
多个后端应用服务器,如 Tomcat、SpringBoot、Node、PHP 等

📦 组件列表

组件说明
Nginx做反向代理、负载均衡
Keepalived提供 高可用虚拟 IP(VIP),主备切换
后端服务池实际处理业务请求的服务(Tomcat/SpringBoot等)

🔧 步骤一:部署两台 Nginx + Keepalived

比如:

主机名角色IP
nginx1master192.168.1.10
nginx2backup192.168.1.11
VIP虚拟IP192.168.1.100

🧰 步骤二:安装 Nginx 和 Keepalived(每台都装)

参考你上面安装的 nginx/keepalived 流程就行。

✍️ 步骤三:配置 Keepalived(主从)

🔷 主节点 /etc/keepalived/keepalived.conf

conf复制编辑vrrp_instance VI_1 {
    state MASTER
    interface eth0               # 网卡名称,根据实际改
    virtual_router_id 51
    priority 100                 # 主的优先级高
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.1.100            # VIP 地址
    }
}

🔷 备节点 /etc/keepalived/keepalived.conf

c复制编辑vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 90                  # 比主低
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.1.100
    }
}

🚀 步骤四:配置 Nginx(两台一样)

你只需要配置一个负载均衡策略,监听 VIP 端口:

nginx.conf 示例:

nginx复制编辑http {
    upstream backend_servers {
        server 192.168.1.21:8080;
        server 192.168.1.22:8080;
    }

    server {
        listen 80;
        server_name localhost;

        location / {
            proxy_pass http://backend_servers;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
}

✅ 步骤五:启动服务并测试

bash复制编辑# 启动 keepalived(每台都启动)
systemctl start keepalived
systemctl enable keepalived

# 启动 nginx(每台都启动)
systemctl start nginx
systemctl enable nginx


🧪 测试高可用效果

  1. 访问 http://192.168.1.100/ 应正常跳转到后端服务器。

  2. 关闭主 Nginx 节点:

    bash复制编辑systemctl stop keepalived
    
    
  3. 浮动 IP 会自动漂移到 backup 节点,访问仍正常。

🧠 可选:加入 Nginx 状态检测(高级)

vrrp_script chk_nginx {
    script "/etc/keepalived/check_nginx.sh"
    interval 2
    weight -20
}

vrrp_instance VI_1 {
    ...
    track_script {
        chk_nginx
    }
}

check_nginx.sh 内容:

#!/bin/bash
if ! pgrep nginx > /dev/null; then
    systemctl stop keepalived
fi

https证书配置

https必须配置在nginx的443端口下面

基本配置

ssl_certificate /usr/local/nginx/cert/cert.crt;
ssl_certificate_key /usr/local/nginx/cert/cert.key;

Nginx HTTPS 相关完整配置汇总

nginx复制编辑server {
    listen 443 ssl http2;                       # 监听443端口,启用SSL和HTTP/2
    server_name yourdomain.com www.yourdomain.com;

    # 证书文件(请用你自己的路径和证书文件替换)
    ssl_certificate /path/to/fullchain.pem;   # 包含完整证书链的证书文件
    ssl_certificate_key /path/to/privkey.pem; # 私钥文件

    # TLS协议版本,禁用不安全的旧版本
    ssl_protocols TLSv1.2 TLSv1.3;

    # 加密套件(强加密,Mozilla推荐)
    ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384';

    # 服务器优先使用自己的加密套件顺序,避免弱加密
    ssl_prefer_server_ciphers on;

    # SSL会话缓存,提升性能,避免重复握手
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    # 启用 OCSP Stapling(证书状态快速验证)
    ssl_stapling on;
    ssl_stapling_verify on;

    # 解析 OCSP 请求的 DNS 服务器
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;

    # HTTP Strict Transport Security (HSTS),强制客户端使用 HTTPS
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;

    # 防止内容被iframe嵌套,减少点击劫持攻击
    add_header X-Frame-Options SAMEORIGIN;

    # 防止XSS攻击
    add_header X-XSS-Protection "1; mode=block";

    # 禁用内容类型嗅探
    add_header X-Content-Type-Options nosniff;

    # 根目录和首页
    root /var/www/html;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }

    # 反向代理示例(根据需求)
    location /api/ {
        proxy_pass http://127.0.0.1:8080/;
        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;
    }

    # 日志路径(可根据需要修改)
    access_log /var/log/nginx/https_access.log;
    error_log /var/log/nginx/https_error.log;
}

# HTTP 端口配置,重定向到 HTTPS
server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;

    # 所有请求跳转到 HTTPS
    return 301 https://$host$request_uri;
}


配置说明

配置项作用
listen 443 ssl http2;开启 HTTPS 和 HTTP/2 协议
ssl_certificate指定证书文件,需包含完整证书链(通常是 fullchain.pem
ssl_certificate_key指定私钥文件
ssl_protocols TLSv1.2 TLSv1.3;只允许 TLS1.2 和 TLS1.3,禁用过时协议
ssl_ciphers允许的加密算法,保证强加密
ssl_prefer_server_ciphers on;优先使用服务器推荐的加密算法顺序
ssl_session_cache缓存 SSL 会话,减少握手消耗
ssl_session_timeout会话缓存有效期
ssl_stapling on;启用 OCSP Stapling,提高证书状态验证速度
ssl_stapling_verify on;验证 OCSP 响应
resolverDNS 服务器,用于 OCSP 请求
add_header Strict-Transport-SecurityHSTS,强制客户端只能访问 HTTPS
add_header X-Frame-Options SAMEORIGIN;防止点击劫持
add_header X-XSS-Protection启用浏览器 XSS 防护
add_header X-Content-Type-Options nosniff;防止浏览器内容嗅探
root指定静态文件目录
location /api/反向代理示例,代理 API 请求到后端
access_logerror_log日志文件位置
listen 80 + return 301HTTP 请求跳转到 HTTPS

1. 客户端证书验证(双向认证)

双向 TLS 认证,除了服务器验证客户端,客户端也需提供证书,常用于高安全场景。

nginx复制编辑server {
    listen 443 ssl http2;
    server_name yourdomain.com;

    ssl_certificate /path/to/server.crt;
    ssl_certificate_key /path/to/server.key;

    ssl_client_certificate /path/to/ca.crt;    # 受信任客户端证书的CA证书
    ssl_verify_client on;                       # 开启客户端证书验证
    ssl_verify_depth 2;                         # 证书链最大深度

    # 其他ssl配置...

    location / {
        # 正常服务配置
    }
}

  • 客户端必须提供受信任CA签发的证书,否则连接被拒绝。

2. 限速限流配置(防攻击)

控制请求速率,防止刷接口、DDOS等攻击。

nginx复制编辑http {
    # 定义限制区域,1分钟最多10个请求
    limit_req_zone $binary_remote_addr zone=one:10m rate=10r/m;

    server {
        listen 443 ssl;
        server_name yourdomain.com;

        # 其他ssl配置...

        location /api/ {
            limit_req zone=one burst=20 nodelay;
            proxy_pass http://127.0.0.1:8080/;
            # 代理头...
        }
    }
}

  • limit_req_zone 定义速率限制区域。
  • limit_req 在具体路径生效,burst 允许短时突发,nodelay 表示超出限制立即拒绝。

3. 防盗链和 Referer 检查

只允许指定来源访问资源,防止被别的站盗用图片、视频等资源。

nginx复制编辑location /images/ {
    valid_referers none blocked yourdomain.com *.yourdomain.com;
    if ($invalid_referer) {
        return 403;
    }
    # 资源配置
}

  • valid_referers 设定允许的 Referer 来源。
  • $invalid_referer 变量判断是否非法来源。

4. gzip 压缩

减少传输体积,提高响应速度。

nginx复制编辑http {
    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    gzip_min_length 256;
    gzip_proxied any;
    gzip_comp_level 5;
    gzip_vary on;
}

  • 开启 gzip,指定压缩的内容类型,设置压缩级别等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一念成舟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值