在Nginx中配置泛域名转发,通常用于实现通配符子域名(如 *.example.com)的反向代理或负载均衡。泛域名可使所有子域名请求由同一组后端服务器处理,或根据子域名动态路由到不同目标服务器。以下是专业配置方法与注意事项。

一、基础泛域名匹配配置
使用通配符 *.example.com 作为 server_name 值,可匹配任意子域名,如 a.example.com、www.example.com 等。注意:通配符不能匹配根域名 example.com 本身,若需同时匹配,需额外添加 example.com 条目。示例配置:
server {
listen 80;
server_name *.example.com;
...
}
若需同时匹配根域名,可写成:
server_name *.example.com example.com;
二、正则表达式匹配泛域名
使用正则表达式可更灵活地提取子域名部分,便于动态转发。例如:
server {
listen 80;
server_name ~^(?<subdomain>.+)\.example\.com$;
...
}
上述配置将子域名捕获到变量 $subdomain 中,后续可在 proxy_pass 或其他指令中引用。
三、转发规则配置(proxy_pass)
将所有泛域名请求转发至固定后端:
location / {
proxy_pass http://backend_server;
}
根据子域名动态转发至不同后端:
location / {
proxy_pass http://$subdomain.example.com;
}
或者使用map指令实现更复杂的映射规则:
map $subdomain $backend {
default 192.168.1.10;
api 192.168.1.20;
admin 192.168.1.30;
}
server {
...
location / {
proxy_pass http://$backend;
}
}
四、SSL证书与泛域名
若启用HTTPS,需使用泛域名SSL证书(如 *.example.com),该证书可覆盖所有子域名,但不包含根域名。若需保护根域名,应购买同时涵盖 example.com 和 *.example.com 的证书。配置示例:
server {
listen 443 ssl;
server_name *.example.com example.com;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
...
}
五、匹配优先级与注意事项
Nginx 的 server_name 匹配顺序为:精确匹配优先于通配符起始(如 *.example.com),再优先于通配符结尾(如 www.*),最后是正则表达式。若多个 server 块匹配同一请求,精确匹配会被选中。
另外,泛域名解析DNS需配置 A 或 CNAME 记录,将 *.example.com 指向Nginx服务器IP,否则请求无法到达Nginx。
对于高并发场景,正则表达式匹配可能影响性能,建议优先使用通配符,必要时使用正则并开启 pcre_jit on; 优化。
六、完整示例:根据子域名动态转发到不同端口
server {
listen 80;
server_name ~^(?<sub>.+)\.example\.com$;
location / {
proxy_pass http://127.0.0.1:8080/$sub$request_uri;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
以上配置将 abc.example.com 的请求代理到 http://127.0.0.1:8080/abc/ 路径下,实现子域名到路径映射。实际使用时需根据业务逻辑调整 proxy_pass 的URL结构。

查看详情

查看详情