You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

同网络多服务器场景下Nginx跨机器流量分发配置咨询

同网络多服务器场景下Nginx跨机器流量分发配置咨询

嗨half,这个需求完全可以实现,而且是Nginx反向代理的经典应用场景,我给你拆解下具体的配置步骤和注意事项:

核心思路

把现有机器1的Nginx作为整个集群的流量入口,它负责接收所有80端口的请求,然后根据域名把对应流量转发到机器2的Nginx上;机器2的Nginx只需要正常托管自己的两个站点即可,不用对外暴露额外的特殊配置。

具体配置步骤

  1. 先确保机器2的Nginx正常运行
    机器2上的两个站点可以按常规方式配置Nginx,只要在局域网内能通过机器2的IP访问到就行。假设机器2的局域网IP是192.168.1.100,它的Nginx配置示例:

    server {
        listen 80;
        server_name site5.example.com site6.example.com;
    
        # 站点基础配置,根据你的项目实际情况调整
        root /var/www/site5;
        index index.html index.php;
    
        # 其他规则(比如PHP转发、静态文件缓存等)保持你原有项目的配置即可
    }
    

    配置完后重启机器2的Nginx:sudo systemctl restart nginx,然后在机器1上测试访问http://192.168.1.100,确认站点能正常响应。

  2. 在机器1的Nginx里添加反向代理规则
    机器1上原有4个站点的server块完全保留,新增针对机器2域名的转发规则:

    # 机器1原有4个站点的配置不动,比如:
    server {
        listen 80;
        server_name site1.example.com;
        # 你的原有配置内容...
    }
    
    # 新增转发到机器2的站点5规则
    server {
        listen 80;
        server_name site5.example.com;
    
        location / {
            # 转发到机器2的局域网IP和80端口
            proxy_pass http://192.168.1.100;
            # 关键:传递请求头,避免后端机器2的Nginx因为Host头不匹配出现异常
            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;
        }
    }
    
    # 新增转发到机器2的站点6规则
    server {
        listen 80;
        server_name site6.example.com;
    
        location / {
            proxy_pass http://192.168.1.100;
            # 同样的请求头配置
            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;
        }
    }
    

    如果以后机器2还要加更多站点,或者你想把两个域名合并配置,也可以用Nginx的upstream模块来统一管理后端机器(现在虽然只有一台,但扩展性更好):

    # 定义后端机器组
    upstream backend_machine2 {
        server 192.168.1.100;
        # 以后加机器3的话,直接加一行server 192.168.1.101;即可
    }
    
    server {
        listen 80;
        server_name site5.example.com site6.example.com;
    
        location / {
            proxy_pass http://backend_machine2;
            # 同样的请求头配置
            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;
        }
    }
    

关键注意事项

  • 局域网连通性检查:确保机器1能ping通机器2的局域网IP,如果不通先排查防火墙、路由器的规则(机器2的80端口要允许来自机器1的访问)。
  • 请求头的重要性proxy_set_header Host $host一定要加,否则后端机器2的Nginx可能会因为Host头不匹配,跳转到默认站点而不是你指定的目标站点。
  • 端口灵活性:如果机器2的80端口被其他服务占用,也可以把机器2的Nginx改成监听8080端口,然后机器1的proxy_pass写成http://192.168.1.100:8080即可,记得同步开放机器2的8080端口。

配置完机器1的Nginx后,重启服务:sudo systemctl restart nginx,然后用域名访问测试,确认流量能正确分发到对应机器的站点。

如果配置过程中遇到端口不通、站点跳转异常的问题,随时再细化提问~

备注:内容来源于stack exchange,提问作者half

火山引擎 最新活动