容器与平台
Railway 自定义域名与 SSL 证书配置
Railway 会在自定义域名验证通过后自动签发免费的 Let's Encrypt 证书。证书用 ECDSA 密钥,有效期 90 天,剩 30 天时自动续期。每个域名都要加两条记录:一条 CNAME 指向服务的 up.railway.app 地址,一条 TXT 用来证明所有权。Railway 支持通配符域名,但不支持上传自己的证书。
步骤和菜单名称以 Railway 官方文档为准(截至 2026 年 11 月)。abc123.up.railway.app 和 example.com 是示例。
速查表
| 问题 | Railway 的做法 |
|---|---|
| 自动证书的 CA | Let's Encrypt(ECDSA 密钥) |
子域名 www.example.com |
CNAME 指向 abc123.up.railway.app,再加一条 TXT |
根域名 example.com |
需要 CNAME 拉平或动态 ALIAS,再加一条 TXT |
| CAA 要放行 | letsencrypt.org |
| 通配符证书 | 支持,额外加一条 _acme-challenge CNAME |
| 上传自有证书 | 不支持 |
| 续期 | 自动,90 天有效期剩 30 天时 |
| 自定义域名数量 | Trial 1 个;Hobby 每个服务 2 个;Pro 每个服务 20 个(可申请提高) |
国内访问说明
Railway 的服务部署在境外,从中国大陆访问的速度和稳定性没有保证,不同网络环境差别很大,这和证书配置无关。需要面向国内用户长期稳定运行、或者需要 ICP 备案的业务,建议部署在阿里云、腾讯云等国内云上,证书可以参考 acme.sh 用阿里云 DNS/DNSPod 签证书 或 阿里云 SSL 证书。
第一步:添加域名
打开服务的 Settings → Public Networking,点 “+ Custom Domain”,输入域名,选择应用监听的目标端口。Railway 会给出两条要添加的记录:
- 一条
CNAME,比如g05ns7.up.railway.app; - 一条用于验证所有权的
TXT记录。
example.com 和 www.example.com 算两个自定义域名,所以只能加 1 个域名的 Trial 套餐没法两个都用。Freenom 的域名不支持。
第二步:添加 DNS 记录
两条记录都要严格按控制台显示的内容添加。缺了 TXT 记录,即使 CNAME 已经生效,请求也会返回 404,因为 Railway 先确认所有权再转发流量。
| 主机记录 | 类型 | 记录值 |
|---|---|---|
www |
CNAME |
abc123.up.railway.app |
| 按控制台显示 | TXT |
按控制台显示 |
根域名。 Railway 不提供 A 记录的目标 IP,DNS 服务商必须支持 CNAME 拉平(Cloudflare 支持)或动态 ALIAS(比如 DNSimple)。Railway 文档点名不支持的有 AWS Route 53、Azure DNS、Hostinger、GoDaddy、NameSilo、Hurricane Electric、Squarespace。遇到这种情况,要么把域名的 NS 换到支持 CNAME 拉平的服务商,要么只用 www 提供服务。根域名用阿里云解析或 DNSPod 的,先确认服务商是否支持在根域名上这样做,不支持就同样采用上面两种办法之一。
同一个主机名上不要同时存在 A 和 CNAME 记录。DNS 全球生效最长可能要 72 小时。
第三步:检查 CAA 记录
没有 CAA 记录就没有限制。如果有,要包含 Let's Encrypt:
example.com. 3600 IN CAA 0 issue "letsencrypt.org"
可以用 dig CAA example.com 或 CAA 检测工具 查看当前策略。
第四步:等待绿色对勾
Railway 验证域名后,域名旁边会出现绿色对勾,证书一般在一小时内签好。如果记录开了 Cloudflare 代理,Railway 还会显示 Cloudflare proxy detected。
在 Cloudflare 上同时用根域名和 www
Railway 文档的做法是根域名提供服务,www 跳转到根域名,步骤如下:
- 在 Railway 里把
example.com添加为自定义域名。 - 在 Cloudflare 添加
@的CNAME,指向 Railway 给的地址,开启代理;再添加TXT记录。 - 再加一条
www的CNAME,目标填@,开启代理。 - SSL/TLS > Overview 选 Full,不要选 Full (Strict)。
- 在 SSL/TLS > Edge Certificates 里开启 Universal SSL。
- 建一条 Bulk Redirect,从
https://www.example.com以301跳到https://example.com。
不开代理时,Cloudflare 不会把这个域名和你的 Railway 项目关联起来,会出现 ERR_TOO_MANY_REDIRECTS。开了代理时,比一级子域名更深的名字(*.sub.example.com)需要 Cloudflare 的 Advanced Certificate Manager,否则只能设为 DNS only。
通配符域名
添加 *.example.com 时,Railway 会给出两条 CNAME 和一条 TXT:一条 CNAME 给通配符本身,一条给 _acme-challenge(Railway 签证书要用),TXT 用于所有权验证,三条缺一不可。指向 authorize.railwaydns.net 的那条 CNAME 不能开代理,所以在 Cloudflare 上要把 _acme-challenge 记录设成 DNS only(灰色云),并开启 Universal SSL。通配符可以用在任意层级(*.sub.example.com),但不能嵌套(*.*.example.com)。
自有证书
Railway 文档写明目前不支持外部 SSL 证书。必须使用某家 CA 的证书时,只能在 Railway 前面终止 TLS,比如放在 Cloudflare 后面。
验证
配置正确时,颁发者是 Let's Encrypt,SAN 里有你的域名;返回 *.up.railway.app 证书说明你的域名证书还没签下来。用 SSL 证书检查 检查,或在终端运行:
curl ssl.sh/example.com
查看 Railway 返回的证书:
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null \
| openssl x509 -noout -issuer -subject -ext subjectAltName -dates
自动续期
Railway 在证书剩余 30 天时自动续期。Let's Encrypt 的默认有效期 2027 年 2 月 10 日缩短到 64 天、2028 年 2 月 16 日缩短到 45 天,Railway 文档里的 90 天是现在的默认值。续期依赖的 DNS 和首次签发一样,CNAME、TXT 以及通配符的 _acme-challenge 都要保留。建议用 ssl.sh 监控(开发中) 盯着域名。
常见问题排查
先做这几件事:确认服务已部署且在运行,用无痕窗口测试,清本地 DNS 缓存,添加域名后至少等一小时。不要反复删除再添加域名:Let's Encrypt 对完全相同的一组域名,7 天内最多签 5 张证书,反复重试可能被挡好几天,见 Let's Encrypt 频率限制。
- 证书卡在“Validating Challenges”:DNS 没生效或填错、CAA 挡住了 Let's Encrypt、DNSSEC 配置有误(用 dnsviz.net 检查),或者 Cloudflare 代理干扰。Railway 推荐的“切换法”:先把 Cloudflare 记录改成 DNS only,等 Railway 出现绿色对勾,再把代理打开。
- ERR_TOO_MANY_REDIRECTS:Cloudflare 用的是 Flexible 模式,改成 Full。
- Error 526: Invalid SSL Certificate:Cloudflare 用的是 Full (Strict),改成 Full。
- Error 525: SSL Handshake Failed:证书还没签下来或签发过程临时出错。等一等,检查 DNS,切换一下代理开关。
- 证书显示
*.up.railway.app:域名还没验证通过,检查两条记录,删掉冲突的A记录。 - 只有部分用户打不开:可能是旧系统旧浏览器、公司代理或杀毒软件的 HTTPS 扫描,从其他网络用
openssl s_client测一下。 - CAA 报错:见 CAA 记录阻止签发。签发卡住超过 72 小时,联系 Railway 支持。
常见问题
Railway 的证书是哪家 CA 签的?
Let's Encrypt。Railway 签发 ECDSA 证书,有效期 90 天,剩 30 天时续期。DNS 配好后一般一小时内签完,个别情况最长 72 小时。
能在 Railway 上传自己的证书吗?
不能。Railway 文档写明目前不支持外部 SSL 证书,因为它会替你签发。
CNAME 已经生效了,为什么访问还是 404?
缺了 TXT 所有权记录。Railway 要等控制台显示的 CNAME 和 TXT 两条记录都加好并验证通过,才会把流量转给你的服务。
Cloudflare 的 SSL 模式选 Full 还是 Full (Strict)?
选 Full。Railway 文档说 Full (Strict) 无法正常工作:签发或续期期间 Railway 可能临时返回默认的 *.up.railway.app 证书,Strict 模式会把它当成域名不匹配而拒绝。