gpt4 book ai didi

https - 如何处理网站中应作为 https 保护的混合内容?

转载 作者:行者123 更新时间:2023-12-03 14:59:13 26 4
gpt4 key购买 nike

我正在服务器 A 上建立一个网站(注册了域名),用于人们创建和运行他们的“应用程序”。
这些“应用程序”实际上是运行在服务器 B 上的 docker 容器,在容器中,有一个可以直接访问的小型 Web 应用程序,例如:

http://IP_ADDR_OF_SERVER_B:PORT

PORT 是一个随机的大数字,它映射到 docker 容器。
现在我可以使 SSL 证书在服务器 A 上工作,以便通过访问它可以正常工作:
https://DOMAIN_NAME_OF_SERVER_A

问题是,我通过访问上面的“http”将“应用程序”包含在 iframe 中,因此我的浏览器(Chrome)拒绝打开它并报告错误为:

Mixed Content: The page at 'https://DOMAIN_NAME_OF_SERVER_A/xxx' was loaded over HTTPS, but requested an insecure resource 'http://IP_ADDR_OF_SERVER_B:PORT/xxx'. This request has been blocked; the content must be served over HTTPS.

那么,我应该如何处理这样的问题呢?
我是一个全栈新手,如果您能分享一些有关如何构建健康的 https 网站的知识,同时以适当的方式解决此类问题,我将不胜感激。

补充说明

好的,我想我只是抛出了问题的大纲,这里有更多细节。

我认为使用 https 提供 iframe 请求是完整且直接的,这样就不会再让我感到困惑了。

但是问题是,由于所有“应用程序”都是动态创建/删除的,看来我需要为每个应用程序准备许多证书。

自签名证书是否可以正常工作而不会被浏览器阻止或提示?还是我有办法用一个 SSL 证书为所有“应用程序”提供服务?

软件环境

服务器A : 运行 node.js 网站,监听 5000 端口并使用 Nginx proxy_pass 服务。
server {
listen 80;
server_name DOMAIN_NAME_OF_SERVER_A;

location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:5000;
}
}
server {
listen 443;
server_name DOMAIN_NAME_OF_SERVER_A;

ssl on;
ssl_certificate /etc/nginx/ssl/DOMAIN_NAME_OF_SERVER_A.cer;
ssl_certificate_key /etc/nginx/ssl/DOMAIN_NAME_OF_SERVER_A.key;
ssl_session_timeout 5m;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:5000;
}
}

服务器 B :运行 node.js 应用程序监听不同的随机大端口号,例如 50055,在创建“应用程序”时动态分配。 (实际上这些应用程序在 docker 容器中运行,而我认为这无关紧要)如果需要可以运行 Nginx。

服务器A 服务器 B 在公共(public)交通中互相交谈。

解决方案

就像所有答案一样,尤其是来自@eawenden 的答案,我需要一个反向代理来实现我的目标。

此外,我还做了一些事情:
1.给 分配一个域名服务器 B 使用letsencrypt证书。
2. 将预定义的 url 代理到特定端口。

因此,我在 上使用 nginx 设置了反向代理服务器。服务器 B ,代理所有请求,例如:
https://DOMAIN_NAME_OF_SERVER_B/PORT/xxx


https://127.0.0.1:PORT/xxx

ps:nginx反向代理配置在 服务器 B
server {
listen 443;
server_name DOMAIN_NAME_OF_SERVER_B;

ssl on;
ssl_certificate /etc/nginx/ssl/DOMAIN_NAME_OF_SERVER_B.cer;
ssl_certificate_key /etc/nginx/ssl/DOMAIN_NAME_OF_SERVER_B.key;
ssl_session_timeout 5m;

rewrite_log off;
error_log /var/log/nginx/rewrite.error.log info;

location ~ ^/(?<port>\d+)/ {
rewrite ^/\d+?(/.*) $1 break;
proxy_pass http://127.0.0.1:$port;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400;
}
}

因此,一切似乎都按预期工作!
再次感谢所有回答者。

最佳答案

我在动态请求中遇到混合内容问题

add_header 'Content-Security-Policy' 'upgrade-insecure-requests';
这解决了我的 nginx 服务器问题

关于https - 如何处理网站中应作为 https 保护的混合内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41594531/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com