首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >nginx做泛域名解析的域名的正则判断

nginx做泛域名解析的域名的正则判断

作者头像
用户12023652
发布2026-07-29 11:53:08
发布2026-07-29 11:53:08
210
举报

一、 泛域名的解析与使用基础

域名的泛域名解析

  • 作用:可以让域名支持无限的子域名(这也是泛域名解析最大的用途)。
  • 泛域名可以用根域名,也可以用二级域名
  • 泛域名解析,需要一台有独立IP的服务器
  • 根域名的泛域名解析,添加*的A记录, 例如:*.domain.com
  • 二级域名的泛域名解析, 添加.二级名称,例如:.test.domain.com

nginx可以直接做泛域名解析

直接设置serever中的server_name

代码语言:javascript
复制
server {
    listen       80;
    server_name *.edu.qumogu.com

    location / {

       root   /data/www/test/;
       index  index index.html;
    }

任何一个aaa.test.domain.com都可以访问

二、 泛域名也有规则,比如字符的长度,字符的规则,如何设置规则呢?

需要使用nginx的正则

  1. ^: 匹配字符串的开始位置;
  2. $:匹配字符串的结束位置;
  3. .和: .匹配任意字符,匹配数量0到正无穷;
  4. \ 将后面接着的字符标记为一个特殊字符或者一个原义字符或一个向后引用, 例如,. 斜杠用来转义,.匹配 . ;
  5. (值1|值2|值3|值4):或匹配模式,例:(jpg|gif|png|bmp)匹配jpg或gif或png或bmp
  6. i不区分大小写
  7. *~ 为区分大小写匹配
  8. ~* 为不区分大小写匹配
  9. !和!*分别为区分大小写不匹配及不区分大小写不匹配
  10. (pattern) 匹配括号内的pattern
    • 匹配前面字符串一次或者多次
  11. nginx是支持[a-zA-Z]和{n,m}的,但是{}与conf的冲突,所以,匹配规则一定要用""包含起来

需要使用nginx的判断if

代码语言:javascript
复制
# 示例一
if ($host !~* "^[a-zA-Z0-9_]{3,10}\.test\.domain\.com$") {
      return 444;
 }
# 示例二    
if ($host ~* ^newhouse\.(.+)?\.house365\.com) {
     set $host_city $1;
     rewrite ^(.*)$ http://$host_city.house365.com$1 permanent;
}

需要使用nginx的变量,例如,下面的泛域名解析

代码语言:javascript
复制
    server_name ~^(?<subdomain>.+)\.test\.domain\.com$;
    if ($subdomain !~* "^[a-zA-Z0-9]{3,10}$") {
      return 444;
    }

需要使用nginx的return

  • 可以直接通过return code 来返回http的状态码

三、为泛域名解析设置正则判断的方法

不设置severname 直接判断$host

代码语言:javascript
复制
    server {
        listen       80;
        if ($host !~* "^[a-zA-Z0-9_]{3,10}\.test\.domain\.com$") {
            return 444;
        }
    
        location / {
    
           root   /data/www/test/;
           index  index index.html;
        }
    }

设置server_name取出变化的部分,再判断

代码语言:javascript
复制
    server {
        listen       80;
        server_name ~^(?<subdomain>.+)\.test\.domain\.com$;
        if ($subdomain !~* "^[a-zA-Z0-9]{3,10}$") {
            return 444;
        }
    
        location / {
    
           root   /data/www/test/;
           index  index index.html;
        }
    }

四、nginx的正则使用的总结

字符长度判断{n,m} 需要给整个规则加上""

代码语言:javascript
复制
实现1的时候,因为没有看过网上有加双引号的案例,所以不敢加 $host !~* ^[a-zA-Z0-9_]{3,10}\.test\.domain\.com$ 一直报错,一度怀疑nginx是否支持长度的判断

在severname中一直无法,实现直接判断长度,所以才有2的变种实现

代码语言:javascript
复制
server_name ~ "^[a-zA-Z0-9_]{3,6}\.test\.domain\.com$";一直报server_name不是以;为结束的错误

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-09-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、 泛域名的解析与使用基础
  • 二、 泛域名也有规则,比如字符的长度,字符的规则,如何设置规则呢?
  • 三、为泛域名解析设置正则判断的方法
  • 四、nginx的正则使用的总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档