除非域不同,否则有没有办法将所有流量代理到某个服务器?
基本上是*
为了server_name
财产?
server {
listen 80;
server_name foo.com
}
server {
listen 80;
server_name *
}
或者,有没有办法设置“默认”服务器,如果其他特定服务器配置都不匹配,它会使用它?
除非域不同,否则有没有办法将所有流量代理到某个服务器?
基本上是*
为了server_name
财产?
server {
listen 80;
server_name foo.com
}
server {
listen 80;
server_name *
}
或者,有没有办法设置“默认”服务器,如果其他特定服务器配置都不匹配,它会使用它?
您不能将 * 用于server_name
. 从文档中:
通配符名称只能在名称的开头或结尾包含星号,并且只能在点边框上。
但是,您可以使用正则表达式:
server {
server_name ~^(www\.)?(.+)$;
location / {
root /sites/$2;
}
}
正如@Valery Viktorovsky 的回答所说,您不能将 * 用于server_name
. 您可以将一个server
块指定为“默认”以接收与其他任何不匹配的所有请求。请参阅此帖子以获取解释。它看起来像这样:
server {
listen 80 default_server;
server_name wontmatch.com; # but it doesn't matter
}
有关更多信息,请参阅文档server_name
。
仅供参考,对于像我这样正在寻找一些不同的东西的人,以下配置将监听并响应所有端口 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
只需删除该链接,一切都应该正常。
只是一个快速更新..根据文档,通配符现在可以工作:http: //nginx.org/en/docs/http/server_names.html