nginx和星号server_name?

Ahm*_*med 5 nginx

有没有办法将所有流量代理到某个服务器,除非该域名不同?

基本上是一个*server_name财产?

server {
  listen 80;
  server_name foo.com
}

server {
  listen 80;
  server_name *
}
Run Code Online (Sandbox Code Playgroud)

或者,有没有办法设置"默认"服务器,然后它会使用它,如果没有其他特定的服务器配置匹配?

Val*_*sky 8

你不能用*server_name.从文档:

通配符名称可能仅在名称的开头或结尾包含星号,并且仅在点边框上包含星号.

但是,您可以使用正则表达式:

server {
    server_name   ~^(www\.)?(.+)$;

    location / {
        root   /sites/$2;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • $ 2是正确的,它是你想要的第二组 (3认同)

pjm*_*rse 7

正如@Valery Viktorovsky的回答所说,你不能使用*for server_name.您可以将server块指定为"默认"以接收与任何其他请求不匹配的所有请求.请参阅此帖子以获得解释.它看起来像这样:

server {
    listen 80 default_server;
    server_name wontmatch.com; # but it doesn't matter
}
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅文档server_name.