利用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致命错误

原文地址:https://www.cnblogs.com/l0zh/p/13739747.html