You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多租户应用Nginx配置实现自定义域名绑定及SSL支持问题咨询

解决方案

仅配置A记录是否足够?

不够,存在两个核心问题:

  • 当前Nginx配置的server_name仅匹配.one.com后缀的域名,用户自定义域名无法命中该业务server块,会被Nginx分配到默认站点,导致访问异常
  • 现有SSL证书仅覆盖one.com及其子域名,自定义域名走HTTPS访问时会触发证书不被信任的报错,无法正常建立加密连接

Nginx配置调整步骤

1. 调整server_name匹配规则

将两个server块中的server_name .one.com "";修改为server_name _;,匹配所有指向该服务器的域名:

# 80端口跳转配置
server {
    listen 80;
    listen [::]:80;
    server_name _;
    # 保留ACME验证路径不跳转,方便后续签发自定义域名证书
    location /.well-known/acme-challenge/ {
        root /home/forge/one.com/public;
    }
    return 301 https://$host$request_uri;
}

原有FORGE相关的配置注释可正常保留,不影响业务运行。

2. 配置自定义域名动态SSL证书

你可以选择适配自身业务规模的证书方案:

方案A:少量自定义域名场景(手动维护)

每个用户提交自定义域名并验证A记录生效后,手动用certbot签发免费SSL证书:

# 安装certbot
apt install certbot -y
# 签发证书,webroot路径和你业务站点根目录保持一致
certbot certonly --webroot -w /home/forge/one.com/public -d 【用户自定义域名】

然后在443端口的server块中,将固定的ssl_certificate配置替换为变量匹配 (需Nginx版本≥1.11.5):
首先在Nginx全局http块(通常在/etc/nginx/nginx.conf中)新增map规则:

map $ssl_server_name $cert_dir {
    default /etc/nginx/ssl/one.com/1233982;
    # 匹配自定义域名映射到对应证书目录,可手动新增条目
    "user1.com" /etc/letsencrypt/live/user1.com;
    "user2.com" /etc/letsencrypt/live/user2.com;
}

再修改server块中的证书配置:

ssl_certificate $cert_dir/fullchain.pem;
ssl_certificate_key $cert_dir/privkey.pem;

方案B:大量自定义域名场景(自动化)

搭配acme.sh的自动签发钩子,或者使用OpenResty的lua模块实现证书的自动申请、加载、续期,无需手动干预:

  • 所有自定义域名的证书统一存放在指定目录,比如/etc/nginx/ssl/custom_domains/
  • 全局http块的map规则修改为正则匹配:
map $ssl_server_name $cert_path {
    default /etc/nginx/ssl/one.com/1233982/server;
    ~^(?<domain>.+)$ /etc/nginx/ssl/custom_domains/$domain;
}
  • server块证书配置:
ssl_certificate $cert_path.crt;
ssl_certificate_key $cert_path.key;
  • 新增后台脚本监听用户新增域名的事件,自动调用acme.sh签发证书并存放到对应目录即可。

3. 验证配置生效

修改完成后执行以下命令验证配置合法性,重载Nginx即可:

nginx -t
systemctl reload nginx

内容的提问来源于stack exchange,提问作者JKA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 08:27:02