nginx root、alias、location指令使用方法

本文详细解析了Nginx配置中root和alias指令的使用方法及注意事项,通过实例演示如何正确配置目录结构以实现高效网页访问。重点强调了location指令与root指令、alias指令之间的对应关系,帮助开发者避免常见错误并优化网站部署。

一.nginx root指令

1. Nginx配置

相关配置如下图:


通过配置root目录到“/wwwroot/html/”位置

在用虚拟主机方法,主机名称是test,需要大家配置一下自己pc的host文件,另外需要配置server的nginx.conf文件,添加“include vhost/t.conf;”代码,注意不要携带中文的引号

2. 准备一些文件,文件列表如下


如上图,我们将/wwwroot/html目录下的“目录结构及文件”列了出来,一会我们会根据这个目录结构进行实验。

3. 正常访问页面,显示如下图


通过上图我们可以了解到访问/t/a.html成功, 也就是 这个“location /t/”配置及root配合是正常的

4. 访问非目录结构


如上图访问结果,我们无法访问c.html,为什么,其实问题不在root,在于“location /t/”,根据这个指令,我们必须在我们的url中包括“/t/”,否则无效,并且我们在虚拟的主机中没有其他配置了,因此无法访问c.html

5. Root的对比配置


图上图,我们配置root的目录到 “/wwwroot/html/t/”,然后重新加载nginx配置


访问a.html文件,这个文件在这个目录中是真实存在的,结果如下


上图结果由于有缓存存在,无法真正表明结果

通过特别参数来突破缓存进行测试,结果如下:


从上图看,已经没有缓存在影响,但是仍然没有找到页面

清理缓存后再次测试,结果如下


结果以上是上面的情况。

小结


图中最上面是nginx的 location的配置, 特别注意 “/t/”,我们的访问中必须携带这个信息,才能访问。

第二行是用户的访问

第三行是nginx的 root指令,特别注意绿色区域的“/”必须是一一对应的。

最下面是linux文件系统的目录及文件显示,当然目录是 /wwwroot/html/目录下的文件。

从上图我们可以了解到:location指令的第一个“/”同root指令的最后一个“/”是一一对应的,然后,root的指定的目录中,包括 location指定的相关目录结构,图中最后一部分显示的结构。

用户访问中,相应的“/”也必须同location中的“/”进行相关对应。图中应该对应的“/”都已经用相同颜色标识出来,请注意!

二.nginx alias别名配置

1. 更新配置文件

别名的相关配置如下图,文件系统不变。


重新加载配置


2. 未清理缓存情况下的访问


3. 采用参数法突破缓存的结果


4. 清理缓存后访问结果


5. 更改配置文件进行对比实验


重新加载配置文件

清理浏览器缓存然后访问如下


从图中发现我们已经访问不了

访问c.html


可以访问了。为什么???

小结


从上图中我们了解到,location中 黄色“/”要同 alias中“/”相对应。

然后是服务器中的目录结构了。

再有就是html访问中(同location的关系)的情况,同上面root的情况类似。

总结:

1. Location管理服务器及用户浏览器的访问, 主要是http请求中url中特定部分同location指令特定部分要对应,需要对应在两个小结的图中已经给出了!

2. Root及alias指令主要是目录对应关系同location不同

3. Root的最后一个“/”要同location的第一个“/”对应,其他目录结构同location中剩余相同

4. Alias的最后一个“/”要同location的最后一个“/”对应

转载于:https://www.cnblogs.com/wuyida/p/6300879.html

Nginx 中,`root` 和 `alias` 是两个用于指定文件路径的指令,它们的主要区别在于如何处理请求的 URI 与文件系统路径之间的映射关系。 ### `root` 指令 `root` 指令会将请求的 URI 直接附加到指定的根目录路径后,形成完整的文件系统路径。这意味着 URI 的完整结构会被保留,并且直接映射到文件系统的对应位置。例如: ```nginx location /static/ { root /data/www; } ``` 如果客户端请求 `/static/css/style.css`,Nginx 会尝试从 `/data/www/static/css/style.css` 提供文件[^1]。 ### `alias` 指令 `alias` 指令则会替换匹配的 URI 部分,而不是附加。它通常用于将某个 URL 路径映射到一个完全不同的文件系统路径,而不保留原始 URI 的结构。例如: ```nginx location /static/ { alias /data/files/; } ``` 在这种情况下,请求 `/static/css/style.css` 将被映射到 `/data/files/css/style.css`,URI 中的 `/static/` 部分会直接被替换为 `/data/files/`。 ### 使用注意事项 - **结尾斜杠问题**:使用 `alias` 时,必须确保其路径以斜杠 `/` 结尾,否则可能导致路径解析错误。 - **嵌套 `location` 中的行为差异**:在正则表达式或嵌套 `location` 块中使用时,`alias` 可能会有更复杂的行为,需要特别注意 URI 匹配规则。 - **性能考量**:`alias` 在某些情况下可能会比 `root` 更高效,因为它避免了 URI 的拼接操作。 ### 示例配置对比 #### 使用 `root` ```nginx server { listen 80; server_name example.com; location /files/ { root /var/www/html; } } ``` 对于请求 `http://example.com/files/test.txt`,Nginx 会查找 `/var/www/html/files/test.txt`。 #### 使用 `alias` ```nginx server { listen 80; server_name example.com; location /files/ { alias /var/data/storage/; } } ``` 同样地,请求 `http://example.com/files/test.txt` 会映射到 `/var/data/storage/test.txt`,其中 `/files/` 被替换为 `/var/data/storage/`。 ### 总结 选择 `root` 还是 `alias` 取决于具体的应用场景: - 如果希望保持 URI 与文件系统路径的一致性,使用 `root`; - 如果需要将某个 URI 映射到一个完全独立的文件系统路径,建议使用 `alias`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值