鱼头
项目部署

补充章节:深入理解与配置反向代理 (Reverse Proxy)

在 1Panel 中部署 Node.js 或 Docker 项目时,反向代理是连接“外部用户”和“内部服务”的桥梁。

1. 什么是反向代理?

简单来说,反向代理就像是一个**“中转站”“前台接待”**。

  • 没有反向代理时:用户直接访问你的应用(例如 http://ip:3000)。这很不安全,且无法使用 HTTPS,也不好记。
  • 有反向代理时
    1. 用户访问域名(例如 https://www.example.com)。
    2. 请求先到达 1Panel 的 Web 服务器(OpenResty/Nginx),监听 80/443 端口。
    3. OpenResty 收到请求后,根据配置,将请求转发给服务器内部运行的 Node.js 或 Docker 应用(例如 127.0.0.1:3000)。
    4. 应用处理完后,将结果返回给 OpenResty,再由 OpenResty 返回给用户。

为什么要用它?

  • 安全性:隐藏了后端服务的真实端口和架构。
  • SSL/HTTPS:你只需要在反向代理层(1Panel 网站设置)配置证书,后端的 Node.js 或 Docker 无需关心加密问题。
  • 统一入口:可以在同一个服务器的 80/443 端口上运行多个不同的网站(通过域名区分)。

2. 在 1Panel 中设置反向代理的两种方式

方式 A:创建“反向代理”类型的网站 (推荐用于 Docker/Node 项目)

这是最常用的方式,专门用于将一个域名完整地映射到一个后端服务。

  1. 菜单路径网站 -> 创建网站 -> 选择 反向代理
  2. 主域名:填写你的域名(如 api.demo.com)。
  3. 代理地址:这是核心设置。
    • 如果你的 Docker/Node 项目运行在本机,且映射了端口(如 8080)。
    • 填写:http://127.0.0.1:8080
    • 注意:尽量填写 127.0.0.1 而不是 localhost,有时解析会有微小差异。
  4. 创建

方式 B:在现有网站中添加“反向代理”规则 (用于混合部署)

如果你有一个静态网站(如 React 前端),但希望路径 /api 转发给后端的 Node.js 服务。

  1. 菜单路径网站 -> 点击具体网站配置 -> 反向代理 标签页 -> 创建反向代理
  2. 代理路径:填写 /api (或者其他你想要的路径)。
  3. 代理地址:填写后端服务的地址,如 http://127.0.0.1:3000
  4. 确认
    • 此时,访问 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 非常简单,且完全发生在反向代理层:

  1. 进入网站 -> 配置 -> HTTPS
  2. 启用 HTTPS。
  3. 选择 ACME 账户 申请免费证书,或上传已有证书。
  4. 后端无需更改:你的 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日阅读 00收藏 0

评论

登录后才可以发表评论。
暂无评论。