nginx目录规划核心是按功能分离、角色隔离、环境收敛;主目录由安装方式决定,配置/内容/日志物理分离,临时目录需显式声明并赋权,权限与备份机制同步落地。

规划 Nginx 安装目录结构,关键不是追求“统一路径”,而是让每个目录职责清晰、位置可预期、权限可控、变更可追溯。核心思路是:**按功能分离 + 按角色隔离 + 按环境收敛**。
明确安装方式,锁定主目录根路径
先运行 which nginx,看二进制文件在哪,就能快速判断主目录归属:
- /usr/sbin/nginx → 大概率是系统包管理器(APT/YUM/DNF)安装,主目录默认为 /etc/nginx,日志在 /var/log/nginx,静态文件在 /usr/share/nginx/html
- /usr/local/nginx/sbin/nginx → 源码编译安装,前缀即根目录,所有子目录(conf/、html/、logs/、sbin/)都在其下,如 /usr/local/nginx/conf/nginx.conf
- 若使用容器或自定义 prefix(如
--prefix=/opt/nginx),则全部结构围绕该路径展开
配置、内容、日志三者物理分离
避免把配置文件、网站代码、日志混在同一层级,推荐按用途分置到标准系统路径:
- 配置集中于 /etc/nginx:主配置 nginx.conf 放这里;站点配置统一放 /etc/nginx/conf.d/*.conf(CentOS/RHEL 风格)或 /etc/nginx/sites-available/ + 软链到 sites-enabled/(Debian/Ubuntu 风格)
-
静态资源独立存放:不直接用 html/ 目录,而是为每个站点建专属目录,如 /srv/www/example.com/public 或 /var/www/myapp,并在 server 块中用
root显式指定 -
日志定向到 /var/log/nginx:在 nginx.conf 的 http 块中统一设置
access_log /var/log/nginx/access.log和error_log /var/log/nginx/error.log;多站点可分别定义日志路径,但都归入该目录下
临时目录与运行时文件提前规划
client_body_temp、proxy_temp 等目录虽不常访问,但缺失或权限错误会直接导致 502/500,必须显式声明并确保可写:
- 在 nginx.conf 的 http 块中添加:
client_body_temp_path /var/tmp/nginx/client_body;proxy_temp_path /var/tmp/nginx/proxy;fastcgi_temp_path /var/tmp/nginx/fastcgi; - 创建对应目录并赋权:
sudo mkdir -p /var/tmp/nginx/{client_body,proxy,fastcgi}sudo chown -R nginx:nginx /var/tmp/nginx(用户组名依实际运行用户调整) - pid 文件也建议统一收口:
pid /run/nginx.pid;(systemd 环境下更可靠)
权限与备份机制同步落地
目录结构定好后,权限和运维习惯要跟上:
- 配置文件设为 644,仅 root 可写;日志目录设为 750,属主为 root,属组为 nginx,保证 Nginx 进程能写、运维人员能读
- 所有 conf.d/ 下的配置文件命名带环境标识,如
blog-prod.conf、api-staging.conf,避免误启用 - 每次修改配置前,自动备份:
sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.$(date +%Y%m%d_%H%M%S) - 用
nginx -t验证语法,再nginx -s reload生效,不直接 kill 或 restart











