当前位置: 首页 > news >正文

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,访问域名时直接显示默认首页。

步骤

  1. 创建 Nginx 虚拟主机配置文件
    Nginx 配置文件默认存放在 /etc/nginx/conf.d/,新建 test.conf

    sudo vim /etc/nginx/conf.d/test.conf
    
  2. 写入 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;
    }
    
  3. 验证配置并重载 Nginx

    # 1. 检查配置语法(无错误才继续)
    sudo nginx -t
    # 出现 "test is successful" 即为正常# 2. 重载 Nginx 使配置生效
    sudo systemctl reload nginx
    
  4. 测试访问

    • 方法 1:在服务器本地用 curl 测试:
      curl http://test.example.com
      # 预期输出:<h1>Default Page - test.example.com</h1>
      
    • 方法 2:在本地机器浏览器输入 http://test.example.com,应显示上述标题。

三、实验 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 配置特定路径

  1. 修改 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/}
    }
    
  2. 重载 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 配置特定路径(对比实验)

  1. 修改 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)
    }
    
  2. 重载并再次测试

    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/(浏览器地址栏不变)。

步骤

  1. 创建新路径的测试文件

    # 创建 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
    
  2. 添加 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 表示内部跳转,不返回给浏览器}
    }
    
  3. 重载并测试

    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 目录的配置文件,避免敏感信息泄露。

步骤

  1. 创建敏感测试文件

    # 在 admin 目录创建 .env 敏感文件
    sudo echo "DB_PASSWORD=123456" > /usr/share/nginx/test/admin/.env
    
  2. 添加权限控制配置到 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}
    }
    
  3. 重载并测试权限

    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/
    

六、实验排错技巧

  1. 配置语法错误:执行 sudo nginx -t,根据提示修改(如括号不匹配、路径写错);
  2. 404 错误:检查 root/alias 路径是否存在、文件是否存在,查看错误日志:
    sudo cat /var/log/nginx/error.log  # 搜索“no such file or directory”定位路径问题
    

  3. 403 错误:检查 Nginx 进程是否有目录读权限,执行:
    # 赋予目录读权限(示例)
    sudo chown -R nginx:nginx /usr/share/nginx/test
    sudo chmod 755 /usr/share/nginx/test  # 目录需 755,文件需 644
    

  4. 域名解析错误:确认本地 hosts 配置正确,服务器 IP 能 ping 通。

通过以上实验,可全面掌握 Nginx 路径配置的核心场景,包括 root/alias 区别、路径重定向、权限控制,满足实际项目中 “不同 URL 对应不同文件目录” 的需求。


文章转载自:

http://J79q4IKM.wxfjx.cn
http://HsD8gEWY.wxfjx.cn
http://BAcu3Cei.wxfjx.cn
http://mngKr61F.wxfjx.cn
http://bE5pPpcE.wxfjx.cn
http://kzmqMmmF.wxfjx.cn
http://xdMhkX97.wxfjx.cn
http://z9pPSMyy.wxfjx.cn
http://DiDFgOfM.wxfjx.cn
http://1Rd8hNbl.wxfjx.cn
http://V4IG7aWk.wxfjx.cn
http://ZXBOqId0.wxfjx.cn
http://NdZvTUKa.wxfjx.cn
http://OEUdFNVM.wxfjx.cn
http://HpZNoWqF.wxfjx.cn
http://gy4Eb1oA.wxfjx.cn
http://cw7IZr71.wxfjx.cn
http://Ps9LSWPQ.wxfjx.cn
http://JkV1a42z.wxfjx.cn
http://pQwlpPZG.wxfjx.cn
http://drVTLpmV.wxfjx.cn
http://Tdvw3J33.wxfjx.cn
http://N7s3xwZ9.wxfjx.cn
http://BOqJuCzT.wxfjx.cn
http://79DsUwFg.wxfjx.cn
http://y2sjMCkK.wxfjx.cn
http://3wh6FsIO.wxfjx.cn
http://dFHcK8v4.wxfjx.cn
http://GYjm1C7G.wxfjx.cn
http://ep1jUMj5.wxfjx.cn
http://www.dtcms.com/a/381187.html

相关文章:

  • leetcode142.环形链表II
  • 【Python】家庭用电数据分析Prophet预测
  • std::thread是可以被std::move吗?
  • Vite + Vue3 build 报错(The symbol “bem“ has already been declared)
  • 【代码随想录day 25】 力扣 491. 递增子序列
  • Kanji Dojo,一款日语学习工具
  • 机器人检验报告包含内容
  • .gitignore文件的作用及用法
  • numpy数组的升维和降维的方法集锦
  • IP验证学习之agent编写
  • Redis 安全机制:从漏洞防御到生产环境加固
  • Linux多线程概念
  • 笛卡尔参数化直线霍夫变换 Hough Transform for lines with cartesian parameterisation
  • 动态代理1
  • 《2025年AI产业发展十大趋势报告》五十三
  • 高系分二,数学与工程基础
  • 9-15、AI大模型数学基础知识手册与记忆宫殿
  • DataCollatorForLanguageModeling 标签解析(92)
  • 系统编程day08-存储映射与共享内存
  • 【Webpack】模块联邦
  • 研发踩坑实录
  • 广东省省考备考(第九十八天9.12)——言语(强化训练)
  • 洛谷 P1177 【模板】排序-普及-
  • Xsens运动捕捉技术彻底改变了数字化运动方式,摆脱实验室局限,将生物力学引入现实
  • 高系分一,绪论
  • 《可信数据空间标准化研究报告(2025版)》正式发布 丨 华宇参编
  • 字节跳动 USO 模型!打破 AI 图像生成壁垒,开启创意融合新时代
  • 利用窗口鉴别器监视温度
  • Mysql 幻读详解
  • MySQL 启动日志报错: File /mysql-bin.index not found (Errcode: 13 - Permission denied)