首先,我知道我可以指定default_server
强制使用默认站点,但我想了解为什么 nginx 不简单地选择第一个定义server
为记录。
在 nginx.conf 部分的末尾http
我有
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
/etc/nginx/conf.d/*.conf 只是一些默认代理配置和 ssl 配置
定义的站点是
000-默认 example.com zombo.com
默认站点指向本地目录和index.html,另外两个指向代理服务器。
000-默认
server {
listen 80;
server_name aaa-test;
access_log /var/log/nginx/localhost.access.log;
location / {
root /var/www/nginx-default;
index index.html index.htm;
}
}
示例.com
server {
server_name example.com *.example.com ;
listen 80;
location / {
proxy_pass http://10.245.0.19;
proxy_redirect default;
}
}
zombo.com
server {
server_name zombo.com *.zombo.com ;
listen 80;
location / {
proxy_pass http://10.245.0.36;
proxy_redirect default;
}
}
但如果我浏览 nginx 服务器 IP,我会从 example.com 获得答案。我尝试重命名配置文件以按不同顺序加载它们,并且始终将 example.com 作为默认值。即使我将其配置文件命名为zzz.com
文档说没有主机头的流量应该转到第一个虚拟主机,但我似乎无法实现这一点。
如果我删除 example.com,那么流量将转到默认主机,而不是 zombo.com。
我真的被难住了......
编辑:评论请求的信息
# ls -lU /etc/nginx/sites-enabled
total 0
lrwxrwxrwx 1 root root 38 Oct 3 00:05 example.com -> /etc/nginx/sites-available/example.com
lrwxrwxrwx 1 root root 34 Oct 3 00:05 000-default -> /etc/nginx/sites-available/default
lrwxrwxrwx 1 root root 36 Oct 2 22:58 zombo.com -> /etc/nginx/sites-available/zombo.com
答案1
nginx是查看第一个定义的server
,但它不是您想象的那个。
如果你运行,ls -lU /etc/nginx/sites-enabled
你会看到目录列表按照它在磁盘上出现的实际顺序排列,也就是它们被读取的顺序。这通常不是你期望的顺序。
当然,这也是您可以明确定义的原因之一default_server
。