Nginx 默认的站点根目录(public www)在哪里?
Nginx 默认站点根目录因发行版而异:Debian/Ubuntu 是 /var/www/html,CentOS/RHEL 是 /usr/share/nginx/html;用 nginx -T 查 root 指令确认实际值,改目录方法与 FAQ。
两个最常见的默认位置:Debian/Ubuntu 系是 /var/www/html;CentOS/RHEL/Fedora 及官方源码包是 /usr/share/nginx/html。 但这只是出厂默认——你机器上真正的值以配置里的 root 指令为准。
怎么确认当前实际值
nginx -T | grep -E 'root|server_name'
输出里 root 指令指向的目录就是当前站点根目录。默认 server 块长这样(Ubuntu 示例,/etc/nginx/sites-available/default):
server {
listen 80 default_server;
root /var/www/html; # ← 就是这里
index index.html index.htm;
server_name _;
location / {
try_files $uri $uri/ =404;
}
}
浏览器打开服务器 IP 看到的 "Welcome to nginx!" 页面,就是这个目录下的 index.html(或 index.nginx-debian.html)。
各环境对照
| 环境 | 默认目录 | 默认配置位置 |
|---|---|---|
| Debian/Ubuntu | /var/www/html |
/etc/nginx/sites-available/default |
| CentOS/RHEL/Fedora | /usr/share/nginx/html |
/etc/nginx/nginx.conf 或 conf.d/default.conf |
| 官方 Docker 镜像 | /usr/share/nginx/html |
/etc/nginx/conf.d/default.conf |
| 源码编译 | <prefix>/html(如 /usr/local/nginx/html) |
<prefix>/conf/nginx.conf |
改成自己的目录
root /var/www/mysite;
index index.html;
改完三件事:
nginx -t && systemctl reload nginx;- 确认目录存在且 Nginx 用户可读(目录 755、文件 644,路径上每级目录有 x 权限);
- SELinux 环境(CentOS)给新目录打上下文:
semanage fcontext -a -t httpd_sys_content_t "/var/www/mysite(/.*)?" && restorecon -Rv /var/www/mysite。
观测云对照
改了 root 却忘了权限/SELinux,或部署脚本把文件放进了旧目录——这类"内容与环境错位"的故障表现为 403/404,用户侧先于运维侧感知。把 Nginx 访问与错误日志接入观测云,403/404 按 URI 聚合并设告警,发布引起的错位分钟级就能定位。
常见问题(FAQ)
Q:/var/www/html 里的默认页面可以删吗?
A:可以,它只是占位页。删了后记得放上自己的 index 文件,否则访问根路径会因目录索引被禁而 403。
Q:一台机器多个站点怎么组织目录?
A:惯例是 /var/www/site-a/、/var/www/site-b/ 各一个目录,各配各的 server 块和 root。别把多站点混在同一目录下靠子路径区分。
Q:root 和 alias 有什么区别?
A:root 把完整 URI 拼在目录后(root /a; location /b/ → /a/b/...);alias 只替换匹配的前缀。新手建议统一用 root,行为更可预期。