Nginx – 侦听多个域名,只在一个域名上提供一些内容

我有一个服务于2个不同域的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服务器configuration来达到这个目的:

 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 { ... }指令来达到同样的效果,但是这会重复大部分的configuration,我宁愿避免这种情况。

有没有办法以合理的方式实现这一点?

你应该像你说的那样用单独的服务器块来实现它,另一个服务器包括 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; }