【发布时间】:2021-04-08 15:06:06
【问题描述】:
背景
我有一台在 AWS EC2 实例(Node/Express 应用程序)上运行的 Ubuntu 机器,其 SSL 证书设置使用证书管理器和负载均衡器。这适用于直接使用 https 访问我的网站,例如 https://example.com。但是,使用http 会导致连接不安全。
检查whynopadlock.com,我被告知我的网络服务器没有强制使用HTTPS。我的 Web 服务器设置为使用 NGINX 作为我的 EC2 实例的私有 IP 的反向代理。我四处寻找,似乎找不到像我这样合适的例子,尽管我试图拼凑我能找到的东西。
当我尝试设置强制 HTTPS 重定向时,我得到ERR_TOO_MANY_REDIRECTS。
之前:原始 Nginx 配置
server {
listen 80;
location / {
proxy_pass http://{{MASKED_EC2_INSTANCE_PRIVATE_IP_FOR_POST}}:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
注意:此配置允许 https://example.com 正常加载,但是如果使用 http://example.com 导航到站点并导致不安全的连接,则没有重定向。
之后:添加 HTTPS 重定向后的 NGINX 配置
# HTTP
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name localhost;
return 301 https://$host$request_uri;
}
# HTTPS
server {
listen 443 default_server;
listen [::]:443 default_server;
server_name localhost;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass https://{{MASKED_EC2_INSTANCE_PRIVATE_IP_FOR_POST}}:8000;
proxy_set_header X-Forwarded-Proto https;
}
}
问题
我现在看到,当我使用 http 加载域时,我被成功重定向到 https,但是我收到了错误 ERR_TOO_MANY_REDIRECTS。
谁能帮助我了解我的配置中缺少什么或可能做错了什么?
【问题讨论】:
-
如果你有ALB,为什么用nginx做https?
-
@Marcin 什么是 ALB?我试图在 nginx 中设置重定向,因为我使用反向代理作为我的 EC2 节点应用程序之间的层。我想也许在 nginx 中做重定向比在快递方面更有意义?如果您有建议,很想知道一个更简单或更好的方法!感谢您花时间回答我的问题! ??????????
-
您编写了“证书管理器和负载均衡器”。因此我假设您使用的是 AWS 负载均衡器?
-
@Marcin — 抱歉,我现在明白了!是的,我正在使用 ALB。有没有办法通过 ALB 强制 https / https 重定向?您现在是正确的,我使用证书管理器创建 SSL 证书,然后使用它设置 ALB。然后,我还使用 Route 53 将我的域指向 AWS DNS,并创建了一条 A 记录来指向我的负载均衡器。证书正在运行,但我的问题的根源是想知道如何强制任何 http 域请求使用 https。再次感谢您的回复!
标签: node.js express ubuntu amazon-ec2 nginx-reverse-proxy