Repository navigation
nginx separate domains
目标:
panel.example.com → Nginx HTTPS → Meridian 管理面板
media.example.net → Nginx HTTPS → Meridian 站点代理 → Emby
以下适用于同机 Linux 一键安装的外部 Nginx 模式:Meridian 在 127.0.0.1:9090 提供 HTTP。示例域名、邮箱、端口和 Emby 地址需替换成自己的实际值。已有原生 HTTPS 实例不能只把变量改成 false 就套用这份 HTTP 回源配置;数据库保存的 TLS 和监听设置需要单独迁移。
将 panel.example.com 和 media.example.net 的 A 记录指向服务器公网 IPv4;Cloudflare 先使用“仅 DNS”。如果配置 AAAA,也要正确指向同一服务的 IPv6。服务器应允许公网访问 80 和 443,HTTP-01 证书验证需要 80。
新安装可使用项目一键安装命令:
bash <(curl -fsSL https://raw.githubusercontent.com/snnabb/Meridian/master/install.sh) install \
--port 9090 --domain panel.example.com --email admin@example.com -y该流程安装 Nginx / Certbot,申请面板证书并设置面板的代理。已经按此方式安装且面板 HTTPS 正常的部署,直接继续下一步。
内部配置应为:
PORT=9090
PANEL_BIND_ADDR=127.0.0.1
PANEL_DOMAIN=panel.example.com
TRUSTED_PROXY_CIDRS=127.0.0.1/32,::1/128保留原来的持久密钥。此流程不需要在 Meridian 中申请原生证书,也不要求设置或修改 PANEL_ROUTE_DOMAIN。下面直接指定完整站点域名。
在服务器创建 /etc/nginx/conf.d/meridian-media.conf,写入以下内容,并将域名和内部端口换成实际值:
map $http_upgrade $meridian_media_connection {
default upgrade;
'' close;
}
server {
listen 80;
listen [::]:80;
server_name media.example.net;
client_max_body_size 300m;
access_log off;
location / {
proxy_pass http://127.0.0.1:9090;
proxy_http_version 1.1;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $meridian_media_connection;
proxy_buffering off;
proxy_request_buffering off;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
}
}这是新增媒体站点配置,面板继续使用安装器创建的 /etc/nginx/conf.d/meridian-panel.conf。两个入口都回源同一个 Meridian HTTP 端口,保留客户端请求的 Host。
检查并加载:
sudo nginx -t && sudo systemctl reload nginx申请媒体域名证书并让 Certbot 配置 HTTPS:
sudo certbot --nginx \
-d media.example.net --cert-name media.example.net \
--email admin@example.com --agree-tos --redirect
sudo nginx -t && sudo systemctl reload nginx确保 Certbot 的定时续期任务保持启用。可以验证该证书的续期流程:
sudo certbot renew --cert-name media.example.net --dry-run这里申请具体域名 media.example.net 即可。未来要覆盖任意一层子域名时,再通过 acme.sh 或 Certbot 的 DNS-01 流程申请 *.example.net,将 Nginx 的证书及 server_name 对应调整;各站点仍需在 Meridian 中注册。
当前界面在未启用原生 TLS 时禁用新建“域名前缀”,所以这一步通过已有的站点 API 完成。后端在 v1.13.4 和 v1.13.5 均支持该方式。
登录 https://panel.example.com/,打开浏览器开发者工具(F12)的“控制台 / Console”。将下面的站点域名和 Emby 回源地址替换为真实值后执行一次:
await (async () => {
const response = await fetch('/api/sites', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Emby',
ingress_mode: 'host',
public_host: 'media.example.net',
target_url: 'http://127.0.0.1:8096'
})
});
const result = await response.json();
if (!response.ok) throw new Error(result.error || `HTTP ${response.status}`);
console.log('站点已创建', result.id, result.public_host);
})();target_url 是 Meridian 服务器能访问的原 Emby 地址。如果 Emby 在别的机器上,填写那台机器的地址;如果上游使用 /emby 基础路径,保留该路径。浏览器提交使用当前面板登录状态,不需要复制登录 Token。
看到“站点已创建”后刷新面板。通过完整 public_host 建立的站点不需要节点基础域名;但当前域名前缀编辑表单不能完整表达这种配置,后续修改入口域名仍应使用站点 API。
-
https://panel.example.com/:Meridian 登录 / 管理界面。 -
https://media.example.net/:Emby 界面,使用原 Emby 账户登录。 - 在 Meridian 的站点列表确认站点正在运行,实际播放并检查统计。
若媒体域名显示 Meridian 面板,应核对 API 中 public_host 是否正确,以及 Nginx 是否保持 Host $http_host。若为 502,检查 Meridian 实际监听协议与端口;若为 421,检查完整站点域名是否已经成功注册。
- 当前界面限制:外部 HTTPS 不会启用新增表单的原生 TLS 能力;本页通过 API 注册完整站点 Host。不要为了解锁表单而在 Meridian 中申请或导入另一套原生证书。
-
证书覆盖:两个域名需要各自匹配的证书。只使用
media.example.net时不需要泛域名证书;*.example.net也不能覆盖panel.example.com。当前 Meridian 原生 HTTPS 共用一套证书,不支持面板和站点分别管理两张证书。 -
域名来源:完整
public_host不依赖PANEL_ROUTE_DOMAIN。已有数据库中的节点基础域名不会随该环境变量变化;手动保存或配置过原生 HTTPS 的面板域名也以数据库为准,见 配置参考。 - 保留 Host:两个 Nginx 入口都转发到 Meridian,由请求的 Host 区分管理面板和媒体站点。不能把媒体请求的 Host 改成面板域名,也不能把媒体入口直接代理到 Emby 后仍期待 Meridian 统计该流量。
- 内部协议与端口:此示例回源为 HTTP。已有原生 HTTPS 部署需按实际协议、端口和证书验证配置回源,或先完成部署方式迁移;单改环境变量不会覆盖已保存的 TLS 状态。
-
修改端口与升级:安装器只维护其面板 Nginx 文件;本页新增的
meridian-media.conf由管理员维护。未来切换 Meridian 内部端口时也要同步修改媒体配置中的proxy_pass,检查并重载 Nginx,否则媒体入口会出现 502。 -
客户端地址与 Docker:本页仅适用于 Nginx 和非容器 Meridian 同机部署。Docker 的容器监听、端口映射及可信代理来源不同,见 Docker 部署。不要直接把容器内
127.0.0.1当成宿主机,也不要把所有来源设为可信代理。 - 使用与维护:保留数据库和持久密钥,确认 Certbot 自动续期任务运行。Meridian 服务重启会中断现有连接;站点实际播放仍取决于 Emby、回源网络及客户端支持。
此方式已通过隔离环境中的真实 Nginx HTTPS、面板登录、站点创建 API、Host 分流和上游转发验证。公共证书签发与实际播放仍需按自己的 DNS、服务器和媒体源完成验证。