在腾讯云轻量应用服务器(Lighthouse)上部署多个站点出现 404 错误,是一个常见问题。通常不是服务器本身的问题,而是 Web 服务器(如 Nginx、Apache)的配置或站点部署路径设置不当导致的。以下是排查和解决该问题的完整指南:
🔍 一、常见原因分析
-
Nginx/Apache 虚拟主机配置错误
- 未正确配置 server 块(Nginx)或 VirtualHost(Apache)
- 域名未绑定到正确的站点目录
- 默认站点覆盖了其他站点
-
文件路径错误
- 站点文件未放在配置中指定的
root目录 - 权限问题导致无法访问文件
- 站点文件未放在配置中指定的
-
未启用站点或配置未重载
- 配置文件写好了但未启用(如 Nginx 的
sites-enabled) - 修改配置后未重启或重载服务
- 配置文件写好了但未启用(如 Nginx 的
-
域名解析或端口问题
- 域名未正确解析到服务器 IP
- 防火墙或安全组未开放 80/443 端口
-
.htaccess 或 URL 重写规则冲突(尤其 PHP 框架)
- ThinkPHP、Laravel 等框架需要正确配置 rewrite 规则
✅ 二、解决方案(以 Nginx + 多站点为例)
1. 确保站点文件路径正确
假设你要部署两个站点:
- 站点 A:
example1.com→/var/www/site1 - 站点 B:
example2.com→/var/www/site2
确保文件已上传到对应目录,并包含 index.html 或 index.php。
ls /var/www/site1/index.html
ls /var/www/site2/index.php
2. 创建 Nginx 虚拟主机配置
进入 Nginx 配置目录:
cd /etc/nginx/sites-available
创建站点 A 的配置文件:
sudo nano example1.com
内容如下:
server {
listen 80;
server_name example1.com www.example1.com;
root /var/www/site1;
index index.html index.php;
location / {
try_files $uri $uri/ =404;
}
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
}
}
同理创建 example2.com 配置文件,修改 server_name 和 root 路径。
3. 启用站点(创建软链接)
sudo ln -s /etc/nginx/sites-available/example1.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/example2.com /etc/nginx/sites-enabled/
⚠️ 注意:删除默认站点(防止冲突):
sudo rm /etc/nginx/sites-enabled/default
4. 测试配置并重启 Nginx
sudo nginx -t # 测试语法
sudo systemctl reload nginx
# 或
sudo systemctl restart nginx
5. 检查域名解析
确保 example1.com 和 example2.com 的 DNS A 记录指向你的轻量服务器公网 IP。
6. 检查安全组
登录腾讯云控制台:
- 进入「轻量应用服务器」→ 选择实例 →「防火墙」
- 确保放行 80 (HTTP) 和 443 (HTTPS) 端口
🛠 三、调试 404 问题的方法
1. 检查 Nginx 错误日志
sudo tail -f /var/log/nginx/error.log
访问网站时查看是否有 file not found 或 permission denied。
2. 手动测试文件是否存在
curl -I http://example1.com/index.html
看是否返回 200,还是 404。
3. 检查文件权限
sudo chown -R www-data:www-data /var/www/site1
sudo chmod -R 755 /var/www/site1
4. 确认默认站点未覆盖
运行:
sudo nginx -T | grep "server_name"
查看所有已加载的 server 块,确认你的域名被正确识别。
💡 四、常见框架特殊配置
Laravel / ThinkPHP 等
需要设置 root 指向 public 目录,并配置 rewrite:
location / {
try_files $uri $uri/ /index.php?$query_string;
}
✅ 五、总结检查清单
| 检查项 | 是否完成 |
|---|---|
| 域名已解析到服务器 IP | ✅ / ❌ |
| 安全组开放 80/443 端口 | ✅ / ❌ |
| 站点文件放在正确目录 | ✅ / ❌ |
| Nginx 配置正确(server_name, root) | ✅ / ❌ |
| 配置已启用(sites-enabled) | ✅ / ❌ |
| Nginx 重载或重启 | ✅ / ❌ |
| 错误日志无异常 | ✅ / ❌ |
📞 如仍无法解决
请提供以下信息,我可以进一步帮你诊断:
- 你使用的 Web 服务器(Nginx/Apache)
- 你的配置文件内容(脱敏域名)
- 访问时的具体 404 是 Nginx 默认页还是自定义页?
error.log中的错误信息
希望以上内容能帮你解决多站点 404 问题!如果提供更多信息,我可以给出更精准的配置建议。
ECLOUD博客