Nginx alias root 和 try_files 基本使用

请求都用域名

root

Syntax: root path;
Default:
root html;
Context:    http, server, location, if in location

location /i/ {
    root /data/w3;
}

请求 /i/top.gif 是找到文件 data/w3/i/top.gif

root 实现的是url 拼接。

location /mainland/pgc/ {
    root /tmp/pgc/pgc/;
}

请求 http://test.com/mainland/pgc/ 实际目录为 /tmp/pgc/pgc/mainland/pgc/index.html

alias

Syntax: alias path;
Default:    —
Context:    location

location /i/ {
    alias /data/w3/images/;
}

请求 /i/top.gif 是找到文件 /data/w3/images/top.gif

注意: alias 末尾需要增加 /

官网文档

if alias is used inside a location defined with a regular expression then such regular expression should contain captures and alias should refer to these captures (0.7.40), for example:

location ~ ^/users/(.+\.(?:gif|jpe?g|png))$ {
    alias /data/w3/images/$1;
}

注意点: 当我们使用了正则,然后使用 alias ,我们必须在 alias 中使用正则的变量,

nginx 版本: 1.12.2

当 nginx location 正则 aliastry_files, 存在排斥情况。

访问URL: /mainland/pgc/index.html

    location ~ (/(zh-cn|zh-hk|en|mainland))?/pgc/(.*) {
             alias /www/dev/mainland/pgc/$3;
             try_files $uri /mainland/pgc/$3;
             index index.html index.htm;
    }

上面正则中 $1 和$2 都是 mainland, $3的值为 index.html

根据上面配置后, 访问 /mainland/pgc/index.html ,报错为

2021/08/30 16:38:32 [error] 18570#0: *1249587 rewrite or internal redirection cycle while internally redirecting to "/mainland/pgc/index.html", client: 10.210.20.112, server: usmart-dev.baidu.com, request: "GET /mainland/pgc/index.html HTTP/1.1", host: "usmart-dev.baidu.com"

当我去除掉 try_files, 也就是如下配置时

    location ~ (/(zh-cn|zh-hk|en|mainland))?/pgc/(.*) {
             alias /www/dev/mainland/pgc/$3;
             index index.html index.htm;
    }

访问 /mainland/pgc/index.html ,正常。

正则使用变量名

    location ~ (?/(zh-cn|zh-hk|en|mainland))?/pgc/(?.*) {
             alias /www/dev/mainland/pgc/$page;
             index index.html index.htm;
    }

try_files

Syntax: try_files file ... uri;
try_files file ... =code;
Default:    —
Context:    server, location

按指定顺序检查文件是否存在,并使用第一个找到的文件进行请求处理。处理的基于上下文处理的。文件的路径是file 根据前面的 root 和 alias 指令作为参数构建的。可以通过在名称末尾,指定斜杠来检查目录是否存在, 例如 $uri/, 如果没有找到任何文件, URL 则进行到最后一个参数中指定的内部重定向。 最后一个参数可以是URL 也可以是一个 code.

URL:

location / {
    try_files $uri $uri/index.html /test/index.html;
}

code:

location / {
    try_files $uri $uri/index.html $uri.html =404;
}

Example in proxying Mongrel:

location / {
    try_files /system/maintenance.html
              $uri $uri/index.html $uri.html
              @mongrel;
}

location @mongrel {
    proxy_pass http://mongrel;
}

一般配置:

try_files $uri $uri/ /index.html;

Original: https://www.cnblogs.com/operationhome/p/15212691.html
Author: 自由早晚乱余生
Title: Nginx alias root 和 try_files 基本使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/543459/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 国美真快乐开放平台Java电商ERP服务商对接

    1、注册登录 国美真快乐开放平台地址:国美真快乐开放平台 2、创建应用 应用创建官方指导文档:应用创建 电商ERP服务商身份入驻,选择如下: 新建好后点击应用名称,在左侧点击应用证…

    Java 2023年6月8日
    048
  • 关于Linux

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年6月13日
    073
  • [JVM] CPU缓存一致性协议

    CPU缓存一致性协议 CPU高速缓存 CPU缓存是位于cpu和内存之间的临时数据交换器,它的容量比内存小的夺但是交换速度要比内存快得多,主要是 为了解决cpu运行时的处理速度与内存…

    Java 2023年6月5日
    080
  • 获取线程对象的名称

    获取线程对象的名称 1.获取当前线程对象//调用当前线程对象,currentThread()这方法出现在main()方法中,当前线程就是主线程//这代码出现在哪,就是获取到哪个线程…

    Java 2023年6月9日
    052
  • 使用nginx实现用在同域名下部署多个前后端分离项目

    背景 现在我们有几个前后端分离的项目,前后台使用的分别是Vue和Springboot框架开发,部署方式的话前端使用webpack进行打包用nginx作为静态服务器访问,部署在前端服…

    Java 2023年5月30日
    075
  • Nginx增加网页认证功能

    Nginx增加网页认证功能 增加认证功能模块 ngx_http_auth_basic_module 模块实现让访问者,只有输入正确的用户密码才允许访问web内容。web上的一些内容…

    Java 2023年6月8日
    087
  • java集合框架07——Map架构与源代码分析

    前几节我们对Collection以及Collection中的List部分进行了分析,Collection中还有个Set,因为Set是基于Map实现的,所以这里我们先分析Map,后面…

    Java 2023年5月29日
    070
  • 踩到一个关于分布式锁的非比寻常的BUG!

    你好呀,我是歪歪。 提到分布式锁,大家一般都会想到 Redis。 想到 Redis,一部分同学会说到 Redisson。 那么说到 Redisson,就不得不掰扯掰扯一下它的&#8…

    Java 2023年6月5日
    054
  • JMH java基准测试

    Measure, don’t guess! JMH适用场景 JMH只适合细粒度的方法测试 原理 编译时会生成一些测试代码,一般都会继承你的类 maven依赖 <d…

    Java 2023年5月29日
    076
  • 【SSM框架】Spring笔记 — AOP详解;AspectJ中四种通知的使用

    1、面向切面编程AOP AOP(Aspect Orient Programming),面向切面编程。 切面:公共的,通用的,重复的功能称为切面,面向切面编程就是将切面提取出来,单独…

    Java 2023年6月8日
    059
  • nginx只允许域名访问,禁止ip访问

    背景:为什么要禁止ip访问页面呢? 这样做是为了避免其他人把未备案的域名解析到自己的服务器IP,而导致服务器被断网,我们可以通过禁止使用ip访问的方法,防止此类事情的发生。 解决方…

    Java 2023年5月30日
    056
  • js金额转中文大写

    基础参数: 主方法: 整数部分转换: 小数部分转换; 格式化处理: Original: https://www.cnblogs.com/tangzeqi/p/13044993.ht…

    Java 2023年6月6日
    090
  • MyBatis: Invalid bound statement (not found)错误的可能原因

    其他原因导致此问题解决参考: 1.检查 xml 文件所在 package 名称是否和 Mapper interface 所在的包名一致 mapper 的 namespace 写的不…

    Java 2023年5月30日
    052
  • EMT4J——让 Java 应用升级更轻松

    JDK 升级对于 Java 应用来说是不得不面对的事情,一方面 Java 生态系统希望 Java 应用能跟上最新 JDK 版本: Oracle 建议将 JDK 的 LTS 版本的发…

    Java 2023年5月29日
    065
  • 开源Winform控件库:花木兰控件库

    微信好友推荐,挺好看的Winfrom控件库,下面来看看。 介绍 基于 C#(语言) 4.0 、 VS2019 、 Net Framework 4.0(不包括Net Framewor…

    Java 2023年5月30日
    0131
  • 缓存更新的另一种方法:双删策略

    上一篇说到缓存的更新操作是非幂等操作,会出现并发更新的问题。那用缓存删除操作实现缓存更新行不行,您可能觉得奇怪,删除了缓存如何更新,假设读业务先读取缓存,如果发现没有就回溯到读数据…

    Java 2023年6月16日
    073
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球