关于alias、root的用法

关于alias、root的用法

在这里插入图片描述
在这里插入图片描述

root

语法:root path
默认值: root html
配置段: http,server,location,if

例子:
静态文件地址:/home/static/html/js/demo.html

用例1:
以请求http://example.com/js/demo.html为例

location /js {
    root /home/static/html;
}

具体的匹配结果为/home/static/html,然后拼接location的/js,所以拼接的结果就变成了/home/static/html/js,结合访问的url,实际访问路径就为/home/static/html/js/demo.html

用例2:最左匹配原则
location会从url最左边的路径匹配,如果一致则命中该location。只有中间匹配到不会命中。
比如请求的url为http://example.com/js/demo.html ,location为

location /js {
    root /home/html/;
}

此location不会被命中,因为从url中的/static开始匹配,因为他拼接起来的目录是/home/html/js与实际的目录/home/static/html/js/有差异

用例3:index
在location内部默认配置了一条规则 index index.html,补全后如下:

location /html {
    root /home/static/;
    index index.html;
}

假设我们访问的url是http://example.com/html/js,匹配到了/html,实际的访问路径是/home/static/html/js,如果我们该目录下包含index.html,则会把该文件返回,
所以index的作用是当访问一个目录时,会返回该目录中index指定的文件,如果指定的index文件不存在,则返回403.

用例4:

location /js {
    root /home/static/html/;
    index index.html;
}
location /js/ {
    root /home/static/html/;
    index index.html;
}

当访问http://example.com/js的时候,实际访问路径是/home/static/html/js,然后nginx会发现js不是文件是目录,所以会主动重定向到http://example.com/static/html/js/,然后就会访问到index指定的html文件。
因此加/和不加/意义是不一样的
http://example.com/static/html/js 表示将js作为一个文件来访问,但是当他发现js是一个目录时会重定向到js/
http://example.com/static/html/js/ 表示将js作为一个目录,想要访问js下面index指定的文件
所以js既能访问到js,又能访问到js下面的index指定的html文件,而js/只能访问到后者
同理,root后面的目录末尾加/则是把它当成目录,不加斜杠则是它当作目录或者文件
故对于/的总结如下:
1、url末尾不加/,如果需要带/时依靠nginx自动帮我们重定向加/
2、location 路径不加/,这样末尾有无/的url都能匹配到
3、root指定的目录后面加/,明确表示root指定的是目录,增强配置的可读性

用例5:
关于root分别放在在http、server、location段下的情况,如何调用
配置举例:

http {
    # 在 http 块下定义全局 root 路径
    root /var/www/global;
 
    server {
        # 服务器监听 80 端口
        listen 80;
 
        # server_name 指令用于定义服务器名称或 IP
        server_name example.com;
 
        # 在 server 块下定义特定的 root 路径
        root /var/www/server;
 
        # 定义服务器处理请求的配置
        location / {
            # 此处的 root 会覆盖 http 块和 server 块中的 root 设置
            root /var/www/location;
            index index.html index.htm;
        }
    }
}

当用户请求http://example.com/时会直接请求到/var/www/location,但是如果location下没有配置root路径,则看访问的时那个server段,则匹配对应server段的root路径,此处匹配结果是/var/www/server,
如果server块没有定义root,则匹配全局路径,结果则为/var/www/global

补充一点,
nginx实现location /既能访问到txt文件,又能proxy_pass到后端服务,这个问题是在我部署小程序校验文件的时候遇到的,记录一下:
需求:https://example.com/已经proxy_pass到后端服务器了,现在需要https://example.com/ABC.txt能访问到
原始的配置是这样的

server {
    listen 443;
    server_name example.com;
    access_log logs/testgw_access.log;
    ssl on;
    ssl_certificate /usr/local/ssl/conf/cert/cert.pem;
    ssl_certificate_key /usr/local/ssl/nginx/conf/cert.key;
    ssl_session_timeout 5m;
    ssl_session_cache shared:SSL:10m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;

    location / {
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-Ip $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://172.22.11.159:8000;
    }
}

修改后的配置:

```bash
server {
    listen 443;
    server_name example.com;
    access_log logs/testgw_access.log;
    ssl on;
    ssl_certificate /usr/local/ssl/conf/cert/cert.pem;
    ssl_certificate_key /usr/local/ssl/nginx/conf/cert.key;
    ssl_session_timeout 5m;
    ssl_session_cache shared:SSL:10m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;
    root /home/admin/www/wx #txt文件存放目录

    location / {
        try_files $uri $uri/ @router; 
    }

    location @router {
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-Ip $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://172.22.11.159:8000;
    }
}

访问 https://example.com/ABC.txt 时 --> try_files $uri --> try_files /ABC.txt --> /data/wx/ABC.txt --> 实现了访问
访问 https://example.com/网关转发的uri/xxx 时 --> try_files $uri --> try_files /网关转发的uri/xxx --> /home/admin/www/wx网关转发的uri/xxx 不存在 --> try_files @router --> location @router --> proxy_pass
http://172.22.11.159:8000 --> 实现了访问

alias

语法:alias path
配置段:location
用例:

location /hhh {
    alias /home/static/html/;
}

当访问http://example.com/hhh/js/demo.html时,匹配到这条location,访问实际路径为/home/static/html/js/demo.html
所以location随意变化,访问的路径都是alias定义的路径。
alias其余特性,最左匹配、index、location解析url工作流程、末尾’/'与root一致。

常见问题:
当/home/static/html/js是一个文件的时候
1、location配置如下:

location /js {
    alias /home/static/html/js/;
}

因为alias指定的js/ 是一个目录,而实际js是一个文件,这时候会返回404
2、又或者如下写法

location /js/ {
    alias /home/static/html/js;
}

实际要访问的是/home/static/html/js/是这个目录,alias指定的又是一个文件,这时候会返回500

3、同理,location这样写:

location /js/ {
    alias /home/static/html/js/;
}

实际访问的路径依然是/home/static/html/js/,是个路径,而js是个文件,则返回404

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/475662.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

指路明灯,99%自动化测试从业者都该看的职业规划!

这篇文章将从以下三个方面来给大家介绍自动化测试,其中包含自动化测试从业者需要了解的知识和一些常见的思想误区,以及自动化测试行业的前景以及如何进阶 1.自动化测试的介绍: 自动化测试什么是,有哪些被称作自动化测试&#xf…

2024-03-20 作业

作业要求: 1> 创建一个工人信息库,包含工号(主键)、姓名、年龄、薪资。 2> 添加三条工人信息(可以完整信息,也可以非完整信息) 3> 修改某一个工人的薪资(确定的一个&#x…

C++利用开散列哈希表封装unordered_set,unordered_map

C利用开散列哈希表封装unordered_set,unordered_map 一.前言1.开散列的哈希表完整代码 二.模板参数1.HashNode的改造2.封装unordered_set和unordered_map的第一步1.unordered_set2.unordered_map 3.HashTable 三.string的哈希函数的模板特化四.迭代器类1.operator运算符重载1.动…

算法系列--递归

一.如何理解递归 递归对于初学者来说是一个非常抽象的概念,笔者在第一次学习时也是迷迷糊糊的(二叉树遍历),递归的代码看起来非常的简洁,优美,但是如何想出来递归的思路或者为什么能用递归这是初学者很难分析出来的 笔者在学习的过程中通过刷题,也总结出自己的一些经验,总结来…

Beamer模板——基于LaTeX制作学术PPT

Beamer模板——基于LaTeX制作学术PPT 介绍Beamer的基本使用安装和编译用于学术汇报的模板项目代码模板效果图 Beamer的高级特性动态效果分栏布局定理环境 介绍 在学术领域,演示文稿是展示和讨论研究成果的重要方式。传统的PowerPoint虽然方便,但在处理复…

基于python+vue家政服务系统flask-django-php-nodejs

相比于以前的传统手工管理方式,智能化的管理方式可以大幅降低家政公司的运营人员成本,实现了家政服务的标准化、制度化、程序化的管理,有效地防止了家政服务的随意管理,提高了信息的处理速度和精确度,能够及时、准确地…

MAC本安装telnet

Linux运维工具-ywtool 目录 1.打开终端1.先安装brew命令2.写入环境变量4.安装telnet 1.打开终端 访达 - 应用程序(左侧) - 实用工具(右侧) - 终端 #注意:登入终端用普通用户,不要用MAC的root用户1.先安装brew命令 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/H…

什么是高防CDN?

高防CDN(Content Delivery Network,内容分发网络)在网络安全中的作用非常重要。它通过一种特别的方式来保护网站和网络应用程序免受大规模DDoS攻击。以下是它的一些主要优势: 01 分布式防护 高防CDN通过在全球各地设立大量的节点…

智能电表多少钱一个?

嗨,朋友们,你是否好奇过家里那个默默工作的智能电表到底值多少钱呢?今天我们就来聊聊这个话题,一起走进智能电表的世界,看看它们是如何从传统的机械表进化为现代的智能设备,并了解它们的价格区间。 首先,…

基于Java+SpringBoot+vue+element实现毕业就业招聘系统

基于JavaSpringBootvueelement实现毕业就业招聘系统 博主介绍:多年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末获取…

宏宇、萨米特、新明珠、金意陶、简一、科达、力泰、道氏、SITI BT、POPPI……35家参展商发布亮点

3月18日,2024佛山潭洲陶瓷展(4月18-22日)亮点发布会在广东新媒体产业园成功举办,主题为“我们不一样”。 陶城报社社长、佛山潭洲陶瓷展总经理李新良代表主办方,发布了2024佛山潭洲陶瓷展的“不一样”;佛山…

位运算第三弹

力扣268.丢失的数字 public static int missingNumber(int[] nums) {int nnums.length;int []retnew int[n1];for(int i1;i<n;i){ret[nums[i-1]];}for(int i0;i<n;i){if(ret[i]0){return i;}}return 0;} 和上一道题&#xff0c;一个性质&#xff0c;用的是底层哈希表的思…

C语言例:表达式10<<3+1的值

10的二进制 00001010 10<<3 01010000 十制左移m位&#xff0c;乘以。 0101 0000 十进制80 10<<31 81

【极简无废话】open3d可视化torch、numpy点云

建议直接看文档&#xff0c;很多都代码老了&#xff0c;注意把代码版本调整到你使用的open3d的版本&#xff1a; https://www.open3d.org/docs/release/tutorial/visualization/visualization.html 请注意open3d应该已经不支持centos了&#xff01; 从其他格式转换成open3d…

go和rust使用protobuf通信

先下载protoc 首先下载proc程序以生成代码 https://github.com/protocolbuffers/protobuf/releases 解压&#xff0c;然后把bin目录的位置放到环境变量 测试 rust作为server&#xff0c;rpc使用tonic框架 官方教程 go作为service&#xff0c;使用grpc go语言使用grpc 效…

倪诗韵古琴雷期展示,琴体秀气

音色通透、细腻&#xff0c;灵敏度高&#xff0c;好不好自己听吧&#xff0c;绝对是入门演奏利器。想不想听试音&#xff1f;试音已经发出来了&#xff0c;但是这床琴已经订出去了&#xff0c;不过琴友可以听听雷期的音色&#xff0c;那就关注我吧

利用HubSpot出海CRM打造社交媒体整合营销新高度

在数字化营销的新时代&#xff0c;社交媒体已成为企业获取潜在客户、增强品牌影响力的重要渠道。作为HubSpot合作伙伴&#xff0c;我们深知HubSpot出海CRM在整合社交媒体资源、提升营销效果方面的巨大潜力。今天运营坛将详细探讨HubSpot出海CRM与社交媒体整合的重要性&#xff…

动态规划题目练习

基础知识&#xff1a; 动态规划背包问题-CSDN博客 动态规划基础概念-CSDN博客 题目练习&#xff1a; 题目1&#xff1a;过河卒 题目描述 棋盘上 A 点有一个过河卒&#xff0c;需要走到目标 B 点。卒行走的规则&#xff1a;可以向下、或者向右。同时在棋盘上 C 点有一个对方的马…

由浅到深认识C语言(14):枚举

该文章Github地址&#xff1a;https://github.com/AntonyCheng/c-notes 在此介绍一下作者开源的SpringBoot项目初始化模板&#xff08;Github仓库地址&#xff1a;https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址&#xff1a;https://blog.csdn…

报数游戏-第12届蓝桥杯选拔赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第39讲。 报数游戏&#xf…