建设网站需要几个文件夹?搞懂目录结构,源码下载不踩坑
昨天凌晨三点,老张给我打电话,声音都在抖。他说公司官网突然打不开了,浏览器弹出红色警告“您的连接不是私密连接”,点进去一看,满屏都是赌博广告和非法外链。他慌了,问我要不要重装系统。我说别急,先别动服务器,先看看你的文件目录乱不乱。这种网站被黑挂马不知道怎么办的情况,在中小企业里太常见了。很多老板觉得只要把【源码下载】下来,丢到服务器里就能跑,完全不管文件夹怎么建。结果呢?权限给错了,敏感文件暴露了,黑客顺着目录结构一摸就进来了。今天咱们就聊聊【建设网站需要几个文件夹】这个看似基础,实则决定网站生死的问题。
为什么目录结构决定网站安全
很多人有个误区,觉得网站就是一个 html 文件加几个图片,往服务器上一扔就完事了。错!大错特错。一个标准的、符合 W3C 标准 规范的网站项目,背后是一整套严密的文件夹逻辑。如果你只有一堆散乱的文件,不仅开发维护是噩梦,更是安全漏洞的温床。
想象一下,如果你的配置文件(比如数据库账号密码)和图片、CSS 样式文件混在一起,而且都放在了根目录。黑客只要扫到你的站点,就能直接访问 config.php 或者 .env 文件,拿到数据库最高权限。这时候,你的网站就不仅是被挂马的问题,而是整个数据被拖走。
所以,回答“建设网站需要几个文件夹”这个问题,不是让你数数有几个,而是让你明白:隔离,是安全的第一道防线。
一个健康的网站项目,核心文件夹通常分为四大块:
- 公共静态资源区:放图片、CSS、JS、字体。
- 核心逻辑区:放后端代码、控制器、模型。
- 用户上传区:放用户生成的内容,必须与核心逻辑隔离。
- 配置与隐藏区:放敏感配置,且必须禁止 Web 访问。
下面咱们详细拆解,这到底该怎么分,怎么部署。
注册与购买:从域名到服务器环境准备
在讨论文件夹之前,你得先把“地基”打好。很多老板在【源码下载】之前,连服务器环境都没配好,导致后期迁移痛苦不堪。
1. 域名注册与解析 域名是你的门牌号。建议在阿里云或腾讯云注册,方便后续备案。注册时注意拼写,避免多一个字母或少一个字母。解析时,一定要设置 TTL(生存时间)为 600 秒或更短,这样一旦 DNS 变更,全球生效时间更快,利于故障快速切换。
2. 服务器选型与初始化 对于中小企业,建议选择轻量应用服务器或云主机。操作系统推荐 Ubuntu 20.04 LTS 或 CentOS 7.9(虽然 CentOS 停更,但国内存量多,若新项目建议用 Ubuntu 或 AlmaLinux)。
关键点: 买完服务器,第一件事不是装建站程序,而是初始化安全组。只开放 22 (SSH)、80 (HTTP)、443 (HTTPS) 端口。其他所有端口,尤其是 3306 (MySQL)、27017 (MongoDB) 等数据库端口,严禁对公网开放!这是防止黑客直接爆破数据库的关键。
核心实操:标准文件夹结构搭建步骤
现在进入正题。假设你使用 Nginx + PHP (Laravel/ThinkPHP 等常见框架) 或 Node.js 技术栈,以下是标准的目录规划。
1. 项目根目录结构示例
一个规范的 Web 项目,根目录下通常只有以下几个文件夹和关键文件:
/var/www/myproject/
├── public/ # 【核心】Web 服务器只能访问这个文件夹
│ ├── index.php # 入口文件
│ ├── css/ # 样式文件
│ ├── js/ # 脚本文件
│ ├── images/ # 静态图片
│ └── uploads/ # 用户上传文件(需特殊权限控制)
├── app/ # 【核心】业务逻辑代码
│ ├── Controllers/ # 控制器
│ ├── Models/ # 数据模型
│ └── Services/ # 业务服务类
├── config/ # 【敏感】配置文件,禁止 Web 访问
│ ├── database.php # 数据库配置
│ └── app.php # 应用配置
├── storage/ # 【敏感】日志、缓存、会话
│ ├── logs/
│ └── cache/
├── vendor/ # 第三方依赖库
└── .htaccess # Apache 配置 (若用 Nginx 则忽略)
重点强调:
public文件夹:这是唯一应该暴露给 Internet 的目录。Nginx 或 Apache 的root指令必须指向这里。config和storage文件夹:必须位于public之外。如果黑客能直接 URL 访问/config/database.php,你的网站就废了。
2. Nginx 配置示例(安全版)
很多被黑的案例,都是因为 Nginx 配置写错了,把根目录指到了项目根目录,而不是 public 目录。
server {listen 80;server_name www.example.com;# 【关键】指向 public 目录,而不是项目根目录root /var/www/myproject/public;index index.php;# 禁止访问隐藏文件(如 .git, .env)location ~ /\. {deny all;return 404;}# 处理 PHP 请求location ~ \.php$ {try_files $uri =404;fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;}# 静态资源缓存优化location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {expires 30d;add_header Cache-Control "public, immutable";}
}
操作提示:
修改配置后,务必运行 nginx -t 检查语法,再 systemctl reload nginx 重载配置。如果配置错误导致 403 或 500 错误,去 /var/log/nginx/error.log 里找原因,通常是权限问题。
3. 文件权限设置(Linux 服务器)
权限是最后一道防线。即使代码写得再烂,权限对了,黑客也进不去。
# 1. 设置所有者
chown -R www-data:www-data /var/www/myproject# 2. 设置目录权限(755: 所有者可读写执行,其他人可读执行)
find /var/www/myproject -type d -exec chmod 755 {} \;# 3. 设置文件权限(644: 所有者可读写,其他人只读)
find /var/www/myproject -type f -exec chmod 644 {} \;# 4. 【关键】敏感文件权限(600: 仅所有者可读写)
chmod 600 /var/www/myproject/config/database.php
chmod 600 /var/www/myproject/.env
注意: 如果使用 Apache,用户可能是 apache 或 www;如果使用 Nginx + PHP-FPM,通常是 www-data。请务必用 ps aux | grep php-fpm 确认运行用户,再设置 chown。
常见问题:为什么你的网站还是被黑了?
即便你按上述步骤做了,还是可能出现安全问题。以下是三个高频雷区:
1. 源码下载渠道不正规
很多老板为了省钱,去某些网盘下载所谓的“破解版”或“绿色版”【源码下载】。这些代码往往被植入了后门。比如,一个看似普通的 check.php 文件,里面藏着一行 eval($_POST['cmd']);。只要你执行了这个文件,黑客就能在你服务器上运行任意命令。
- 建议:只从官方 GitHub/GitLab 或正规供应商处获取源码。下载后,先用 VirusTotal 或本地杀毒软件扫描一遍。
2. 上传目录权限过大
uploads 文件夹是重灾区。如果用户能上传 shell.php,并且该目录允许执行 PHP,网站秒挂。
- 对策:在 Nginx 中对
uploads目录禁用脚本执行:location /uploads/ {# 禁止执行 PHPlocation ~ \.php$ {deny all;}# 强制以图片方式输出add_header Content-Type image/jpeg; }
3. 证书有效期与年审被忽略 很多老板以为 SSL 证书买了就一劳永逸。其实,免费证书(如 Let's Encrypt)有效期只有 90 天,付费证书通常是一年。如果证书过期,浏览器会报“不安全”,不仅影响 SEO,更会让用户怀疑网站被劫持。
- 补救流程:
- 监控:设置证书到期前 30 天邮件提醒。
- 自动续签:配置 Certbot 自动续签 Let's Encrypt 证书。
certbot renew --dry-run - 人工核查:每季度登录服务器,检查
/etc/letsencrypt/live/下的证书有效期。
优化建议:从“能用”到“好用”
目录结构搭好了,怎么让它更高效、更安全?
1. 分离静态资源到 CDN
把 public/css、public/js、public/images 中的大文件,通过对象存储(如阿里云 OSS)+ CDN 分发。
- 好处:减轻源站压力,提升全国访问速度,且静态资源被攻击时,源站核心逻辑不受影响。
2. 日志切割与监控
不要把所有日志都塞在 access.log 里。配置 Logrotate,每天切割日志,保留最近 30 天。
- 命令示例:
定期查看日志中是否有异常的/etc/logrotate.d/nginx /var/log/nginx/*.log {dailyrotate 30compressdelaycompressmissingoknotifemptycreate 0640 www-data admsharedscriptspostrotate[ -f /var/run/nginx.pid ] && kill -USR1 $(cat /var/run/nginx.pid)endscript }404扫描行为(如/wp-login.php,/admin.php等不存在路径),这可能是黑客在试探你的网站结构。
3. 定期备份策略 文件夹结构再清晰,也怕误删或勒索病毒。
- 策略:
- 数据库:每天凌晨 2 点全量备份,每小时增量备份。
- 文件:每天同步到异地对象存储。
- 测试恢复:每季度必须执行一次“恢复演练”。很多老板以为备份了,真出事了才发现备份文件是坏的或无法解压。
4. 遵循 W3C 标准 的语义化结构
虽然这主要是前端的事,但良好的文件夹结构有助于前端资源加载。比如,将 vendor 库中的 JS 文件合并压缩,通过 webpack 打包成 bundle.js,减少 HTTP 请求数,提升首屏加载速度。
总结与互动
建设网站,文件夹不是摆设,而是你的安全盾牌。从【源码下载】的那一刻起,就要按照“隔离、最小权限、日志监控”的原则来规划。不要等网站被黑挂马、数据泄露了才后悔。
记住:安全的网站,是设计出来的,不是修出来的。
你在搭建网站时,遇到过哪些目录权限的坑?或者你有更高效的服务器配置技巧?还有什么建站疑问?评论区留言挨个回。


