插件窝 干货文章 Nginx虚拟主机负载均衡配置,实现多域名流量分发

Nginx虚拟主机负载均衡配置,实现多域名流量分发

proxy server Nginx 配置 538    来源:    2025-04-15

Nginx虚拟主机负载均衡配置指南

负载均衡基本概念

负载均衡是通过将网络流量分发到多个服务器来提高应用性能、可靠性和可用性的技术。Nginx作为高性能的反向代理服务器,可以很好地实现这一功能。

基础配置步骤

1. 定义上游服务器组(upstream)

在Nginx配置文件中(通常位于/etc/nginx/nginx.conf/etc/nginx/conf.d/目录下):

http {
    upstream backend {
        # 定义负载均衡策略
        # least_conn; # 最少连接数策略
        # ip_hash;   # 基于客户端IP的哈希策略

        # 添加后端服务器
        server backend1.example.com weight=3;
        server backend2.example.com;
        server backend3.example.com max_fails=3 fail_timeout=30s;
    }
}

2. 配置虚拟主机实现多域名分发

server {
    listen 80;
    server_name domain1.com;

    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

server {
    listen 80;
    server_name domain2.com;

    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

高级配置选项

1. 不同负载均衡策略

  • 轮询(默认): 请求按时间顺序分配到不同服务器
  • 加权轮询: 通过weight参数分配不同权重
  • 最少连接: least_conn指令
  • IP哈希: ip_hash指令(保持会话一致性)

2. 健康检查

upstream backend {
    server backend1.example.com max_fails=3 fail_timeout=30s;
    server backend2.example.com max_fails=3 fail_timeout=30s;

    # 被动健康检查
    # max_fails: 失败次数阈值
    # fail_timeout: 超时时间
}

3. HTTPS配置

server {
    listen 443 ssl;
    server_name domain1.com;

    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    location / {
        proxy_pass http://backend;
        # 其他代理设置...
    }
}

完整示例配置

http {
    upstream web_servers {
        least_conn;
        server 192.168.1.100:8080 weight=2;
        server 192.168.1.101:8080;
        server 192.168.1.102:8080 max_fails=3 fail_timeout=30s;
    }

    upstream api_servers {
        ip_hash;
        server 192.168.1.200:8000;
        server 192.168.1.201:8000;
    }

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

        location / {
            proxy_pass http://web_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;
        }
    }

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

        location / {
            proxy_pass http://api_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;
        }
    }
}

配置后检查与优化

  1. 测试配置语法:

    nginx -t
    
  2. 重载配置:

    nginx -s reload
    
  3. 性能监控:

    • 使用ngx_http_stub_status_module监控Nginx状态
    • 配置日志分析
  4. 缓存优化:

    proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m inactive=60m;
    
    location / {
       proxy_cache my_cache;
       proxy_pass http://backend;
       # 其他配置...
    }
    

常见问题解决

  1. 502 Bad Gateway错误:

    • 检查后端服务器是否正常运行
    • 检查Nginx与后端服务器之间的网络连接
    • 增加proxy_connect_timeout
  2. 负载不均衡:

    • 检查负载均衡策略配置
    • 检查后端服务器性能差异
    • 考虑使用更合适的负载均衡算法
  3. 会话保持问题:

    • 对于需要会话保持的应用,使用ip_hashsticky模块
    • 考虑应用层会话共享方案

通过以上配置,您可以实现基于Nginx的多域名流量分发和负载均衡,提高网站或应用的性能和可靠性。