快速笔记:域名中使用下划线的限制

域名中使用下划线的限制

背景

根据 RFC 952RFC 1123 的规范:

  • 域名中不允许使用下划线 _ 作为有效字符。
  • 尽管某些工具和系统在非严格模式下可能允许下划线,但它并不符合标准规范,因此可能导致解析或访问问题。

问题

  1. Nginx 报错或无法匹配
    server_name 配置中使用带下划线的域名时,可能会报错:
1
nginx: [emerg] invalid server name

或者即使配置成功,访问时也无法匹配正确的 server_name

  1. 浏览器或客户端不支持
    很多浏览器和 DNS 客户端会拒绝解析包含下划线的域名,导致用户无法访问相关服务。

解决方案

1. 使用有效的域名字符

建议将下划线 _ 替换为连字符 -,这是标准域名允许的字符。例如:

  • dev_xxx.klysisle.space 替换为 dev-xxx.klysisle.space

Nginx 配置示例

1
2
3
4
5
6
7
8
server {
listen 80;
server_name dev-xxx.klysisle.space;

location /login/ {
proxy_pass http://127.0.0.1:8180;
}
}

2. 修改现有系统配置

如果现有系统中已经大量使用了带下划线的域名,可以考虑以下几种方法:

  • **DNS 记录别名 (CNAME)**:为带下划线的域名创建一个不带下划线的别名。例如,将 dev_xxx.klysisle.space 的 CNAME 记录指向 dev-xxx.klysisle.space
  • 重定向:在 Web 服务器中配置重定向,将访问带下划线域名的请求重定向到不带下划线的域名。例如,在 Nginx 中可以使用 return 301 指令进行重定向。

Nginx 重定向示例

1
2
3
4
5
6
7
8
server {
listen 80;
server_name dev_xxx.klysisle.space;

location / {
return 301 http://dev-xxx.klysisle.space$request_uri;
}
}

总结

使用下划线作为域名的一部分虽然在某些情况下可能工作,但并不符合标准规范,可能会导致各种兼容性问题。为了确保域名的广泛兼容性和稳定性,建议始终使用标准允许的字符,如连字符 -。通过替换下划线或配置重定向,可以有效解决相关问题,确保服务的正常访问。

------ 本文结束 ------
------ 版权声明:转载请注明出处 ------