【发布时间】:2021-07-24 03:50:46
【问题描述】:
我有一个运行在端口 8080 上的 nginx 服务器,它位于 AWS 应用程序负载均衡器后面。我在 nginx.conf 中有以下位置块,
location / {
limit_except GET { deny all; }
root /root/of/project/;
index index.html;
try_files $uri $uri/ /index.html;
}
当我在本地运行服务器时,我可以点击 /some/path/ 和 /some/path 并获得相同的响应,即尾部斜杠不会不影响任何事情。当我部署应用程序时,我会期待相同的行为。
我使用端口 80 上的 HTTP 侦听器设置 AWS ALB,将所有流量重定向到端口 443 上的 HTTPS 侦听器。HTTPS 侦听器只是转发到 nginx 服务器所在的目标组。这是我仅有的两个负载均衡器规则,没有别的了。
在我部署应用程序后,当我点击一个带有斜杠的 URL(例如,https://example.com/about/)时,一切都很好。它按预期加载。没有重定向或任何东西。我可以在 nginx 日志中看到该请求。
但是,如果我点击一个没有尾部斜杠的 URL,例如
ALB 重定向到
http://example.com:8080/about/
然后永远不会加载。我从未在 nginx 服务器上看到该请求的任何日志,这意味着它从未从 ALB 传递到目标组。请求在几分钟后超时。
似乎 ALB 可能正在尝试将请求转发到目标组,因为 8080 是 nginx 服务器运行的端口,但我不确定为什么请求永远不会到达。尾部斜杠似乎不会影响请求是否被转发,但我不确定。
我想也许我可以设置一个规则,将不带斜杠的路由重定向到在 ALB 级别带有斜杠的同一路由,但负载均衡器规则只有通配符,没有正则表达式。所以,这是一个死胡同。不过,我不确定这是否能解决问题,因为问题似乎出在 ALB 级别,而不是应用程序级别。
有人知道发生了什么吗?
【问题讨论】:
-
这个设置对我来说毫无意义。您应该在 ALB 进行 SSL 终止。你能显示你的重定向规则吗?
-
图像现在包含在负载均衡器规则中。什么是更好的设置?
-
截图中的规则与你描述的行为相反,所以我看不出它怎么可能是负载均衡器。听起来您可能在 Nginx 或 Nginx 的代理目标中发生了某种重定向。
-
流量 -> HTTP 监听器 -> 重定向到 -> HTTPS 监听器 -> 转发到 -> 目标组。在它到达目标组之前,它会被负载均衡器解密。那是我部署证书的地方。目标组接收正常的 HTTP 流量。该设置有什么不正确的?我的误会在哪里?
标签: amazon-web-services nginx aws-application-load-balancer trailing-slash