AWS负载均衡器访问返回Nginx默认页EC2访问正常配置问题咨询
问题根因
问题核心是Nginx的server块匹配规则导致的:
- 你当前配置的
server_name vm-ip仅会匹配Host头为EC2实例IP的请求,你直接访问EC2 IP时Host头符合规则,所以能正常跳转。 - 当请求通过AWS负载均衡转发时,HTTP请求的Host头为负载均衡的DNS名称,无法匹配你写的
vm-ip规则,Nginx就会默认加载未被你修改的默认server块配置,所以返回Nginx默认页。 - 额外注意:如果你没有删除Nginx安装后自带的
default.conf配置文件,默认配置的server块优先级会高于你自定义的无default_server标记的配置,也会导致请求走默认配置。
解决方案
按以下步骤修改配置即可:
- 修改server块匹配规则
将你的Nginx配置调整为如下形式,适配所有来源的80端口请求:
server { listen 80 default_server; # 标记为80端口默认处理块 # 删掉原来的listen vm-ip:80行,不需要绑定特定IP server_name _; # 匹配所有Host头,无需指定具体IP或域名 # 如果你需要限制仅允许特定域名访问,也可以写成 server_name <LB的DNS名称> <你后续要绑定的自定义域名>; root /usr/share/nginx/html; index index.html; server_tokens off; # disable the Server nginx header # enable gzip gzip on; gzip_disable "msie6"; gzip_comp_level 6; gzip_min_length 1100; gzip_buffers 16 8k; gzip_proxied any; gzip_types text/plain text/css text/js text/xml text/javascript application/javascript application/x-javascript application/json application/xml application/rss+xml image/svg+xml; location / { proxy_pass https://<dns of website I want to be redirected to>; } }
- 删除默认配置文件
执行以下命令删除Nginx自带的默认配置,避免冲突:
rm -f /etc/nginx/conf.d/default.conf # 如果是Debian/Ubuntu系统,还要删除sites-enabled下的默认配置: rm -f /etc/nginx/sites-enabled/default
- 重载配置生效
先验证配置语法正确性,再重载配置:
nginx -t systemctl reload nginx
配置完成后再访问负载均衡DNS即可正常跳转。
内容的提问来源于stack exchange,提问作者Nayden Van
相关产品推荐
相关产品推荐

