/srv目录专用于存放系统对外服务所依赖的、由用户主动创建并维护的核心业务数据,如网站文件、ftp资源、git裸仓库等,不存日志、数据库文件、个人代码或临时缓存。

/srv 是专为存放系统对外提供服务所依赖的、由用户主动创建并维护的核心业务数据而设的目录。它不负责运行时生成内容(如日志、缓存),也不存放程序或配置——只管“服务吃进去和吐出来的数据”。Web 和 FTP 这类典型服务的数据,应严格按服务类型和归属组织进子目录,保持可读性、可迁移性和权限隔离。
/srv 下 Web 服务数据的规范存放
Web 内容属于明确对外提供服务的静态或动态业务资产,应统一放在 /srv/http/ 或更细分的域名级路径下,避免混用 /var/www(后者是历史兼容路径,非 FHS 推荐):
- 主站点建议使用
/srv/http/example.com/public_html/,其中public_html是 Web 服务器(如 Nginx/Apache)实际指向的文档根目录 - 多站点时,每个域名独占一个子目录,如
/srv/http/blog.example.com/、/srv/http/api.example.com/ - 用户上传资源(头像、附件等)应置于对应站点下的明确子路径,例如
/srv/http/example.com/uploads/,而非混入代码目录 - 前端构建产物(如 Vue 打包后的
dist/)、OpenAPI 文档、示例数据集等,也归入对应服务路径,不放/var或/tmp
/srv 下 FTP 服务数据的规范存放
FTP 共享资源本质是供外部访问的文件集合,需体现用途与访问控制意图,推荐以功能划分而非用户划分:
- 公开下载区统一放在
/srv/ftp/pub/,如软件包、手册、固件镜像 - 接收上传的入口目录设为
/srv/ftp/incoming/,并配合适当权限(如 sticky bit + group-writable)防止越权覆盖 - 若需按用户隔离,应在 FTP 服务配置中映射虚拟路径(如用户
alice的根目录为/srv/ftp/users/alice/),而非直接暴露/home/alice - 日志、传输记录等运行时产出必须移出
/srv,改存至/var/log/vsftpd/或类似/var/log/下专用子目录
关键边界:什么绝对不能放进 /srv
混淆职责会导致备份遗漏、权限失控或升级失败。以下内容严禁放入 /srv:
- Web 服务产生的访问日志、错误日志 → 应归
/var/log/nginx/或/var/log/apache2/ - MySQL、PostgreSQL 等数据库的数据文件 → 标准位置是
/var/lib/mysql/、/var/lib/postgresql/ - Nginx 的 proxy_cache 缓存、PHP 的 opcache 文件 → 属临时运行态数据,应放
/var/cache/或内存文件系统 - 服务自身的二进制文件(如
nginx)、主配置(如/etc/nginx/nginx.conf)→ 分别在/usr/sbin/和/etc/
实用建议:提升可维护性的操作习惯
规范不只是路径问题,更是运维意识的体现:
- 首次部署前,先创建标准化骨架:如
sudo mkdir -p /srv/{http,ftp,git},再逐层授权 - 对每个服务子目录设置明确属主(如
www-data:www-data)和最小必要权限(通常755目录,644文件) - 大容量服务数据(如 TB 级 FTP 资源库)建议单独挂载分区,并绑定到
/srv/ftp,避免根分区被撑爆 - 用符号链接辅助兼容:若旧脚本硬编码
/var/www,可用ln -s /srv/http/default /var/www过渡,但不要反向操作











