随着浏览器安全策略的愈发严格, https和http的混合站点, 会出现各种无法展示的问题,本文即提供一种解决此问题的思路,使用Nginx&Apache反向代理来解决https站点无法展示http内容问题
首先我们要改变有问题的链接, 例如我们的站点是 https://www.aaa.com, 页面需要展示http://www.bbb.com/video.mp4,
我们可以把链接转换成如下形态:
https://www.aaa.com/www.bbb.com/video.mp4
这样我们就可以使用Nginx和Apache的rewrite功能,去拦截以一个域名为开始路径的链接, 然后获取对应文件内容,这样的好处是链接的后缀名可以保持不变,在safari和iphone上也能正常使用, 单纯的服务端获取转发, 音视频在苹果系统上是无法使用的
下面来说下具体反向代理的配置
Nginx
location ~*^/[a-zA-Z0-9]+(\.[a-zA-Z0-9]+)+/(.*) {
proxy_force_ranges on;
proxy_pass http:/$request_uri;
}
需要在nginx配置文件的http模块添加如下配置:
resolver 8.8.8.8;
Apache
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-zA-Z0-9]+(\.[a-zA-Z0-9]+)+)/(.*)$ http://$0 [P,L]
</IfModule>
需要开启如下模块:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
以上就是使用Nginx&Apache反向代理来解决https站点无法展示http内容问题的方法, 其余有什么更好的方法的话, 也可以留言或私信交流