同网络多服务器场景下Nginx跨机器流量分发配置咨询
同网络多服务器场景下Nginx跨机器流量分发配置咨询
嗨half,这个需求完全可以实现,而且是Nginx反向代理的经典应用场景,我给你拆解下具体的配置步骤和注意事项:
核心思路
把现有机器1的Nginx作为整个集群的流量入口,它负责接收所有80端口的请求,然后根据域名把对应流量转发到机器2的Nginx上;机器2的Nginx只需要正常托管自己的两个站点即可,不用对外暴露额外的特殊配置。
具体配置步骤
先确保机器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,确认站点能正常响应。在机器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




