5

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

基本上是*为了server_name财产?

server {
  listen 80;
  server_name foo.com
}

server {
  listen 80;
  server_name *
}

或者,有没有办法设置“默认”服务器,如果其他特定服务器配置都不匹配,它会使用它?

4

4 回答 4

8

您不能将 * 用于server_name. 从文档中:

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

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

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

    location / {
        root   /sites/$2;
    }
}
于 2013-05-30T16:21:09.070 回答
8

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

server {
    listen 80 default_server;
    server_name wontmatch.com; # but it doesn't matter
}

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

于 2013-05-30T16:27:07.523 回答
3

仅供参考,对于像我这样正在寻找一些不同的东西的人,以下配置将监听并响应所有端口 80 请求,无论您使用 IP 还是 URL(AKA 一切):

server {
    listen 80 default_server;
    server_name _;
...
}

取自: http: //nginx.org/en/docs/http/server_names.html

在包罗万象的服务器示例中,可以看到奇怪的名称“_”:

服务器 { 听 80 default_server; 服务器名称 _; 返回 444;} 这个名字没什么特别的,...

由于符号链接使用相同的匹配模式,因此您将在符号链接仍处于活动状态时sudo service nginx restart... start同时出现错误。/etc/nginx/sites-enabled/default只需删除该链接,一切都应该正常。

于 2016-10-21T15:25:13.513 回答
2

只是一个快速更新..根据文档,通配符现在可以工作:http: //nginx.org/en/docs/http/server_names.html

于 2016-04-04T19:08:33.927 回答