除了已定义的所有子域的 nginx 反向代理

nginx reverse-proxy for all subdomains except alredy defined

我有一个相当简单的问题,我有一个环境,我经常更改子域,但有些子域仍然存在,现在我想转发 api.example.com 到 1.2.3.4:8080 和所有其他传入请求 2.3.4.5:9090。到目前为止,我的设置是将所有来自 api 子域的请求转发到 1.2.3.4:8080:

server {
        listen 80;
        listen [::]:80;
        server_name api.example.com;

        access_log /var/log/nginx/reverse-access.log;
        error_log /var/log/nginx/reverse-error.log;

        location / {
                    proxy_pass http://1.2.3.4:8080;
  }
}

现在我需要一种方法将所有其他子域指向 2.3.4.5:9090

您只需要动态解析您的子域。以下配置将处理您的情况。

server {
        listen 80;
        listen [::]:80;
        server_name ~^(?<subdomain>.+)\.example\.com;

        access_log /var/log/nginx/reverse-access.log;
        error_log /var/log/nginx/reverse-error.log;

        location / {
                    if ($subdomain = "api") {
                           proxy_pass http://1.2.3.4:8080;
                    }

                    proxy_pass http://2.3.4.5:9090;
        }
}

listen中使用default_server。参见 docs

server {
    listen 80;
    listen [::]:80;
    server_name api.example.com;

    location / {
        proxy_pass http://1.2.3.4:8080;
    }
}

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;

    location / {
        proxy_pass http://2.3.4.5:9090;
    }
}