zoukankan      html  css  js  c++  java
  • 没加证书的域名通过https访问,错误的访问到有证书的域名项目--已解决

    今天有同事遇到这样一个问题,问题的经过是这样的:

    同一台服务器里,nginx 部署了多个项目,有的加了ssl证书,有的没有加。

    其中有一个没加证书的项目,在测试时,以https协议头访问,浏览器提示没有证书不安全,点击继续访问后,既然出现了另一个有证书的项目的页面。

    比如: 项目A  aa.com 和项目B bb.com, bb.com 有证书,aa.com 没有证书。正常来说,https://aa.com 是无法访问的,但是在访问 https://aa.com 的时候,响应的页面竟然是 https://bb.com (虽然浏览器仍然会提示 证书不安全)

    这个时候,就开始一一排查,应该是 aa.com 项目没有监听443端口,然后这个请求就被其它监听443端口的项目给接管了,并且还是有顺序的接管

    比如:在 nginx/vhost/目录下有 多个配置文件,分别是 aa.com.conf 和 bb.com.conf 和 ab.com.conf

    aa.com.conf 没有证书,而其它两个有证书,但是接管顺序也是按照 配置文件的加载顺序来进行,按照正常的文件名排序,就是 ab.com.conf 优先于 bb.com.conf

    (以上只是个人理解,有明白的朋友希望可以在评论中补充并指错)

    最后的解决办法就是,写一个默认的配置文件,去接管一些没有部署证书的项目,代码如下 :

    server
    {
        listen 80; # 监听80端口
        listen 443 ssl http2; # 同时也监听443端口
        server_name _; # 默认监听所有没有被接管的项目
        index index.html;
        root /www/nginx/html; # 给一个默认页面
    
        # 当监听443端口时,以下两行的证书路径必须写上
        ssl_certificate    /www/data/cert/fullchain.pem;
        ssl_certificate_key    /www/data/cert/privkey.pem;
        
        location ~ / {
            # 判断所有访问443端口的项目,让它再重新跳转至 80端口
        if ($server_port ~ 443) {    
                return 301 http://$host$request_uri;
            }
        }
    }
    Talk is cheap, show me the code.
  • 相关阅读:
    刨根问底 | Elasticsearch 5.X集群多节点角色配置深入详解【转】
    ElasticSearch 内存那点事【转】
    Zookeeper之Zookeeper的Client的分析【转】
    Zookeeper之Zookeeper底层客户端架构实现原理(转载)
    elasticsearch 性能调优
    ElasticSearch性能优化策略【转】
    elasticsearch中 refresh 和flush区别【转】
    我理解的朴素贝叶斯模型【转】
    (转)Intellij IDEA 快捷键整理
    使用Mongo dump 将数据导入到hive
  • 原文地址:https://www.cnblogs.com/cidgur/p/14944765.html
Copyright © 2011-2022 走看看