为什么Nginx在不存在的子域中调用无效证书只是为了redirect到404?

  1. 有两个服务器块。

  2. nginx.conf http块中的default_server块:

 服务器{
   服务器名称 _;
   听80 default_server;
   听[::]:80 default_server ipv6only = on;
    listen 443 default_server;
   返回404;
 }
 include / etc / nginx / sites-enabled / *; 
  1. sites-enabled网站的工作域/网站块:
 服务器{
  听80;
  听443;
   server_name example.com;
  返回301 https://www.$server_name$request_uri;
 }

服务器{
  听80;
  听443 ssl;
   root /var/www/example.com/htdocs/;
   index index.html index.htm;

   server_name www.example.com;
 } 

(我有这个设置redirect所有非www到www和所有http到https)

  1. 我有一个非www和www我的域的证书。 Nginx出于某种原因正在调用任何子域名,而不是给默认的网站无法find/ ERR_CONNECTION_RESET/错误。

  2. 例如,如果我去https://asdf.example.com/ Nginx调用它,浏览器告诉你它是不安全的SSL证书,那么你无论如何接受它,并得到一个404页面。

  3. 如何跳转到404页面跳过无效的证书消息,或者如何直接跳转到“页面未find”而不是404? 例如像去https://asdf.serverfault.com它不给404,它给出了一个ERR_CONNECTION_RESET/ 。 我想为我的服务器上的所有不存在的子域和域。

更新:难道是我所有的ssl_certificate行被添加到主http块吗? 如果是这样的话,仍然不能解决调用ERR_CONNECTION_RESET而不是像在6.上给出的例子。

如果您直接打开https://asdf.example.com ,则浏览器将asdf.example.comparsing为IP地址,然后使用HTTPS协议连接到该地址。 如果服务器(使用获取的IP)在443端口上侦听,并且没有为该域返回证书,或者在浏览器结束请求之前(例如,显示404错误),浏览器将会提示不安全的协议。

https://asdf.serverfault.com提供连接错误,因为这个子域没有注册,它没有IP地址。 这就是为什么你看到这个错误。 如果你想确保asdf.example.com返回一个连接错误而不是ssl警告,那么确保这个子域没有被注册, example.com没有通配符(*)logging。