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

nginx中root和alias的区别

CSDN话题挑战赛第2期
参赛话题:一起学Java
在这里插入图片描述

一、遇到问题现象

今天使用nginx搭建了一个网站,访问后出现404错误Not found. 上网查了一下原因,是由于nginx的配置不对。因为我是有两个web目录,这两个目录在不同的位置上。而且我不想把两个目录合并在一起,所以就要配置两个location。配置如下:

server {
        listen       90 ssl;
        server_name  localhost;
         ssl_certificate /n1.pem;
        #从腾讯云获取到的第二个文件的全路径
        ssl_certificate_key /n1.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on;
        #charset koi8-r;

        #access_log  logs/host.access.log  main;
        
		#测试根
        location / {
            root /web/test;
            index index.html index.htm;
        }

		#测试使用pak包
		location /pak/ {
   			 root  /usr/local/ ;
		}

		#正式使用dev包
        location /dev/ {
            root /web/dev/doc/;
            index index.html index.htm;
        }
}

上面的配置浏览https://localhost/dev/会显示404错误,因为root属性指定的值是要加入到最终路径的,所以访问的位置变成了/web/dev/doc/dev/。而我不想把访问的URI加入到路径中。所以就需要使用alias属性,其会抛弃URI,直接访问alias指定的位置, 所以最终路径变成/web/dev/doc。

		#正式使用dev包
        location /dev/ {
            alias /web/dev/doc/;
            index index.html index.htm;
        }
直观理解如下形式:
location /dev/{
	alias /web/dev/doc/; #这个查找文件的路径直接是/web/dev/doc/
}

location /dev/{
	root /web/dev/doc/; #这个查找文件的路径应该是/web/dev/doc/dev
}

#测试使用pak包
location /pak/ {
    root  /usr/local/ ;
}
## 这里使用root配置 如果访问 192.168.2.3/pak/a.html  则对应的路径为:/usr/local/pak/a.html
通过root配置则location配置的/pak/一定是要在root对应的/usr/local/目录下要有的目录

二、alias与root的用法区别

最基本的区别:alias指定的目录是准确的,root是指定目录的上级目录,并且该上级目录要含有location指定名称的同名目录。另外,根据前文所述,使用alias标签的目录块中不能使用rewrite的break。

(1) . alias虚拟目录配置中,location匹配的path目录如果后面不带"/“,那么访问的url地址中这个path目录后面加不加”/“不影响访问,访问时它会自动加上”/“;
但是如果location匹配的path目录后面加上”/“,那么访问的url地址中这个path目录必须要加上”/“,访问时它不会自动加上”/“。如果不加上”/“,访问就会失败!
(2) . root目录配置中,location匹配的path目录后面带不带”/",都不会影响访问。

所以,一般情况下,在nginx配置中的良好习惯是:
1)在location /中配置root目录;
2)在location /path中配置alias虚拟目录。

相关文章:

  • pytorch深度学习训练模板
  • 【Qt+FFMPEG】 - 封装 解码音视频 线程
  • Arduino框架下最便宜的开发芯片-CH552初探
  • Java高并发编程实战5,异步注解@Async自定义线程池
  • 前端进阶——ES6
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • 【Python+大数据】第一天:安装VMware及Centos,配置虚拟机网络,学习Linux命令。研究生开学10天的感受。
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • JAVA代码操作HDFS
  • web前端开发基础教程一
  • 原子尺度仿真对材料设计效率的提升,是未来材料研发的关键核心竞争力
  • CDH 10Cloudera Manager Kerberos安装配置CA配置(markdown新版三)
  • RedHat7无法安装Telnet
  • LeetCode刷题(二):前言
  • 网络套接字实现TCP机制通信
  • [PHP内核探索]PHP中的哈希表
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • C++11: atomic 头文件
  • es6
  • Mysql5.6主从复制
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • PAT A1050
  • php面试题 汇集2
  • text-decoration与color属性
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 精彩代码 vue.js
  • 三分钟教你同步 Visual Studio Code 设置
  • 学习ES6 变量的解构赋值
  • 转载:[译] 内容加速黑科技趣谈
  • gunicorn工作原理
  • postgresql行列转换函数
  • ​虚拟化系列介绍(十)
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • #pragma multi_compile #pragma shader_feature
  • #微信小程序:微信小程序常见的配置传值
  • $.ajax()方法详解
  • (C++17) std算法之执行策略 execution
  • (八)c52学习之旅-中断实验
  • (附源码)ssm高校实验室 毕业设计 800008
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (数据结构)顺序表的定义
  • (四)鸿鹄云架构一服务注册中心
  • (转)一些感悟
  • .md即markdown文件的基本常用编写语法
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .net 4.0发布后不能正常显示图片问题
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .net6使用Sejil可视化日志
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件