鱼鱼头
•项目部署补充章节:深入理解与配置反向代理 (Reverse Proxy)
在 1Panel 中部署 Node.js 或 Docker 项目时,反向代理是连接“外部用户”和“内部服务”的桥梁。
1. 什么是反向代理?
简单来说,反向代理就像是一个**“中转站”或“前台接待”**。
- 没有反向代理时:用户直接访问你的应用(例如
http://ip:3000)。这很不安全,且无法使用 HTTPS,也不好记。 - 有反向代理时:
- 用户访问域名(例如
https://www.example.com)。 - 请求先到达 1Panel 的 Web 服务器(OpenResty/Nginx),监听 80/443 端口。
- OpenResty 收到请求后,根据配置,将请求转发给服务器内部运行的 Node.js 或 Docker 应用(例如
127.0.0.1:3000)。 - 应用处理完后,将结果返回给 OpenResty,再由 OpenResty 返回给用户。
- 用户访问域名(例如
为什么要用它?
- 安全性:隐藏了后端服务的真实端口和架构。
- SSL/HTTPS:你只需要在反向代理层(1Panel 网站设置)配置证书,后端的 Node.js 或 Docker 无需关心加密问题。
- 统一入口:可以在同一个服务器的 80/443 端口上运行多个不同的网站(通过域名区分)。
2. 在 1Panel 中设置反向代理的两种方式
方式 A:创建“反向代理”类型的网站 (推荐用于 Docker/Node 项目)
这是最常用的方式,专门用于将一个域名完整地映射到一个后端服务。
- 菜单路径:
网站->创建网站-> 选择反向代理。 - 主域名:填写你的域名(如
api.demo.com)。 - 代理地址:这是核心设置。
- 如果你的 Docker/Node 项目运行在本机,且映射了端口(如 8080)。
- 填写:
http://127.0.0.1:8080 - 注意:尽量填写
127.0.0.1而不是localhost,有时解析会有微小差异。
- 创建。
方式 B:在现有网站中添加“反向代理”规则 (用于混合部署)
如果你有一个静态网站(如 React 前端),但希望路径 /api 转发给后端的 Node.js 服务。
- 菜单路径:
网站-> 点击具体网站配置 ->反向代理标签页 ->创建反向代理。 - 代理路径:填写
/api(或者其他你想要的路径)。 - 代理地址:填写后端服务的地址,如
http://127.0.0.1:3000。 - 确认。
- 此时,访问
domain.com/index.html由 Nginx 直接提供静态文件。 - 访问
domain.com/api/users会被转发到127.0.0.1:3000/users。
- 此时,访问
3. 关键配置详解:域名、端口与 WebSocket
在配置反向代理时,经常会遇到以下细节问题:
3.1 域名与端口的关系
- 外部端口:通常是 80 (HTTP) 和 443 (HTTPS)。这是用户在浏览器输入的默认端口,由 1Panel 的 OpenResty 占用。
- 内部端口:这是你的 Docker 容器或 Node.js 进程监听的端口(如
3000,8080,9000)。 - 映射逻辑:
用户 (浏览器) -> 域名:443 (1Panel Nginx) -> 反向代理转发 -> 127.0.0.1:3000 (你的应用)
3.2 开启 HTTPS (SSL)
在 1Panel 中,配置 HTTPS 非常简单,且完全发生在反向代理层:
- 进入
网站->配置->HTTPS。 - 启用 HTTPS。
- 选择
ACME 账户申请免费证书,或上传已有证书。 - 后端无需更改:你的 Node.js 或 Docker 应用依然可以使用 HTTP 协议运行,Nginx 会处理加密解密工作(SSL Termination)。
3.3 WebSocket 支持 (重要)
如果你的项目包含即时通讯、Socket.io、实时推送等功能,必须配置 WebSocket 头,否则连接会断开。
在 1Panel 的反向代理配置界面(或者网站配置文件的源文里),通常需要确保包含以下 Header 转发:
- 在 1Panel 较新版本中,创建反向代理时通常会自动处理,或者有一个“支持 WebSocket”的开关。
- 如果需要手动修改 Nginx 配置文件(
网站->配置->配置文件),确保location段落中有以下内容:
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
3.4 修改上传文件大小限制
Nginx 默认限制请求体大小(通常为 1MB 或 50MB)。如果你部署的是网盘或图床项目,上传大文件会报错 413 Request Entity Too Large。
- 设置方法:在 1Panel
网站->配置->WAF/安全或反向代理设置中,寻找 "最大传输体限制" (client_max_body_size),将其改为更大的值(如1024m)。
4. 常见问题排查 (Troubleshooting)
-
502 Bad Gateway:
- 含义:反向代理(Nginx)尝试连接后端(你的应用),但连接不上。
- 原因:你的 Node.js 没启动,或者 Docker 容器挂了,或者端口填错了(比如应用在 3000,你填了 3001)。
- 解决:检查
docker logs或应用状态,确认应用正在运行且监听了正确的端口。
-
504 Gateway Time-out:
- 含义:连接上了,但后端处理时间太长,Nginx 等得不耐烦了。
- 原因:程序执行了耗时操作(如大数据处理、AI 生成)。
- 解决:在反向代理配置中,调大 "代理超时时间" (proxy_read_timeout)。
2026年1月23日阅读 0赞 0收藏 0