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

如何在Nginx中配置规则批量代理所有子域名,无需重复Server块?

Nginx批量代理子域名配置方案

你直接用server_name *.my.domain;搭配proxy_pass https://*.remote.com/;和proxy_set_header Host *.remote.com;是不可行的——Nginx不支持在proxy_pass和proxy_set_header里直接用通配符*匹配子域名,得通过变量动态提取请求中的子域名部分来实现批量代理。

实现思路

  1. 用server_name *.my.domain;匹配所有my.domain的子域名请求(如果要同时兼容主域名my.domain,可以写成server_name my.domain *.my.domain;)
  2. 通过正则或map指令从请求主机名中提取子域名,生成目标域名变量
  3. 将变量代入proxy_pass和Host头,实现对应子域名的代理

推荐配置(用map指令,更稳妥)

# 在server块外部添加map规则,处理域名映射
map $host $target_domain {
    default "";
    my.domain remote.com;
    ~^(.+)\.my\.domain$ $1.remote.com;
}

server {
    listen 6799 default_server ssl http2;
    server_name my.domain *.my.domain;

    # SSL Configuration
    ssl_certificate /home/nginxproxymanager/letsencrypt/live/npm-4/fullchain.pem;
    ssl_certificate_key /home/nginxproxymanager/letsencrypt/live/npm-4/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;

    location / {
        proxy_pass https://$target_domain/;
        proxy_ssl_server_name on;
        proxy_ssl_session_reuse off;
        proxy_redirect off;
        
        proxy_set_header Host $target_domain;

        proxy_hide_header "Cache-Control";
        add_header Cache-Control "no-store, no-cache, must-revalidate, post-check=0, pre-check=0";
        proxy_hide_header "Pragma";
        add_header Pragma "no-cache";
        expires -1;
        add_header Last-Modified $sent_http_Expires;
        
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

配置说明

  • map指令是Nginx处理变量映射更安全的方式,避免if指令的潜在问题
  • 正则~^(.+)\.my\.domain$会提取子域名部分:比如img.my.domain会提取出img,自动拼接成img.remote.com
  • 主域名my.domain直接映射到remote.com,保留原有代理逻辑

内容的提问来源于stack exchange,提问作者sirzento

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 04:35:21