Nginx 路径配置实验步骤
本实验将通过 root
/alias
指令配置、特定路径映射、权限测试、重定向验证 等场景,帮助你掌握 Nginx 路径配置的核心用法。实验环境以 CentOS 7/8 + Nginx 1.20+ 为例,其他 Linux 系统操作逻辑一致。
一、实验前置准备
1. 确保 Nginx 已安装并正常运行
若未安装 Nginx,先执行以下命令安装(CentOS 示例):
# 安装 Nginx(CentOS 用 yum,Ubuntu 用 apt-get)
sudo yum install nginx -y# 启动 Nginx 并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx# 验证 Nginx 状态(出现 active(running) 即为正常)
sudo systemctl status nginx
2. 关闭防火墙(避免端口拦截,实验环境用)
Nginx 默认用 80 端口,需开放或临时关闭防火墙:
# 临时关闭防火墙(重启后失效)
sudo systemctl stop firewalld# 永久关闭防火墙(可选,生产环境不建议)
# sudo systemctl disable firewalld
3. 准备实验目录和测试文件
创建不同用途的目录(模拟 “普通页面”“静态资源”“管理后台”),并生成测试 HTML/CSS 文件:
# 1. 普通页面目录(默认根目录)
sudo mkdir -p /usr/share/nginx/test/default
sudo echo "<h1>Default Page - test.example.com</h1>" > /usr/share/nginx/test/default/index.html# 2. 静态资源目录(存放 CSS/图片,模拟前端资源)
sudo mkdir -p /usr/share/nginx/test/static/css
sudo echo "body {background: #f0f0f0;}" > /usr/share/nginx/test/static/css/style.css# 3. 管理后台目录(模拟 admin 路径)
sudo mkdir -p /usr/share/nginx/test/admin
sudo echo "<h1>Admin Page - Only Admin Can Access</h1>" > /usr/share/nginx/test/admin/index.html# 4. 测试图片(可选,用 wget 下载一张示例图)
sudo wget https://nginx.org/nginx.png -O /usr/share/nginx/test/static/nginx.png
4. 配置本地 hosts(解决域名解析问题)
实验用自定义域名 test.example.com
,需在 本地机器(如 Windows/Mac) 配置 hosts(避免 “Could not resolve host” 错误):
- Windows:编辑
C:\Windows\System32\drivers\etc\hosts
,添加一行:plaintext
192.168.xxx.xxx test.example.com # 替换为你的 Nginx 服务器 IP
- Mac/Linux:编辑
/etc/hosts
,添加同上内容(需 sudo 权限)。
二、实验 1:用 root
配置全局默认路径
目标
将 test.example.com
的默认访问路径映射到 /usr/share/nginx/test/default
,访问域名时直接显示默认首页。
步骤
创建 Nginx 虚拟主机配置文件
Nginx 配置文件默认存放在/etc/nginx/conf.d/
,新建test.conf
:sudo vim /etc/nginx/conf.d/test.conf
写入
root
配置(全局路径)
粘贴以下内容,核心是root
指定默认根目录,index
指定默认首页:server {listen 80; # 监听 80 端口server_name test.example.com; # 绑定自定义域名# 全局根目录:所有未匹配的路径都从这里查找文件root /usr/share/nginx/test/default;# 默认首页:访问域名时优先找 index.html,再找 index.htmindex index.html index.htm; }
验证配置并重载 Nginx
# 1. 检查配置语法(无错误才继续) sudo nginx -t # 出现 "test is successful" 即为正常# 2. 重载 Nginx 使配置生效 sudo systemctl reload nginx
测试访问
- 方法 1:在服务器本地用
curl
测试:curl http://test.example.com # 预期输出:<h1>Default Page - test.example.com</h1>
- 方法 2:在本地机器浏览器输入
http://test.example.com
,应显示上述标题。
- 方法 1:在服务器本地用
三、实验 2:用 location + root/alias
配置特定路径
目标
- 访问
test.example.com/static/
时,映射到/usr/share/nginx/test/static
(静态资源); - 访问
test.example.com/admin/
时,映射到/usr/share/nginx/test/admin
(管理后台); - 对比
root
和alias
的区别。
步骤 1:用 root
配置特定路径
修改
test.conf
配置文件
在server
块中添加location
规则:server {listen 80;server_name test.example.com;root /usr/share/nginx/test/default; # 全局根目录index index.html index.htm;# 规则 1:匹配 /static/ 路径(静态资源)location /static/ {# 注意:root 路径是“父目录”,URL 中的 /static/ 会拼接在后面root /usr/share/nginx/test; # 访问 http://test.example.com/static/css/style.css → 实际路径:/usr/share/nginx/test/static/css/style.css}# 规则 2:匹配 /admin/ 路径(管理后台)location /admin/ {root /usr/share/nginx/test; # 同理,URL /admin/ 拼接后为 /usr/share/nginx/test/admin/} }
重载 Nginx 并测试
sudo systemctl reload nginx# 测试静态 CSS(预期输出 CSS 内容) curl http://test.example.com/static/css/style.css # 测试管理后台(预期输出 Admin Page) curl http://test.example.com/admin/
步骤 2:用 alias
配置特定路径(对比实验)
修改
static
路径的location
为alias
alias
会直接 “替换” URL 路径,无需拼接,注意末尾加/
:server {# 其他配置不变...# 规则 1 改为 alias:/static/ 直接映射到目标目录location /static/ {alias /usr/share/nginx/test/static/; # 末尾 / 必须加,避免路径错误# 访问 http://test.example.com/static/css/style.css → 实际路径:/usr/share/nginx/test/static/css/style.css(和 root 效果一致,但逻辑不同)}# 规则 2 不变(用 root) }
重载并再次测试
sudo systemctl reload nginx # 再次访问静态 CSS,结果应和之前一致(验证 alias 生效) curl http://test.example.com/static/css/style.css
关键区别总结
指令 | 核心逻辑 | 示例(URL:/static/a.css) | 实际文件路径 |
---|---|---|---|
root | 父目录 + URL 路径拼接 | root /usr/share/nginx/test; | /usr/share/nginx/test/static/a.css |
alias | 直接替换 URL 路径为目标目录 | alias /usr/share/nginx/test/static/; | /usr/share/nginx/test/static/a.css |
四、实验 3:配置路径重定向(rewrite
指令)
目标
- 将旧路径
test.example.com/old/
永久重定向到新路径test.example.com/new/
(浏览器地址栏会变); - 将
test.example.com/api/
内部转发到test.example.com/backend/api/
(浏览器地址栏不变)。
步骤
创建新路径的测试文件
# 创建 new 目录和测试文件(模拟新路径) sudo mkdir -p /usr/share/nginx/test/default/new sudo echo "<h1>New Page - Redirected from /old</h1>" > /usr/share/nginx/test/default/new/index.html# 创建 backend/api 目录和测试文件(模拟内部接口) sudo mkdir -p /usr/share/nginx/test/default/backend/api sudo echo '{"code":200,"msg":"API Success"}' > /usr/share/nginx/test/default/backend/api/data.json
添加
rewrite
配置到test.conf
server {# 其他配置不变...# 1. 永久重定向(301):/old/ → /new/(浏览器地址栏会显示 /new)location /old/ {rewrite ^/old/(.*)$ /new/$1 permanent; # ^/old/(.*)$ 是正则,匹配 /old/ 后的所有内容}# 2. 内部转发(地址栏不变):/api/ → /backend/api/location /api/ {rewrite ^/api/(.*)$ /backend/api/$1 last; # last 表示内部跳转,不返回给浏览器} }
重载并测试
sudo systemctl reload nginx# 测试永久重定向(查看 Location 字段,应指向 /new/) curl -I http://test.example.com/old/ # -I 只看响应头,预期返回 301 + Location: http://test.example.com/new/# 测试内部转发(地址栏还是 /api/,但实际访问 /backend/api/) curl http://test.example.com/api/data.json # 预期输出 {"code":200,"msg":"API Success"}
五、实验 4:路径权限控制(禁止访问敏感路径)
目标
禁止访问隐藏文件(如 .git
、.env
)和 admin
目录的配置文件,避免敏感信息泄露。
步骤
创建敏感测试文件
# 在 admin 目录创建 .env 敏感文件 sudo echo "DB_PASSWORD=123456" > /usr/share/nginx/test/admin/.env
添加权限控制配置到
test.conf
server {# 其他配置不变...# 规则:禁止访问所有以 . 开头的隐藏文件/目录(如 .env、.git)location ~ /\. {deny all; # 拒绝所有访问,返回 403 Forbiddenaccess_log off; # 不记录该路径的访问日志log_not_found off; # 不记录“文件不存在”的日志}# 可选:只允许特定 IP 访问 admin 目录(如仅本地 127.0.0.1)location /admin/ {root /usr/share/nginx/test;allow 127.0.0.1; # 允许本地访问deny all; # 拒绝其他所有 IP} }
重载并测试权限
sudo systemctl reload nginx# 测试访问隐藏文件(预期返回 403) curl -I http://test.example.com/admin/.env # 预期 403 Forbidden# 测试远程 IP 访问 admin(预期 403,需在非服务器机器执行) # 本地服务器访问 admin(预期 200,在服务器执行) curl http://test.example.com/admin/
六、实验排错技巧
- 配置语法错误:执行
sudo nginx -t
,根据提示修改(如括号不匹配、路径写错); - 404 错误:检查
root/alias
路径是否存在、文件是否存在,查看错误日志:sudo cat /var/log/nginx/error.log # 搜索“no such file or directory”定位路径问题
- 403 错误:检查 Nginx 进程是否有目录读权限,执行:
# 赋予目录读权限(示例) sudo chown -R nginx:nginx /usr/share/nginx/test sudo chmod 755 /usr/share/nginx/test # 目录需 755,文件需 644
- 域名解析错误:确认本地 hosts 配置正确,服务器 IP 能 ping 通。
通过以上实验,可全面掌握 Nginx 路径配置的核心场景,包括 root
/alias
区别、路径重定向、权限控制,满足实际项目中 “不同 URL 对应不同文件目录” 的需求。