如何在Nginx下部署多台Create React App开发服务器并实现热重载
解决React Admin应用在Nginx反向代理下热重载失效的问题
问题根源
管理员端应用的WebSocket请求路径配置与Nginx代理规则不匹配:
- 你给管理员端设置了
WDS_SOCKET_PATH=/adminws,但Nginx的location /adminws直接把请求转发到https://127.0.0.1:4000,而Webpack Dev Server(WDS)的WebSocket服务默认监听/ws路径,导致请求找不到正确的服务端点,进而热重载失败。
修复步骤
1. 调整管理员端.env配置
补充WDS_SOCKET_HOST确保WebSocket请求指向代理域名,避免直接访问后端端口:
HTTPS=true WDS_SOCKET_PORT=443 WDS_SOCKET_HOST=localhost # 线上环境替换为example.com WDS_SOCKET_PATH=/adminws FAST_REFRESH=true
2. 修改Nginx代理规则
将/adminws的代理目标调整为WDS的WebSocket端点/ws,也就是在proxy_pass末尾追加/ws:
location /adminws { proxy_pass https://127.0.0.1:4000/ws; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; }
3. 生效配置
- 重启Nginx:
sudo systemctl restart nginx - 重启管理员端React开发服务器
- 访问
https://localhost/admin,修改代码测试热重载是否正常,同时检查浏览器控制台是否还有WebSocket连接报错
补充说明
直接访问https://localhost:4000/admin时热重载正常,是因为此时WebSocket请求直接发送到WDS默认的/ws路径,无需代理转发,路径匹配自然没问题。但通过Nginx代理时,必须明确把自定义的/adminws路径映射到后端WDS的/ws端点。
内容的提问来源于stack exchange,提问作者don_jon
相关产品推荐
相关产品推荐

