我们现在使用 AWS 来设置我们的网站,我们最近正在尝试设置一个页面,让我们的客户可以向我们发送电子邮件。我们设置了一个 EC2 实例作为电子邮件服务器,但它在 HTTP 上运行。由于我们的网站是在 HTTPS 上运行的,ajax 无法发送 HTTP 消息,我们必须让 EC2 实例在 HTTPS 上运行,但我不知道该怎么做。
$.ajax({
type: "POST",
url: "https://ec2-*-*-*-*.*.compute.amazonaws.com/send",
contentType: "application/json; charset=utf-8",
beforeSend: function(request) {
request.setRequestHeader("Access-Control-Allow-Origin", "*");
request.setRequestHeader("Access-Control-Allow-Method", "POST");
},
async: true,
data: JSON.stringify({
"name": name,
"email": email,
"message": message
}),
traditional: true,
error: function(xhr, status, error) {
var errorMessage = xhr.status + ': ' + xhr.statusText
alert('Error - ' + errorMessage);
},
success: function(result) {
alert(" Good link");
}
});
答案 0 :(得分:2)
通常可以使用三种方式为您的实例设置 SSL。
在您的 EC2 前设置一个 load balancer (LB)。为此,您需要自己的自定义域。拥有域后,您可以从 AWS ACM 获得免费的公共 SSL 证书并将其轻松部署在 LB 上。使用 LB,您的应用程序将使用 HTTPS 连接到 LB。 LB 会将流量以 HTTP 形式转发到 AWS 内部网络中的实例。
在您的实例上手动设置有效的公共 SSL 证书。为此,AWS ACM 不能在步骤 1 中使用,因此您需要从第三方(不是 AWS)获取 SSL 证书。一个流行的选择是 https://letsencrypt.org/ 和 https://certbot.eff.org/。在实例上安装 SSL 通常需要设置反向代理,例如 nginx。顺便说一下,StackOverflow 正在使用letsencyrpt 作为它自己的 SSL 证书。
在您的 EC2 实例前设置一个 CloudFront (CF) distribution。您可以在 CF 发行版上使用带有 ACM SSL 证书的自定义域,或者您可以使用默认的 CF 端点,它也是 HTTPs。但是,这里的问题是 CF 和您的实例之间的流量将是跨 Internet 的 HTTP,这是一个安全风险。要解决此问题,您必须使用步骤 1 或 2 为 HTTP 设置有效的 SSL 证书。