• 利用Nginx二级域名解决HTTPS引入HTTP致命错误


    这几天搭建了视频解析网站,在搭建的时候发现了解析VIP视频的接口基本都是HTTP协议的,而自己的网站采用的是HTTPS协议(包括HTTP也强制转换为HTTPS)。为了解决这个问题,也考虑了不强转HTTPS,使用HTTP可访问域名+物理地址,但是基于这种方案的安全性考虑,最终选择了二级域名搭建视频解析网站,而域名本身还是强制转为HTTPS。

    出现错误

    • 错误主要是在HTTPS网站中引入HTTP的资源引起的,在各种浏览器中显示的错误都不一样,在Chrome中出现的错误为:This request has been blocked; the content must be served over HTTPS.。错误如下图:
      错误.png
    • 解决方法
      • 如果HTTP请求的资源支持HTTPS,直接进行修改或在HTML增加:,浏览器会将HTTP自动升级为HTTPS进行请求。
      • 如果不支持,网上有说IFrame引入,但是亲测在Chrome中无效,部分手机浏览器支持。因此考虑了二级域名进行设置,这样的话,请求一级域名及有关资源都只能HTTPS,而二级资源则是HTTP,不破坏网站的安全性。
        ##增加二级域名解析
        由于我的域名是腾讯云的,所以我直接打开了自己域名的解析,设置了自己的二级域名:v.richule.com 。设置结果如下图:
        二级域名解析设置.png

    设置了该二级域名后,当搜索http://v.richule.com,DNS会指向设置的主机IP地址的80端口(HTTPS即443端口)。

    设置Nginx解析二级域名

    当服务器接收到DNS的请求,Nginx应用服务器会根据不同的域名会通过请求头中的HOST字段,匹配到特定的server块,再执行相应的程序代码文件。

    • 请求域名和server块中server_name的匹配顺序
      可以先看看博客:https://blog.csdn.net/cheng_kohui/article/details/82930464。

      • 完全匹配
      • 通配符在前的,如*.test.com
      • 在后的,如www.test.*
      • 正则匹配,如~^.www.test.com$
        如果都不匹配
      • 优先选择listen配置项后有default或default_server的
      • 找到匹配listen端口的第一个server块
    • v.richule.com的server块设置
      server_name暂时没写正则匹配,这个可以后续完善。

    	 server {  
                listen 80;  
                server_name v.richule.com;
                index index文件;
                root  路径;
                # error_page   404   /404.html;
    
                # Deny access to PHP files in specific directory
                # location ~ /(wp-content|uploads|wp-includes|images)/.*.php$ { deny all; }
    
                include enable-php-pathinfo.conf;
    
                location /nginx_status
                {
                    stub_status on;
                    access_log   off;
                }
    
                location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
                {
                    expires      30d;
                }
    
                location ~ .*.(js|css)?$
                {
                    expires      12h;
                }
    
                location ~ /.well-known {
                    allow all;
                }
    
                location ~ /.
                {
                    deny all;
                }
    
                access_log  /home/wwwlogs/access.log;
             }  
    

    一级域名的设置

    • 上面的server块进行了关于二级域名v.richule.com的解析设置,为了不影响一级域名的解析(HTTPS及HTTP强转HTTPS访问),也还是要加上rewrite ^(.*)$ https://$host$1 permanent; 因此80端口的server块还要新增一个(在二级域名解析server的前面)。代码如下:
          server {  
              listen 80;  
              server_name www.richule.com richule.com;
              rewrite ^(.*)$  https://$host$1 permanent;  
          }  
    

    增加了这个server后,如果请求域名是www.richule.com richule.com都会强转为https访问。

    • 原443端口server的设置不变
      server {
              listen 443 default_server;
              ssl on;
              # listen [::]:80 default_server ipv6only=on;
              server_name richule.com www.richule.com;
              ...
              ...
      }
    

    个人博客:Loak 正 - 关注人工智能及互联网的个人博客
    文章地址:利用Nginx二级域名解决HTTPS引入HTTP致命错误

  • 相关阅读:
    大数据处理系列之(二)系统过载保护
    大数据处理系列之(一)Java线程池使用
    js实现递归菜单无限层
    treeTable实现排序
    spring-dm 一个简单的实例
    Equinox OSGi服务器应用程序的配置步骤 (支持JSP页面)
    Spring DM 2.0 环境配置 解决Log4j问题
    Spring.DM web开发环境搭建
    STL容器的排序
    排序例子
  • 原文地址:https://www.cnblogs.com/l0zh/p/13739747.html
Copyright © 2020-2023  润新知