Nginx修改server_name为域名后网站404,求正确配置方法
嘿,这情况我之前帮朋友排查过,咱们一步步来搞定它!
可能的原因及对应解决步骤
1. 网站根目录配置不匹配
当你把server_name从localhost改成域名后,要确保当前server块里的root路径和之前localhost配置的完全一致,或者这个路径下确实存在你的网站文件。
比如之前localhost的server块是这样的:
server { listen 80; server_name localhost; root /var/www/html; # 这个路径是关键 index index.html; }
那修改后的域名server块必须保持同样的root路径,否则Nginx找不到文件就会返回404。检查你的配置,确保root指向正确的网站文件目录。
2. DNS解析未生效
你得先确认my-domain.in和www.my-domain.in已经正确解析到你的服务器IP。在本地终端运行:
nslookup my-domain.in
或者
ping my-domain.in
如果返回的IP不是你的服务器地址,那得先去域名服务商那里设置正确的A记录,等解析生效(一般几分钟到几小时)后再测试。
3. Nginx server块优先级冲突
如果你的Nginx配置里有多个监听80端口的server块,比如原来的localhost server块还在,或者有一个带default_server参数的默认块,那访问域名时可能没匹配到你修改的那个server块,而是落到了其他返回404的块里。
运行这个命令查看所有生效的Nginx配置:
nginx -T
仔细看输出里的server块,找到监听80的部分。如果有其他server块带listen 80 default_server;,要么把你的域名server块加上这个参数,要么删除多余的默认块,确保域名请求能匹配到正确的server块。
4. 文件权限问题
Nginx运行用户(通常是www-data)需要有访问网站根目录文件的权限。运行下面的命令检查权限:
ls -l /path/to/your/website/files
如果文件的所有者不是www-data,用这个命令修改:
chown -R www-data:www-data /path/to/your/website/files
修改后重新加载Nginx:
systemctl reload nginx
5. 查看Nginx日志找线索
这是最直接的排查方法!查看错误日志:
tail -f /var/log/nginx/error.log
还有访问日志:
tail -f /var/log/nginx/access.log
日志里会明确告诉你404的原因——比如是文件不存在、路径错误,还是请求没匹配到正确的server块,跟着线索调整配置就行。
配置Let's Encrypt SSL的后续步骤
等上面的问题解决,网站用域名能正常访问后,直接用certbot自动配置SSL就行:
certbot --nginx
它会自动修改你的Nginx配置,添加HTTPS的server块,同时配置自动续期,非常省心。
内容的提问来源于stack exchange,提问作者TheDataGuy

