一:Location 作用

  - location 定位 ,也就是可以通过不同URL进行定位,可以很大的增加它配置的灵活性。

二:相关变量

  • 示例:
    http://192.168.27.27/xxxx
    $request_uri = /xxxx http://baidu.com/icon.png
    $request_uri = /icon.png
    可以配置你的 Nginx 查看具体的 $request_uri 的值
    location /requesturi {
    add_header Content-type 'text/html; charset=utf-8';
    return 200 $request_uri;
    }

三:location的匹配规则

  - 可以看到,匹配路由的话更多是匹配 $request_uri 的路径

  - Nginx 可以在 location 中支持我们如下的匹配规则

    =  开头表示精确匹配

    ^~ 开头,注意这不是一个正则表达式--它的目的是优于正则表达式的匹配。如果该location是最佳匹配,则不再进行正则表达式检测。

    ~  开头表示区分大小写的正则匹配;

    ~* 开头表示不区分大小写的正则匹配

    / 通用匹配, 如果没有其它匹配,任何请求都会匹配到

  - 具体用法

    • 
      
      location = /demo/ {
      在以等号为精确匹配时,$request_uri 必须等于 /demo/ 时才能匹配,不过这也印证了精确匹配这个词汇,准确,分毫不差。
      } location ^~ /demo/ {
        首要要注意的是这不是一个正则表达式的匹配,它的目的是优于正则表达式的匹配,可以匹配到满足'/demo/*'的所有url。
      }
      location ~ \.php$ {
         好吧,这就是一个正则匹配了,上面表示匹配到结尾为 .php 的 url 路径。
      }
      location ~* \.php$ {
         这个看起来和上面那个也没什么区别,有什么不同呢?不同是这个匹配开头不会区分大小写。注意了~!是开头
      }

四:  匹配优先级

  - [精确匹配 =]  >  [全匹配^~]  >  [正则匹配]  >  [进行通用匹配]

  - 在实际应用中的推荐配置

    • 所以实际使用中,个人觉得至少有三个匹配规则定义,如下:
      #直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,官网如是说。
      #这里是直接转发给后端应用服务器了,也可以是一个静态首页
      # 第一个必选规则
      location = / {
      proxy_pass http://tomcat:8080/index
      }
      # 第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项
      # 有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用
      location ^~ /static/ {
      root /webroot/static/;
      }
      location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {
      root /webroot/res/;
      }
      #第三个规则就是通用规则,用来转发动态请求到后端应用服务器
      #非静态文件请求就默认是动态请求,自己根据实际把握
      #毕竟目前的一些框架的流行,带.php,.jsp后缀的情况很少了
      location / {
      proxy_pass http://tomcat:8080/
      }

        

《Nginx - location配置》的更多相关文章

  1. 简单物联网:外网访问内网路由器下树莓派Flask服务器

    最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...

  2. 利用ssh反向代理以及autossh实现从外网连接内网服务器

    前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...

  3. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  4. 外网访问内网SpringBoot

    外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...

  5. 外网访问内网Elasticsearch WEB

    外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...

  6. 怎样从外网访问内网Rails

    外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...

  7. 怎样从外网访问内网Memcached数据库

    外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...

  8. 怎样从外网访问内网CouchDB数据库

    外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...

  9. 怎样从外网访问内网DB2数据库

    外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...

  10. 怎样从外网访问内网OpenLDAP数据库

    外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...

随机推荐

  1. PHP代码审计笔记--代码执行漏洞

    漏洞形成原因:客户端提交的参数,未经任何过滤,传入可以执行代码的函数,造成代码执行漏洞. 常见代码注射函数: 如:eval.preg_replace+/e.assert.call_user_func. ...

  2. 【RF库Collections测试】Set List Value

    Name:Set List ValueSource:Collections <test library>Arguments:[ list_ | index | value ]Sets th ...

  3. Android开发-- Genymotion模拟器

    模拟器安装 http://blog.csdn.net/beiminglei/article/details/13776013 连接ADB http://android3g.diandian.com/p ...

  4. Python 扩展知识

    Python 练习题 Python 编程习惯 Python 转义字符 Python 格式化输出 Python 列表表达式 Python 生成器表达式 Python 序列化 Python2 与 Pyth ...

  5. Unity Shader 设置纹理采样tex2D过滤方式

    双击红色框区域

  6. Myecplise反编译工具安装

    我使用的是Myecplise8.5 下载jad.exe文件jad158g.win.zip:http://varaneckas.com/jad/ 下载jadeclipse插件 net.sf.jadcli ...

  7. [Python] NotImplemented 和 NotImplementedError 区别

    NotImplemented 是一个非异常对象,NotImplementedError 是一个异常对象. >>> NotImplemented NotImplemented > ...

  8. C++ template —— trait与policy类(七)

    第15章 trait与policy类---------------------------------------------------------------------------------- ...

  9. 《C++ Primer Plus》16.4 泛型编程 学习笔记

    STL是一种泛型编程(generic programming).面向对象编程关注的是编成的数据方面,而泛型编程关注的是算法.它们之间的共同点是抽象和创建可重用代码,单他们的理念决然不同.泛型编程旨在编 ...

  10. 使用import取代require

    首先,Module 语法是 JavaScript 模块的标准写法,坚持使用这种写法.使用import取代require. // bad const moduleA = require('moduleA ...