Nginx重定向根域,该域不在SSL证书中

时间:2015-08-26 10:51:37

标签: redirect ssl nginx

我有* .example.com的SSL通配符证书,该证书对根域无效。我想在Ubuntu 14.04上使用Nginx

  1. 仅接受对已定义主机的请求
  2. 将根域和www子域的所有http请求重定向到https www subdomain
  3. 仅在端口443上为根域返回404,例如如果reuqest是 https://example.com
  4. 我设法通过下面复制的配置实现了1和2。

    server {
        #listen 80;
        #isten 443;
       return 404;
    }
    
    server {
       listen         80;
       server_name    example.com www.example.com;
       return         301 https://www.example.com$request_uri;
    }
    
    server {
    
        listen 443 ssl;
        #certificate and key referenced in common.conf
        server_name www.example.com;
    
        root /usr/share/nginx/html/example.com;
        index index.php index.html index.htm;
    
        include common/common.conf;
    }
    

    当我从上面的第二行和第三行删除注释标记时,希望仅为https://example.com返回404 - 没有任何作用。例如,我在Chrome中为https://www.example.com/http://ww.example.com/获取了ERR_CONNECTION_CLOSED。

    我应该怎么做才能一起实现1),2)和3)?

    非常感谢。

1 个答案:

答案 0 :(得分:1)

  

... * .example.com的通配符证书,对根域无效   ...仅在端口443上为根域返回404,例如如果reuqest是https://example.com

这是不可能的。使用https,HTTP响应在URL中的主机的已建立TLS连接内生成。因此,要返回404以访问https://example.com,您必须首先拥有经过验证的TLS连接。但由于example.com未包含在您的证书中,因此在尝试建立TLS连接时会收到验证错误,因此未成功建立TLS连接,并且无法在连接中返回404。