Nginx - 监听多个域,仅在一个域上提供部分内容

Nginx - 监听多个域,仅在一个域上提供部分内容

我有一个服务于两个不同域的 Web 应用程序,我们将它们称为eu.example.comus.example.com

我已经在应用程序前面设置了 nginx,监听两个域:

server {
    listen 443 ssl;
    server_name eu.example.com us.example.com;

    ...
}

现在美国团队决定他们想要在 上建立一个博客us.example.com/blog,它应该指向另一台服务器上的 WordPress。

我可以通过在我的 nginx 服务器配置中添加新的位置指令来实现这一点:

location /blog {
   proxy_pass https://us-wordpress.example.com/blog;
}

问题是,美国博客现在也可以从 访问eu.example.com/blog。我尝试将其包装在 if 中:

location /blog {
   if ($hostname = us.example.com) {
       proxy_pass https://us-wordpress.example.com/blog;
   }
}

但是然后我收到来自 nginx 的一个错误:"proxy_pass" cannot have URI part in location given by regular expression, or inside named location, or inside "if" statement, or inside "limit_except" block

我可以通过每个域设置单独的指令来实现相同的server { ... }目的,但这会重复大部分配置,我希望避免这种情况。

有没有一种合理的方法可以实现这一目标?

答案1

你应该像你说的那样,使用单独的服务器块和另一个包括为两个服务器创建一个 .d 文件以避免重复。

server{ 
    listen 443 ssl;
    server_name us.example.com;
    include commonfile;
    location /blog {
        ...
    }
}
server {
    listen 443 ssl;
    server_name eu.example.com;
    include commonfile;
}

相关内容