一个看似非常简单的反向代理配置让我头疼。主配置文件 /etc/nginx/nginx.conf 有
"include /etc/nginx/conf.d/*.conf;"
然后我在 conf.d: 下有两个 conf 文件,
default-1.conf
第default-2.conf
一个文件有:
server {
# HealthCheck
server_name _;
listen 0.0.0.0:443 ssl ;
location = /health.html {
root /usr/share/nginx/html;
}
}
第二个文件有额外的代理声明
server {
listen 0.0.0.0:443 ssl ;
server_name www.example2.com;
...
location / {
set $backend "some-backend";
proxy_pass $scheme://$backend;
}
}
当 conf.d/ 下只有 default-1.conf 时,
curl -k https://localhost/health.html
可以工作。
如果我也将 default-2.conf 放在 conf.d/ 下,那么相同的 curl 命令会给出 404 Not Found。我在 error.log 下也没有看到任何错误。我做错了什么?
如何了解使用这些多个较小的 conf 文件构建最终 conf 文件时所应用的规则?
谢谢。
答案1
你server_name _;
不会将其设置为默认的万能服务器。来自 NGINX服务器名称:
_
在 catch-all 服务器示例中可以看到奇怪的名称:server { listen 80 default_server; server_name _; return 444; }
这个名称没有什么特别之处,它只是无数无效域名中的一个,这些域名与任何真实名称都不会相交。其他无效名称(如
--
和)!@#
同样可以使用。
再进一步:
请注意,无法使用
server_name
指令。这是listen
指令,而不是server_name
指示。
你default-1.conf
应该有:
server {
# HealthCheck
listen 0.0.0.0:443 ssl default_server;
server_name _;
location = /health.html {
root /usr/share/nginx/html;
}
}