我正在尝试让我的静态网站向EC2实例发送一些非常基本的API调用-任何人都可以分享最佳实践或为我指明正确的方向吗?
当前设置如下:
似乎我有两个选择-通过Cloudfront传递API调用(似乎无法使它正常工作)或允许跨源客户端并将我的axios请求指向另一个IP。以这种方式允许CORS被认为是不好的做法吗?
对于第一个选项,我在cloudfront上创建了第二个起点,并将其指向路由53 DNS,该DNS指向我的ec2弹性IP。问题是,尽管在我的Cloudfront控制台中的所有来源上启用了POST,我仍无法使API正常工作:
select i.Date, i.No,sum(CASE WHEN t.VAT<>'no' THEN
amount ELSE 0 END) as Excluding_VAT,
sum(t.amt_vat)as vatamount,
sum(CASE WHEN t.VAT='no' THEN amount ELSE 0 END) as NonVat,
sum(t.amt_vat+t.amount)as totamt
from a i join b t on i.ID=t.ID
where i.Date between '1991-11-18' and '1995-11-19'
group by i.ID,i.No,i.Date
除了健全性检查设置外,我想我的问题如下:
我是否需要在我的EC2实例上运行某种证书?我目前正在将我的静态资产的所有HTTP重定向到HTTPS-这如何适应React中使用axios进行api调用?当客户端通过https连接时,api调用会自动通过443发送吗?
是否有更好的方法来完成我尝试做的事情?这是一个具有电子邮件表单的个人网站(仅因为它不能完全静态)-我在后端运行的是一个非常轻巧的节点实例,该实例将电子邮件发送给所有者
非常感谢您的时间和帮助!我很感激
答案 0 :(得分:0)
对于任何试图通过CloudFront CDN进行此设置的人-使用lambda函数是最好的方法。创建一个Lambda函数来处理每个请求并使用AWS API Gateway进行管理。
必须使用以下代码段在S3存储桶上启用CORS:
`<CORSConfiguration>
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
<MaxAgeSeconds>3000</MaxAgeSeconds>
</CORSRule>
</CORSConfiguration>`
此外,我从本练习中学到的东西可能会对其他人有所帮助:每当客户端向端点发送OPTIONS请求时,您都需要返回带有这些标头的200。可以在您选择的任何后端上完成此操作,但这是API网关的指南:
https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors.html
这是我发现的指南,该指南描述了如何创建类似(高度可扩展)的堆栈:
https://www.codeengine.com/articles/process-form-aws-api-gateway-lambda/
谢谢!