如何在 nginx 上配置:回退/默认网站

Ram*_*yag 7 nginx

在 Apache 中,如果 1) 我有多个虚拟主机侦听一个端口并且 2) 如果没有请求与任何虚拟主机匹配,那么第一个虚拟主机将是响应请求的虚拟主机。例如,假设我有这个配置:

<VirtualHost *:8080>
  ServerName www.fallbacksite.com:8080
  ServerAlias *.fallbacksite.com
  # ...
</VirtualHost>

<VirtualHost *:8080>
  ServerName www.specific-site.com:8080
  ServerAlias *.specific-site.com
  # ...
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

然后:

  • 当某人指定-site.com:8080 时,第二个虚拟主机将响应请求(这里并不奇怪)
  • 当有人访问 fallbacksite.com:8080 时,那么第一个虚拟主机会响应请求(这里并不奇怪)
  • 当有人访问hellohowareyou.com:8080(并且hellohowareyou.com指向服务器),那么第一个虚拟主机会响应请求

这是我试图用 nginx 实现的最后一个场景,但在 nginx.org 站点中看不到任何关于此的内容。我尝试了过于急切的通配符,但它抱怨说它无效。

您将如何在 nginx 中进行上述配置?提前致谢!

Jap*_*Mul 8

如果您只想要一个特定的虚拟主机来回答请求,您可以简单地执行以下操作。添加(或更改)监听行以包含default_server在末尾。这将在不更改 URL 的情况下为该虚拟主机提供服务。

server {
    # Add default_server for any unresolved request
    listen 80 default_server;        
}
Run Code Online (Sandbox Code Playgroud)

如果您想在用户点击时进行重定向,hellohowareyou.com您可以添加一个新server块并重定向到您要使用的主机:

server {
    # Add default_server only here for any unresolved request
    listen 80 default_server;    
    server_name _;
    rewrite ^ http://fallbacksite.com$request_uri permanent;
}
Run Code Online (Sandbox Code Playgroud)