有没有办法将所有流量代理到某个服务器,除非域名不同?
*
属性基本上是server_name
?
server {
listen 80;
server_name foo.com
}
server {
listen 80;
server_name *
}
或者,有没有办法设置“默认”服务器,如果没有其他特定服务器配置匹配,它会使用它吗?
答案 0 :(得分:8)
您不能将*用于server_name
。来自documentation:
通配符名称可能只在名称的开头或结尾包含星号,并且只在点边框上包含星号。
但是,您可以使用正则表达式:
server {
server_name ~^(www\.)?(.+)$;
location / {
root /sites/$2;
}
}
答案 1 :(得分:7)
正如@Valery Viktorovsky的回答所说,你不能用* server_name
。您可以将server
块指定为“默认”,以接收与其他任何不匹配的所有请求。有关说明,请参阅this post。它看起来像这样:
server {
listen 80 default_server;
server_name wontmatch.com; # but it doesn't matter
}
有关详情,请参阅the docs for server_name
。
答案 2 :(得分:2)
只需快速更新..根据通配符现在可以正常工作的文档:http://nginx.org/en/docs/http/server_names.html
答案 3 :(得分:1)
仅供参考,对于像我这样寻找不同内容的人,以下配置将监听并响应所有端口80请求,无论您使用IP还是URL(AKA所有内容):
server {
listen 80 default_server;
server_name _;
...
}
取自:http://nginx.org/en/docs/http/server_names.html
在catch-all服务器示例中,可以看到奇怪的名称“_”:
服务器{ listen 80 default_server; 服务器名称 _; 返回444;这个名字没什么特别的,......
sudo service nginx restart
或... start
,当/etc/nginx/sites-enabled/default
符号链接仍然有效时,您会收到错误,因为它使用相同的匹配模式。只需删除该链接,一切都应该有效。