MCSManager + OpenResty 的反向代理指北

June 6, 2026·3 min read

环境信息

面板

  • MCSManager 4.13.0
  • 使用官方 Linux 安装脚本部署

反向代理

  • 1panel 默认的 OpenResty

实例域名

text
mcsm.example.com

Daemon 默认端口

text
24444

HTTPS/WSS 反代端口

text
24443

问题现象

MCSManager 面板正常访问。但是:

  • 实例控制台打不开
  • 文件上传失败
  • 文件下载失败
  • 节点显示:网页直连:异常

错误信息:

text
无法连接到远程节点

浏览器无法连接到地址:
wss://mcsm.example.com:24444

xhr poll error

原因分析

MCSManager 在 HTTPS 页面下,浏览器必须通过 WSS:// 连接 daemon。如果 daemon 仍然是 ws://http://,浏览器会因为 Mixed Content 安全策略直接拒绝连接。

因此:必须给 daemon 单独配置 HTTPS + WebSocket 反向代理。

OpenResty Docker 挂载目录

1Panel OpenResty 容器挂载:

text
宿主机:  /opt/1panel/www/conf.d
容器内:  /usr/local/openresty/nginx/conf/conf.d

只需要在宿主机 /opt/1panel/www/conf.d 创建配置文件即可。

前提:记得提前在 1Panel 中为域名 mcsm.example.com 申请 SSL 证书,这里不做详细说明。

创建 daemon HTTPS 配置

创建 /opt/1panel/www/conf.d/mcsm-daemon.conf

nginx
server {
    listen 24443 ssl;
    listen [::]:24443 ssl;

    http2 on;

    server_name mcsm.example.com;

    ssl_certificate /www/sites/mcsm.example.com/ssl/fullchain.pem;
    ssl_certificate_key /www/sites/mcsm.example.com/ssl/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;

    location / {

        proxy_pass http://127.0.0.1:24444;

        proxy_http_version 1.1;

        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        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_buffering off;
        proxy_request_buffering off;

        client_max_body_size 0;
    }
}

特别注意:不要写 \$

错误写法:

nginx
proxy_set_header Upgrade \$http_upgrade;

正确写法:

nginx
proxy_set_header Upgrade $http_upgrade;

原因是如果你使用了单引号 heredoc(<<'EOF'),Shell 不会展开变量,因此不需要额外转义 $。否则 nginx 会把 \$http_upgrade 当作普通字符串,最终 WebSocket Upgrade Header 失效。

测试配置

检查 nginx 配置

bash
sudo docker exec 1Panel-openresty-TlM5 openresty -t

成功输出:

text
syntax is ok
test is successful

重载 OpenResty

bash
sudo docker exec 1Panel-openresty-TlM5 openresty -s reload

测试 daemon 是否可访问

宿主机:

bash
curl http://127.0.0.1:24444

Docker 容器内部:

bash
sudo docker exec -it 1Panel-openresty-TlM5 curl http://127.0.0.1:24444

都应返回:

text
MCSManager Daemon is Running

检查 docker bridge IP

bash
ip addr show docker0

输出:

text
inet 127.0.0.1/16

因此 proxy_pass http://127.0.0.1:24444; 是正确的。

检查监听端口

bash
sudo ss -tlnp | grep 24443

应看到:

text
0.0.0.0:24443

浏览器测试

打开 https://mcsm.example.com:24443,如果成功会显示:

text
MCSManager Daemon 程序运行中

MCSManager 节点配置

进入:管理面板 → 节点 → 编辑节点

远程节点 IP 地址

填写:

text
wss://mcsm.example.com

注意:

  • 必须写 wss://
  • 不要写端口

远程节点端口

填写:

text
24443

配置完成后点击 更新节点,再 重新连接

最终效果

节点状态:

text
节点状态:在线
网页直连:正常

以下功能恢复:

  • 控制台
  • 文件上传
  • 文件下载
  • WebSocket
  • 实例终端

常见坑总结

1. Docker 内无法访问宿主机

检查 curl http://127.0.0.1:24444 是否可达。

2. 忘记 WebSocket Headers

必须设置:

nginx
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

3. $ 被错误转义

不要写 \$http_upgrade

4. 节点 IP 写错

不要写 mcsm.example.com:24443,正确格式是 wss://mcsm.example.com,端口单独填写。

5. HTTPS 页面连接 HTTP WebSocket

浏览器会直接拒绝(Mixed Content),因此必须使用 WSS://

最终网络结构

text
Browser
    ↓ HTTPS/WSS
OpenResty :24443
    ↓ HTTP/WS
MCSManager Daemon :24444

参考文档