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

如何在/etc/hosts中配置支持动态子域名的规则

如何用通配符替换/etc/hosts中的多个子域名配置?

嘿,我来给你捋清楚怎么实现这个需求!首先得明确一点:**/etc/hosts本身是不支持通配符(比如*.admin.localhost这种写法)**的,它只能做静态的域名-IP映射。不过我们可以通过两种常用的方式来实现动态匹配所有*.admin.localhost子域名的效果:

方法一:用dnsmasq实现通配符DNS解析

dnsmasq是一款轻量的DNS服务器,非常适合本地做自定义域名解析,完美支持通配符规则:

  1. 先安装dnsmasq,根据你的系统用对应的命令:
    • Ubuntu/Debian系:sudo apt update && sudo apt install dnsmasq
    • CentOS/RHEL系:sudo yum install dnsmasq
  2. 编辑dnsmasq的配置文件(一般是/etc/dnsmasq.conf),添加下面这一行:
    address=/admin.localhost/127.0.0.1
    
    这行配置的意思是:所有以admin.localhost为后缀的域名(包括admin.localhost本身和school1.admin.localhost、xxx.admin.localhost这类子域名),都会被解析到127.0.0.1。
  3. 重启dnsmasq服务让配置生效:
    sudo systemctl restart dnsmasq
    
  4. 最后确保你的系统DNS指向本地,这样dnsmasq才能接管解析:
    • 可以临时修改/etc/resolv.conf,添加nameserver 127.0.0.1(注意有些系统会自动覆盖这个文件,可能需要修改网络配置永久生效)
    • 或者在桌面系统的网络设置里,把DNS服务器改成127.0.0.1

做完这些,你就可以删掉/etc/hosts里那5条school1-school5的配置了,只保留127.0.0.1 admin.localhost就行,所有子域名都会自动解析到本地。

方法二:用Nginx的通配符server_name(如果是Web服务场景)

如果你是用Nginx来托管这些子域名的Web服务,那可以直接在Nginx配置里做通配符匹配,不需要额外的DNS工具:

  1. 打开你的Nginx站点配置文件,修改server块的server_name字段:
    server {
        listen 80;
        server_name *.admin.localhost;
        # 下面是你的其他配置,比如root、proxy_pass等
    }
    
  2. 保留/etc/hosts里的127.0.0.1 admin.localhost,删掉那5条school开头的配置
  3. 重启Nginx让配置生效:sudo systemctl restart nginx
    这样所有*.admin.localhost的请求都会被这个Nginx server块处理,完美实现你要的动态子域名支持。

补充说明

为什么直接改/etc/hosts不行?因为hosts文件的设计就是静态映射,它不识别*这种通配符符号,所以必须借助DNS服务器或者Web服务器的通配符规则来实现动态匹配的效果。

内容的提问来源于stack exchange,提问作者Shubham Singh Chouhan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:23:41