在我们的站点中,我们正在加载一个在 http (cdn.instantcal.com) 上运行的日历 API 函数。使用 https 在我们的 wordpress 站点上加载此站点时,它不起作用并出现错误:
“混合内容:位于‘https://www.geo.com/wp-admin/post.php?post=362&action=edit“已通过 HTTPS 加载,但请求了不安全的资源”http://cdn.instantcal.com/cvj.html'。此请求已被阻止;内容必须通过 HTTPS 提供。"
为了修复我们的 Nginx 代理服务器中的混合 Iframe 问题,我们在 https calendar.geopc.com 上配置了一个新站点,并将其代理到 cdn.instantcal.com。
server {
listen 443;
server_name calendar.geopc.com;
location / {
proxy_pass http://cdn.instantcal.com;
proxy_set_header Host cdn.instantcal.com;
proxy_set_header X-Real-IP $remote_addr;
}
}
然后在 iframe 中我们给出 url 作为
<iframe id="cv_if5"
src="https://calendar.geopc.com/cvir.html?id=citus.com%2F60dcfe0d8c42638%2Fcalendar.ics&theme=RE&ccolor=%23ffffc0&dims=1&gtype=cv_daygrid&gcloseable=0&gnavigable=1&gperiod=day7&itype=cv_simpleevent"
width="780" height="600" frameborder="0" scrolling="no"></iframe>
但在 Iframe 中我们遇到了同样的错误
混合内容:位于 'https://www.geo.com/wp-admin/post.php?post=362&action=edit“已通过 HTTPS 加载,但请求了不安全的资源”http://calendar.geopc.com/cvj.html?idcloseable=0&gnavigable=1&gperiod=da'。此请求已被阻止;内容必须通过 HTTPS 提供。
当我们直接通过 https 访问 url calendar.geopc.com 时,它在 https 上运行良好。但请告诉我问题是什么?是在 Iframe 上还是在 Nginx 上。有人能帮我们吗?
答案1
第一个问题是内嵌框架源 URL 是 HTTP URL,浏览器在从 HTTPS 页面请求时会阻止该 URL。使用你的proxy_pass
设置,内嵌框架源 URL 是 HTTPS URL,这消除了问题的一部分。
但是,通过您的代理从日历服务加载的代码正在请求更多资源,并且它们具有指向其原始服务的直接 URL,这些 URL 是通过 HTTP 请求的。
您需要获取支持 HTTPS 的日历服务或实现您自己的日历服务,没有其他方法可以解决此问题。