AWS ALB无尾斜杠路径跳转至HTTP 8080端口无法加载问题咨询
问题根因
- 该问题并非ALB层面导致,源于Nginx默认的目录路径自动补全重定向行为:当客户端请求不带尾斜杠的路径,且Nginx的
root目录下存在和路径同名的目录时,Nginx会默认返回301重定向,自动为路径补全尾斜杠。 - 你的Nginx直接监听8080端口,未配置外层ALB的协议、域名感知逻辑,因此生成的重定向地址使用了Nginx自身的监听配置,即
http://<当前域名>:8080/<补全斜杠后的路径>,你看到的错误重定向地址就是Nginx返回的,而非ALB生成。 - 用户浏览器收到该重定向后会直接请求8080端口的HTTP地址,而你的ALB仅开放了80、443端口的公网访问,8080端口无公网监听规则,因此请求无法到达ALB及后端Nginx,最终超时。
解决方案
可任选以下任一方案修复:
方案1:使用相对路径重定向(最简单快速)
在现有location块中新增absolute_redirect off配置即可,修改后的完整配置如下:
location / { limit_except GET { deny all; } root /root/of/project/; index index.html; absolute_redirect off; try_files $uri $uri/ /index.html; }
该配置会关闭Nginx的绝对路径重定向逻辑,重定向响应仅返回相对路径,浏览器会自动拼接当前页面的HTTPS协议、域名、443端口,生成正确的请求地址。
方案2:配置Nginx感知ALB转发信息
如果需要保留绝对路径重定向,可配置Nginx读取ALB传递的X-Forwarded-*头来生成正确的重定向地址,参考配置如下:
server { listen 8080; server_name example.com; # 替换为你的实际访问域名 # 配置信任ALB的转发头,网段替换为你的VPC实际网段 set_real_ip_from 10.0.0.0/8; real_ip_header X-Forwarded-For; real_ip_recursive on; port_in_redirect off; location / { limit_except GET { deny all; } root /root/of/project/; index index.html; try_files $uri $uri/ /index.html; } }
内容的提问来源于stack exchange,提问作者Grant Moore
相关产品推荐
相关产品推荐

