Nginx未显示自定义根目录文件,Classic Load Balancer+EC2环境求助
解决Nginx显示默认页面而非自定义根目录内容的问题
我之前也碰到过一模一样的状况!咱们一步步来排查和解决:
1. 确认Nginx实际使用的配置文件
你修改了/usr/local/nginx/conf/nginx.conf和源码目录里的配置,但很可能Nginx根本没在加载这些文件!
执行下面的命令查看Nginx的配置路径:
nginx -V
输出里会有--conf-path=/xxx/nginx.conf的字段,这才是当前Nginx正在使用的配置文件路径。很多时候源码编译安装后,系统默认的配置路径可能和你修改的不一样,比如常见的/etc/nginx/nginx.conf,先确认这个核心点。
2. 检查Server块的优先级与配置
默认Nginx页面一般来自自带的/usr/share/nginx/html或者类似目录,说明你的请求还是落到了默认的Server块上。
打开正确的配置文件,检查:
- 你的自定义Server块有没有设置
default_server(如果是默认域名访问的话):server { listen 80 default_server; # 关键:标记为默认服务器 server_name yourdomain.com; # 替换成你的域名 root /home/ubuntu/mydomain/public; # 你的自定义根目录 index index.html index.htm; # 确保指定了索引文件 location / { try_files $uri $uri/ =404; } } - 如果有多个Server块,默认的那个(比如监听80但没指定server_name的)有没有被注释掉或者修改根路径?
- 如果使用了
sites-available和sites-enabled目录(Debian/Ubuntu常见),要确保你的自定义配置文件已经软链到sites-enabled目录:sudo ln -s /etc/nginx/sites-available/yourdomain.conf /etc/nginx/sites-enabled/
3. 验证文件与目录权限
Nginx进程的运行用户(通常是www-data或nginx)需要有访问/home/ubuntu/mydomain/public目录和文件的权限:
- 查看Nginx运行用户:
ps aux | grep nginx - 修改目录和文件权限:
sudo chown -R www-data:www-data /home/ubuntu/mydomain/public sudo chmod 755 /home/ubuntu/mydomain/public # 确保目录有执行权限 sudo chmod 644 /home/ubuntu/mydomain/public/index.html # 确保文件可读
4. 重启Nginx并验证配置
修改配置后一定要重启Nginx让配置生效:
sudo systemctl restart nginx # 适用于systemd系统(Ubuntu 16.04+) # 或者 sudo service nginx restart
然后用nginx -t检查配置是否有语法错误:
nginx -t
如果显示test is successful,说明配置没问题。
5. 排除负载均衡干扰
先直接访问EC2实例的公网IP,看是否能显示自定义页面:
- 如果直接访问EC2正常,那可能是Classic Load Balancer的缓存或健康检查问题,可以尝试清空CLB的缓存(如果有配置),或者检查CLB的监听端口是否正确转发到EC2的80端口。
- 如果直接访问EC2还是显示默认页面,那问题肯定在Nginx配置上,回到前面的步骤再排查。
内容的提问来源于stack exchange,提问作者priya
相关产品推荐
相关产品推荐

