【未尝试】宝塔 Nginx 负载均衡

1. 找到对应网站的 Nginx 配置文件

在宝塔面板中,每个网站的配置文件通常位于以下路径:

/www/server/nginx/conf/vhost/

在该目录下,你会看到以 .conf 结尾的文件,每个文件对应一个网站的 Nginx 配置。例如,如果你有一个网站 example.com,对应的配置文件可能是:

/www/server/nginx/conf/vhost/example.com.conf


2. 编辑网站的 Nginx 配置文件

打开对应的网站配置文件,例如 example.com.conf,并根据需求修改其中的配置。

如果你想为该网站配置负载均衡,可以在该 .conf 文件中加入 upstream 负载均衡配置。示例如下:

2.1. 基础负载均衡与代理配置

首先,我们定义了一个 upstream 后端服务器组,配置了健康检查和故障转移。


# 定义后端服务器组
upstream backend_servers {
    server 192.168.1.2 max_fails=3 fail_timeout=30s;  # 后端服务器 1
    server 192.168.1.3 max_fails=3 fail_timeout=30s;  # 后端服务器 2
    server 192.168.1.4 max_fails=3 fail_timeout=30s;  # 后端服务器 3
}

server {
    listen 80;
    server_name www.example.com;  # 设置域名

    # 代理转发请求到后端服务器
    location / {
        proxy_pass http://backend_servers;  # 将请求转发到 upstream 定义的服务器组

        # 设置代理头,确保正确传递客户端信息
        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;

        # 代理设置
        proxy_buffering on;         # 开启缓冲
        proxy_cache off;            # 关闭缓存
        proxy_connect_timeout 10s;  # 连接超时
        proxy_read_timeout 30s;     # 读取超时
        proxy_send_timeout 30s;     # 发送超时
    }

    # 错误页面配置
    error_page 502 503 504 /custom_50x.html;
    location = /custom_50x.html {
        root /usr/share/nginx/html;
        internal;
    }
}


2.2. 启用 HTTPS 和 SSL 配置

为了启用 SSL,我们将服务器监听端口 443,并配置 SSL 证书和私钥。


server {
    listen 443 ssl http2;
    server_name www.example.com;  # 设置域名
    # SSL 配置
    ssl_certificate /path/to/ssl/certificate.crt;  # SSL 证书路径
    ssl_certificate_key /path/to/ssl/private.key;  # SSL 私钥路径
    ssl_protocols TLSv1.2 TLSv1.3;  # 启用的 SSL/TLS 协议
    ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256';  # 强加密套件
    # 将 HTTP 请求重定向到 HTTPS
    location / {
        proxy_pass https://backend_servers;  # 将流量转发到后端的 HTTPS 服务器
        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;
    }
}
# HTTP 强制跳转到 HTTPS
server {
    listen 80;
    server_name www.example.com;
    return 301 https://$host$request_uri;  # 强制所有 HTTP 请求跳转到 HTTPS
}


2.3. 流量限制与防止滥用



使用 limit_req 限制每秒请求的数量,防止过多请求导致的服务器压力。


http {
    # 定义限流区域
    limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=10r/s;  # 每秒最多 10 个请求
    server {
        listen 80;
        server_name www.example.com;
        # 限制每个 IP 地址的请求频率
        location / {
            limit_req zone=req_limit_per_ip burst=20 nodelay;  # 限制流量,最多突发 20 个请求
            proxy_pass http://backend_servers;
        }
    }
}



2.4. 日志配置与自定义日志格式

日志配置包括自定义日志格式,以及设置访问日志和错误日志路径。


http {
    # 自定义日志格式
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log /www/wwwlogs/access.log main;  # 访问日志
    error_log /www/wwwlogs/error.log warn;    # 错误日志

    server {
        listen 80;
        server_name www.example.com;

        location / {
            proxy_pass http://backend_servers;
        }
    }
}



2.5. 缓存与静态文件优化

为了提升性能,可以缓存静态资源,减轻后端负担。


server {
    listen 80;
    server_name www.example.com;

    # 配置静态资源缓存
    location /static/ {
        root /var/www/html;        # 设置静态文件根目录
        expires 30d;               # 设置缓存过期时间为 30 天
        add_header Cache-Control public;  # 设置缓存控制头部
    }

    # 动态请求转发到后端服务器
    location / {
        proxy_pass http://backend_servers;
    }
}



2.6. 健康检查与故障转移

Nginx 本身没有原生的健康检查机制,但我们可以通过 max_failsfail_timeout 来实现基础的故障转移。这里我们定义了服务器失败的最大次数和失败时间窗口。


upstream backend_servers {
    # 健康检查配置:最大失败次数为 3,超时 30 秒
    server 192.168.1.2 max_fails=3 fail_timeout=30s;
    server 192.168.1.3 max_fails=3 fail_timeout=30s;
    server 192.168.1.4 max_fails=3 fail_timeout=30s;
}



2.7. 完整的配置示例


http {
    # 定义后端服务器组
    upstream backend_servers {
        server 192.168.1.2 max_fails=3 fail_timeout=30s;  # 后端服务器 1
        server 192.168.1.3 max_fails=3 fail_timeout=30s;  # 后端服务器 2
        server 192.168.1.4 max_fails=3 fail_timeout=30s;  # 后端服务器 3
    }

    # 自定义日志格式
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log /www/wwwlogs/access.log main;  # 访问日志
    error_log /www/wwwlogs/error.log warn;    # 错误日志

    # 限流配置
    limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=10r/s;

    # 设置最大请求头部大小
    client_max_body_size 10M;

    server {
        listen 80;
        server_name www.example.com;

        # 配置静态文件缓存
        location /static/ {
            root /var/www/html;
            expires 30d;
            add_header Cache-Control public;
        }

        # 限制每个 IP 地址的请求频率
        location / {
            limit_req zone=req_limit_per_ip burst=20 nodelay;  # 限制流量,最多突发 20 个请求
            proxy_pass http://backend_servers;
            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;
        }

        # 错误页面配置
        error_page 502 503 504 /custom_50x.html;
        location = /custom_50x.html {
            root /usr/share/nginx/html;
            internal;
        }
    }

    # HTTPS 配置
    server {
        listen 443 ssl http2;
        server_name www.example.com;

        ssl_certificate /path/to/ssl/certificate.crt;
        ssl_certificate_key /path/to/ssl/private.key;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256';

        location / {
            proxy_pass https://backend_servers;
            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;
        }
    }



3. 保存配置并重载 Nginx

配置修改完成后,保存文件,然后在宝塔面板的 Nginx 设置 页面点击 重载配置 使更改生效。

4.总结

负载均衡配置需要写在 对应网站的 .conf 配置文件 中,通常是在 /www/server/nginx/conf/vhost/ 目录下。每个 .conf 文件对应一个站点,你可以在该文件中添加 upstream 配置和负载均衡规则。配置完成后,别忘了重载 Nginx 使其生效。

如果你有多个网站需要配置负载均衡,每个网站的配置文件都可以单独进行修改。


    本文标题:《【未尝试】宝塔 Nginx 负载均衡》作者:黑枫棉
    原文链接:https://cayteno.top/?id=9
    特别注明外均为原创,转载请注明。

    分享到微信

    扫描二维码

    可在微信查看或分享至朋友圈。

    相关文章

    发表评论:

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

    站点信息

    • 文章总数:17
    • 页面总数:1
    • 分类总数:6
    • 标签总数:2
    • 评论总数:0
    • 浏览总数:3519
    «    2025年6月    »
    1
    2345678
    9101112131415
    16171819202122
    23242526272829
    30

    控制面板

    您好,欢迎到访网站!
      查看权限

    网站分类

    搜索

    文章归档