我有一个服务于两个不同域的 Web 应用程序,我们将它们称为eu.example.com
和us.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;
}