我有两个 nginx 配置,一个是全局的 catchall 配置,没有设置服务器名称,可以处理任何请求。我还有第二个配置,它设置了服务器名称,只处理特定子域上的请求。
示例(不是真正的配置,但也没有什么其他内容):
server {
listen 80;
root /www/live;
location
....
}
server {
listen 80;
server_name *.prelive.host.tld;
root /www/prelive;
auth_basic "Restricted";
auth_basic_user_file /etc/htpasswd;
location
....
}
但是,当我将第二个页面纳入配置时,整个页面都会受到密码保护,而不仅仅是预发布页面。
有什么想法可能导致第一个配置继承基本身份验证?
答案1
似乎 nginx 会“随机”选择其中一个配置作为上述设置中的默认配置。我们的解决方案是设置
listen 80 default_server;
代替
listen 80;
在默认配置上,因此 nginx 总是会为除匹配的服务器名称之外的任何内容选择该配置。