如何在nginx中将动态子域名重写为路径URI?

我有一个要求,即 {any-dynamic-subdomain}.domain.com 应该重写为 domain.com/{any-dynamic-subdomain} 但不适用于 www.domain.com

例如:

  1. api.domain.com -> domain.com/api

  2. api-1.domain.com -> domain.com/api-1

以此类推...

注意:子域名的性质是动态的。

Nginx版本:openresty/1.11.2.2

当前的nginx配置:

server {
    listen       80;
    server_name  domain.com;
    return       301 https://www.domain.in$request_uri;
}

server {
    listen 80;
    server_name www.domain.com;
    set $upstream_endpoint backend-api.tools.com;
    location / {
        proxy_set_header HOST $upstream_endpoint;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_read_timeout 300;
        proxy_pass http://$upstream_endpoint;
    }
    ------------------------
}

请建议相应的Nginx配置。谢谢

点赞
用户5962802
用户5962802

你需要在server_name指令中使用命名捕获:

server {
    listen       80;
    server_name www.domain.com;
    root /var/www/htmldoc;
    index index.htm index.html;
    location / {
      try_files $uri $uri/ =404;
    }
}

server {
    listen 80;
    server_name  ~^(?<name>[^\.]+)\.domain\.com$;
    set $upstream_endpoint backend-api.tools.com;
    location / {
        proxy_set_header HOST $upstream_endpoint;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_read_timeout 300;
        proxy_pass http://$upstream_endpoint/$name;
    }
    ------------------------
}
2020-12-22 08:46:30