正确设置https的“默认” nginx服务器
我有几台服务器在同一台计算机上运行,有些服务器仅使用http,有些服务器同时使用http和https。在主配置文件中包含的单独文件中定义了几个服务器块。 我为http设置了一个“默认”服务器,该服务器将为通用的“维护页面”提供服务,以与其他配置文件中的任何其他server_name不匹配的请求。http默认服务器按预期工作,它使用server_name“ _”,并且它首先出现在包含列表中(因为我观察到,如果在服务器之间有重复的server_names,则使用出现的第一个)。这很好。 我希望有相同的服务器块(仅将“ listen 80 default_server”切换为“ listen 443 default_server”,而不是服务页面“ return 444”),但事实并非如此。取而代之的是,尽管其他服务器块对传入的请求具有更合适的server_name,但新的默认https服务器似乎实际上正在捕获所有传入的https连接并导致它们失败。删除新的默认https服务器将导致恢复半正确的行为:带有https的网站将全部正确加载;但没有https的网站将全部路由到包含文件中的第一个https服务器(根据文档,如果未显示“ default_server”,则出现的第一个服务器块将为“ default”)。 所以我的问题是,在Nginx中为SSL连接定义“默认服务器”的正确方法是什么?为什么当我显式设置“ default_server”时,它会变得贪婪并获取所有连接,而当我隐式地让nginx决定“ default server”时,它会像我期望的那样工作(将错误的服务器设置为default,其他真实服务器行为正确)? 这是我的“默认服务器”。Http的工作方式不会破坏其他服务器。Https破坏其他服务器并消耗所有服务器。 server { listen 443 ssl default_server; server_name _; access_log /var/log/nginx/maintenance.access.log; error_log /var/log/nginx/maintenance.error.log error; return 444; } server { listen *:80 default_server; server_name _; charset utf-8; access_log /var/log/nginx/maintenance.access.log; error_log /var/log/nginx/maintenance.error.log error; root …