首页 > 解决方案 > 此请求已被阻止;从 S3 向 EC2 节点端点发出请求时,必须通过 HTTPS 错误提供内容

问题描述

我的反应网站端点托管在 AWS S3 中,用于触发电子邮件的节点端点部署在 EC2 实例中。我可以使用以下代码在本地访问 EC2 实例:

app.post('/api/email', (req, res, next) => {
sendGrid.setApiKey(config_data.SENDGRID_API_KEY);
const msg = {
    to: 'random@random.com',
    from: 'random@random.com',
    subject: req.body.email',
    text: req.body.message
}

访问 EC2 端点 /api/email 的代码:

    Axios.post('http://public-IPv4:EC2_PORT_NUM/api/email', this.state)
        .then( res => {
            if(res.data.success){

              this.setState({
                disabled: false,
                emailSent: true
              });
            } else{
                this.setState({
                    disabled: false,
                    emailSent: false
                });
            }
        })
        .catch(err => {
            console.log(err.response.data);
            this.setState({
                disabled: false,
                emailSent: false
            });
        });

当代码在本地部署时,电子邮件会根据需要触发。但是,当我在 S3 中部署 Web 端点并尝试触发电子邮件时,会出现以下错误:

Mixed Content: The page at 'https://mywebsiteaddress/api/email' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint '<ENDPOINT_LINK>'. This request has been blocked; the content must be served over HTTPS.

在本地,我可以使用“HTTP”(http://public-IPv4:EC2_PORT_NUM/api/email)发出请求,但通过 S3 请求“HTTPS”。然后我将链接更改为“HTTPS”,但它仍然不能在本地工作,也不能从 S3 工作。请让我知道如何解决这个问题。提前致谢。

编辑:更新 EC2 入站安全规则以接受 HTTPS。 在此处输入图像描述

本地和 S3 均拒绝连接。请协助。

EDIT2按照 Amazon EC2 中的 HTTPS 设置中给出的步骤创建 LB 并向其添加证书。我认为请求已到达负载均衡器,但在再次重定向到端点时出错。这是错误:

在此处输入图像描述

标签: node.jsreactjsamazon-s3amazon-ec2

解决方案


从您的 Web 浏览器返回混合内容错误:https ://developers.google.com/web/fundamentals/security/prevent-mixed-content/what-is-mixed-content

这是出于安全原因。当您使用 https 协议打开您的前端网站(S3 托管)时,您的任何 XHR 请求的 Web 浏览器也需要 https。

要解决它,您需要为您的 EC2 实例提供 SSL 证书,或者尝试使用 http:// 而不是 https:// 加载您的 S3 页面


推荐阅读