题记

此前在配置Nginx location模块的时候玩出了一些bug,折腾了一段时间。后来网上也查阅了相关的资料,看着也比较混乱。周末有空想着好好整理一下location模块的配置,结合自己的亲手实验,总结了location模块的配置。

location模块配置

根据匹配特性大概可以分成以下几个部分(按优先级顺序)

最高优先级(=) 第二优先级(^~) 第三优先级(按照顺序匹配,*) 第四优先级(/)

1. 匹配即停止

=:表示精确匹配,要么就匹配上,要么就不会被匹配。如果匹配上了,就进入该location块,其他都不看。

~:表示优先匹配,如果按从上往下的顺序匹配到了该~后面的URL,那么就进入该location块,其他都不看。

2. 按顺序匹配

~:表示区分大小写的正则匹配,如果依照自上而下的顺序匹配上URL了,那就不会再继续寻找,即使用这个location块。

~*:表示不区分大小写的正则匹配,如果依照自上而下的顺序匹配上URL了,那就不会再继续寻找,即使用这个location块。

3. 通用匹配

/:表示任何请求都会被匹配到。

location使用举例

# 输入http://ip+port/images/1.p
# 此时显示的是'= /images/1.p',因为=匹配优先级最高
location = /images/1.p {
default_type 'text/plain';
echo '= /images/1.p';
}
location ^~ /images/1.p {
default_type 'text/plain';
echo ' /images/1.p';
}
# 输入http://ip+port/images/1.p
# 此时显示到的是'^~ /images/1.p',因为^~只要匹配到了就会停止匹配,哪怕后续的长度更长
location ^~ /images/ {
default_type 'text/plain';
echo '^~ /images/1.p';
}
location ~ /images/1.p {
default_type 'text/plain';
echo '~ /images/1.p';
}
# 输入http://ip+port/images/1.pxyzxyz
# 此时显示到的是'~ /images/',因为这是按照顺序匹配的,匹配到了后面的就不再匹配了
location ~ /images/ {
default_type 'text/plain';
echo '~ /images/';
}
location ~ /images/1 {
default_type 'text/plain';
echo '~ /images/1';
}
# 输入http://ip+port/images/  显示'/',因为没有匹配到后面的URL,使用默认的/规则
# 输入http://ip+port/images/1xyzxyz 显示'~ /images/1',因为匹配到了后面的正则
location / {
default_type 'text/plain';
echo '/';
}
location ~ /images/1 {
default_type 'text/plain';
echo '~ /images/1';
}
# 输入http://ip+port/images/ 显示'/images/'
# 输入http://ip+port/images/1/ab 显示'/images/'
# 输入http://ip+port/images/1/abc 显示'/images/1/abc' 匹配上第一个location后,会继续向下匹配寻找,如果有更加完整的匹配,则会有下面的。如果没有,则使用当前的。
location /images/ {
default_type 'text/plain';
echo '/images/';
}
location /images/1/abc {
default_type 'text/plain';
echo '/images/1/abc';
}

注意事项

# 在使用“=”的时候会有意外情况,比方说下面这个例子。当输入'http://ip+port/'时,发现返回的状态码是304&404
# 原因在于Nginx发现请求的是个目录时,会重定向去请求'http://ip+port/index.html',此时返回码是304
# 而后Nginx收到了'http://ip+port/index.html'这个请求,发现没有location能够匹配,就返回404了
location = / {
default_type 'text/plain';
index index.html index.htm;
root /web/;
}

Nginx中location模块的详细配置(含示例)的更多相关文章

  1. nginx中Geoip_module模块的使用

    nginx中Geoip_module模块的使用 .安装模块,nginx也是通过yum安装 yum install nginx-module-geoip -y # 可以看到模块的链接库文件 [root@ ...

  2. nginx 中location和root

    nginx 中location和root,你确定真的明白他们关系? 2016-01-17 14:48 3774人阅读 评论(1) 收藏 举报  分类: linux(17)  版权声明:本文为博主原创文 ...

  3. Nginx 中 location 的匹配顺序

    nginx中location的匹配模式有以下几种: 精确匹配:以=开头,只有完全匹配才能生效,例子location = /uri 非正则匹配:以^~开头,^表示非.~表示正则,例子location ^ ...

  4. 对nginx中location的认识

    关于一些对location认识的误区 1.location的匹配顺序是“先匹配正则,在匹配普通”. location的匹配顺序其实是“先匹配普通,在匹配正则”.造成误解的原因是:正则匹配会覆盖普通匹配 ...

  5. nginx中ngx_http_core_module模块

    http核⼼心模块指令:套接字相关的配置3.1 server{ }设置虚拟服务器器的配置Syntax: server { ... }Default: —Context: httpserver {lis ...

  6. nginx中location、rewrite用法总结

    一.location用法总结 location可以把不同方式的请求,定位到不同的处理方式上. 1.location的用法 location ~* /js/.*/\.js 以 = 开头,表示精确匹配:如 ...

  7. nginx中location详解

    Location block 的基本语法形式是: location [=|~|~*|^~|@] pattern { ... } [=|~|~*|^~|@] 被称作 location modifier ...

  8. nginx中location的顺序(优先级)及rewrite规则写法

    一.location正则写法 一个示例: location = / { # 精确匹配 / ,主机名后面不能带任何字符串 [ configuration A ] } location / { # 因为所 ...

  9. (数据科学学习手札32)Python中re模块的详细介绍

    一.简介 关于正则表达式,我在前一篇(数据科学学习手札31)中已经做了详细介绍,本篇将对Python中自带模块re的常用功能进行总结: re作为Python中专为正则表达式相关功能做出支持的模块,提供 ...

随机推荐

  1. js面向对象写法及栈的实现

    function Stack() { this.dataStore = []; this.top = 0; //指向栈顶的位置 this.push = push; this.pop = pop; th ...

  2. CareerCup Questions List 职业杯题目列表

    网站 www.careercup.com 上的题库列表 # Title Difficulty Company 1 Guards in a museum Hard F, G  2 Bomberman H ...

  3. AD19如何单独设置单个焊盘与铜皮的连接方式

    我们用过Altium Designer做设计的人都知道,Altium中有个强大的规则管理器,由于功能太多这里就先不介绍,有需要可以留言,今天的主题是讲解AD19的新功能,快速给单个焊盘设置与铜皮的连接 ...

  4. 移动架构-json解析框架

    JSON在现在数据传输中占据着重要地位,相比于xml,其解析和构成都要简单很多,第三方的解析框架也不胜枚举,这里之所以要自定义一个json解析框架,一方面是更好的了解json解析过程,另一方面是有时候 ...

  5. vue 强制组件重新渲染

    参考链接:https://blog.csdn.net/zyx1303031629/article/details/86656785

  6. JS选中和取消选中checkbox

    document.getElementsByTagName("input")[0].checked = 0;//不选择 document.getElementsByTagName( ...

  7. elasticsearch7.1.1【win】下载安装

    下载:https://www.elastic.co/cn/downloads/elasticsearch 历史版本下载:https://www.elastic.co/cn/downloads/past ...

  8. jenkins相关war包下载

    1.jenkins的war包下载地址 地址:http://mirrors.jenkins-ci.org/,打开链接后,表格有war列,Releases行是短期更新包.LTS是长期更新包.一般选择Rel ...

  9. 什么是SSH 以及常见的ssh 功能

    什么是SSH? 简单说,SSH是一种网络协议,用于计算机之间的加密登录.如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露. ...

  10. Spring Boot系列教程十一: Mybatis使用分页插件PageHelper

    一.前言 上篇博客中介绍了spring boot集成mybatis的方法,基于上篇文章这里主要介绍如何使用分页插件PageHelper.在MyBatis中提供了拦截器接口,我们可以使用PageHelp ...