Nginx 多个子域名和多个域名

Nginx 多个子域名和多个域名

我在检测 中的子域名时遇到了问题server_name。我的用户可以在我的门户中“注册”他们的域名。他们只能为他们的子域名 ( user-domain.com) 或/和通配符 ( *.user-domain.com) 或通配符注册域名 ( *.special.user-domain.com)。有一个限制可以避免“链接”,如果 user-domain.com 已注册,他们就不能注册whatever.user-domain.com为域名。它只是user-domain.com

对于每个未注册为通配符的域名,我在 sites-available 文件夹中创建 nginx 服务器块配置。稍后我将 site-eabled 链接到正确的 site-available 配置。示例:

server {
    listen 443 ssl;
    server_name user-domain.com;
    ssl_certificate /etc/nginx/ssl/user-domain.com/fullchain.cer;
    ssl_certificate_key /etc/nginx/ssl/user-domain.com/user-domain.com.key;
}

证书通过以下方式创建acme.sh对于完整域名,通过 spining temp webserver 进行,对于通配符,通过 dns 提供商 api 进行。对于通配符域名,我使用这样的正则表达式,但似乎不起作用。

server {
    listen 443 ssl;
    server_name ~^(.*)\.wildcarded\.com$ ;
    ssl_certificate /etc/nginx/ssl/wildcarded.com/fullchain.cer;
    ssl_certificate_key /etc/nginx/ssl/wildcarded.com/wildcarded.com.key
    .
    .
    .
}

我的解决方案是实现该目标的正确方法吗?正确的正则表达式应该是什么?

答案1

根据NGINX 手册上的服务器名称对于通配符域来说,以下解决方案是最简单的,避免使用正则表达式匹配:

server {
   listen       443 ssl;
   server_name  *.example.org;
   ...
}

另请注意,手册中写道:

按名称搜索虚拟服务器时,如果名称与多个指定的变体匹配(例如,通配符名称和正则表达式匹配),则将按照以下优先顺序选择第一个匹配的变体:

  1. 确切名称
  2. 以星号开头的最长通配符名称,例如“*.example.org”
  3. 以星号结尾的最长通配符名称,例如“mail.*”
  4. 第一个匹配的正则表达式(按配置文件中出现的顺序)

相关内容