前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Nginx正确配置Location

Nginx正确配置Location

作者头像
创译科技
发布于 2019-08-30 04:07:47
发布于 2019-08-30 04:07:47
1.2K00
代码可运行
举报
文章被收录于专栏:Node开发Node开发
运行总次数:0
代码可运行

之前已经讲过Nginx的基本配置,本篇文章主要对NginxLocation指令的作用进行介绍。本篇文章主要对NginxLocation配置原则进行详细的讲述。Location是根据用户请求的URI来进行不同的定位,定位到不同的处理方式上,匹配成功即进行相关的操作。首先需要先介绍一下Nginxecho模块,它可以配置的Location标签是否正确,是否达到配置的目的。

安装echo模块

echo模块可以在Nginx中用来输出一些信息,是在调试排错过程中一个比较好的工具。安装此模块后可以在Nginxecho命令输出字符到用户的浏览器中,可用于检测Nginx的配置的正确性。

下载Nginx-echo

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd /usr/local/nginx-1.12.2/
wget https://github.com/openresty/echo-nginx-module/archive/v0.60.tar.gz
代码语言:javascript
代码运行次数:0
运行
复制

解压文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tar zxvf v0.60.tar.gz

查看已安装的模块

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
nginx -V

进入Nginx目录下配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd /usr/local/nginx-1.12.2/
./configure --add-module=/usr/local/nginx-1.12.2/echo-nginx-module-0.61 --add-module=/usr/local/nginx-1.12.2/ngx_image_thumb-master

编译安装,如果是升级可以使用make upgrade

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
make && make install

Nginx实际处理请求的模块是ngxhttpcore_module模块, 在处理请求时,变量可以通过访问日志记录下来,也可以用于echo 模块进行输出。我们可以简单看个例子:

输出请求参数

请求结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@VM_0_2_centos ~]# curl www.niyueling.cn/index.html?author=niyueling --header "content-type:text/html;" -H "content-length:200"
query_string: from=jdilong
request_method: GET
content_type: text/html;
content_length: 200
fastcgi_script_name: /index.php
request_uri: /index.php?from=jdilong
document_uri: /index.php
document_root: /application/nginx1.8.1/html
server_protocol: HTTP/1.1
https:
nginx_version: 1.8.1
remote_addr: 192.168.229.196
remote_port: 46786
server_addr: 192.168.229.196
server_port: 80
server_name: www.xyz.com
uri: /index.php

可以看到我们可以通过echo模块将我们请求中的一系列参数提取打印出来。

echo_sleep定时输出

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
location /echo_with_sleep/ {
echo hello;
    echo_flush;  
    echo_sleep   3;
echo world;
}

可以通过echo_sleep设置延迟输出,单位为秒。

异步访问其他url

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
location / {
echo_reset_timer;
 
echo_location_async /sub1/;
echo_location_async /sub2/;
 
echo "took $echo_timer_elapsed sec for total.";
}
location /sub1/ {
echo_sleep 2;
echo hello;
}
location /sub2/ {
echo_sleep 1;
echo world;
}

echo_location_async可以异步访问其他地址,不影响当前函数执行。

上述执行结果$echo_timer_elapsed最终输出值为0。

使用echo有一点需要注意的是,如果echo后边有配置return 或者配置 proxy_pass,则echo的输出会被覆盖,即浏览器无法看到echo的内容。

Location配置

Location的语法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
location [=|~|~*|^~] patt { }

Location类型:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
location = patt {} [精准匹配]
location patt {}     [普通匹配]
location ~ patt {}  [正则匹配]

中括号中为修饰符,可以不写任何参数。此时为一般匹配。

Nginx匹配类型的优先级:

Nginx配置虚拟服务器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
server {
listen address[:PORT]|PORT;
server_name SERVER_NAME;
root DOCUMENT_ROOT;
}

通过listen可以对端口进行监听,有多种设置方案:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
listen 192.168.0.100:8000;  监听192.168.0.1008000端口
listen 192.168.0.100;  监听192.168.0.10080端口
listen 8000;  监听本地8000端口
listen *:8000;  监听本地8000端口
listen localhost:8000;  监听127.0.0.180端口
listen [::]:8000;  监听本地的ipv6的8000端口
listen [::1];  监听本地的ipv6地址的80端口

通过server_name设置虚拟服务器名称,简单一点来说就是我们在浏览器中访问的域名,如果域名需要设置多个则通过空格隔开,支持*通配任意长度的任意字符。简单举个例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
server_name niyueling.cn www.niyueling.cn

Location配置

Location语法规则:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
location [=|~|~*|^~] patt { }

Location命中过程

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
先进行精准匹配,如果命中立即返回结果并结束解析的过程;精准匹配未命中判断普通匹配,如果命中多个会记录下"最长的"命中结果,但不会结束解析;3.继续判断正则匹配,按照正则匹配设置的规则正则表达式进行匹配,如果有多个正则匹配由上到下进行匹配,一旦匹配成功一个会立即返回结果并结束解析.

匹配模式及优先级顺序:

优先级排序自顶向下,优先级逐步降低。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1.location = /uri   =开头表示精确匹配,只有完全匹配上才能生效。
2.location ^~ /uri   ^~ 开头对URL路径进行前缀匹配,并且在正则之前。
3.location ~ pattern  ~开头表示区分大小写的正则匹配。
4.location ~* pattern  ~*开头表示不区分大小写的正则匹配。
5.location /uri     不带任何修饰符,也表示前缀匹配,但是在正则匹配之后。6.location /      通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default

简单举个例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
server {
        listen 80; 
        server_name localhost; 
        location =/text.html 
            root /var/www/html;   
            index text.html;
        }

        location / {
            root html;   
            index default.html;
        }

    location ~ image { 
      root /var/www/image;
      index index.html;
    }
    }

第一个location对应精准匹配,浏览器输入127.0.0.1/text.html,定位到服务器/var/www/html/text.html文件。第二个location对应普通匹配,浏览器输入127.0.0.1,定位到服务器/usr/local/nginx/html/default.html文件。第三个location对应正则匹配,浏览器输入127.0.0.1/image,定位到服务器/var/www/html/text.html文件。

注意:

进行前缀匹配时,会先一直找到最长的前缀匹配,然后看该前缀匹配有没有前置的^~ 修饰符,如果没有^~ 修饰符就接着去查找正则匹配,查找到匹配正则匹配后执行该location。如果最长前缀匹配有^~修饰符则命中该location,不回去匹配其他的正则匹配location;列子如下:

请求 http://localhost/static/files/test.jpg 命中规则C,如果规则B有 ^~修饰符,则会命中规则B:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
location ^~ /static/ {
     echo "规则A";
}
location /static/files {
     echo "规则B";
}
location ~ \.(gif|jpg|png|js|css)$ {
     echo "规则C}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序猿周先森 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Nginx篇--解读nginx配置
之前讲解了Nginx的源码安装与加载到系统服务中去,http://www.cnblogs.com/LHWorldBlog/p/8298226.html 今天详细讲解Nginx中的具体配置。
LhWorld哥陪你聊算法
2018/09/13
1.9K0
Nginx篇--解读nginx配置
Nginx系列教程(6)Nginx location 匹配规则详细解说
Nginx 的 location 实现了对请求的细分处理,有些 URI 返回静态内容,有些分发到后端服务器等,今天来彻底弄懂它的匹配规则
haikangweishi
2020/04/04
1.7K0
Nginx Location 匹配规则
Nginx 的 location 用于匹配 URI 不同路径的请求,实现对请求的细分处理。例如当客户端请求 https://www.nginx-test.com/index.html 时,Nginx 使用本地的静态文件响应,而当客户端请求相同地址的 https://www.nginx-test.com/api 时,Nginx 将请求转发到后端服务器。
Se7en258
2021/07/01
1.5K0
Nginx基于TCP/UDP端口的四层负载均衡(stream模块)配置梳理
通过我们会用Nginx的upstream做基于http/https端口的7层负载均衡,由于Nginx老版本不支持tcp协议,所以基于tcp/udp端口的四层负载均衡一般用LVS或Haproxy来做。至于4层负载均衡和7层负载均衡的区别,可以参考:http://www.cnblogs.com/kevingrace/p/6137881.html。然而Nginx从1.9.0版本开始,新增加了一个stream模块,用来实现四层协议的转发、代理或者负载均衡等,鉴于Nginx在7层负载均衡和web service上的成功,和Nginx良好的框架,stream模块前景一片光明。官方文档:http://nginx.org/en/docs/stream/ngx_stream_core_module.html
洗尽了浮华
2018/09/28
9.1K1
Nginx基于TCP/UDP端口的四层负载均衡(stream模块)配置梳理
Nginx location匹配规则
上述配置,默认访问/会重定向到/my-module, 然后直接返回/data/my-module/dist下的html等静态文件。
Ryan-Miao
2019/06/18
2K0
Nginx如何实现一个域名访问多个项目
最近在个人的多个项目部署中遇到这样一个问题,一个域名如何实现多个项目的访问。因为不想自己单独去申请域名证书和域名配置,便想到了这个方案,结合Nginx的location功能实现了自己的需求,便记录下来。示例中是以PHP的项目演示,其他的语言类似同样的方式进行部署。例如node的项目,可以在location中做一个验证,然后使用porxy_pass反向代理模块实现。
兔云小新LM
2019/12/05
9.1K1
附001.Nginx location语法规则
对请求的url序列化。例如,对%xx等字符进行解码,去除url中多个相连的/,解析url中的.,..等。这一步是匹配的前置工作。
木二
2020/07/22
3.1K0
【NGINX入门】4.Nginx location 匹配规则详细解说[+正则表达式]
Nginx 的 location 实现了对请求的细分处理,有些 URI 返回静态内容,有些分发到后端服务器等,今天来彻底弄懂它的匹配规则。
辉哥
2021/02/04
5.4K0
nginx location配置
编写本文时,使用的nginx版本为nginx/1.17.9和nginx/1.16.1
腾讯IVWEB团队
2020/09/22
3.7K1
实用篇-无处不在的Location
location配置是nginx模块化配置中最出色的一个设计,几乎所有nginx的业务场景都要通过书写多个location配置来顺应业务需要。语法配置和执行规则都相对比较简单,完全可以掌握在脑海之中。
后端技术探索
2018/08/10
5270
深入解析Nginx配置文件
Nginx是一款高性能的HTTP和反向代理服务器,广泛应用于各类Web服务器。作为一名测试工程师,了解Nginx配置文件的细节有助于更好地进行测试和优化服务器性能。本文将详细介绍Nginx配置文件的结构及其主要配置项。
霍格沃兹测试开发Muller老师
2024/06/19
1.8K0
Nginx server_name和location匹配规则
⑥如果所有Host头匹配失败,那么将会转向listen指令标记的default server;
用户4046016
2021/04/19
8.1K0
Nginx配置中location匹配规则详解
Nginx 的语法形式是: location [=|~|~*|^~|@] /uri/ { … } ,意思是可以以“ = ”或“ ~* ”或“ ~ ”或“ ^~ ”或“ @ ”符号为前缀,当然也可以没有前缀(因为 [A] 是表示可选的 A ; A|B 表示 A 和 B 选一个),紧接着是 /uri/ ,再接着是{…} 指令块,整个意思是对于满足这样条件的 /uri/ 适用指令块 {…} 的指令。
星哥玩云
2022/07/28
4.8K0
详解Nginx location 匹配规则
本篇文章主要介绍了Nginx location 匹配规则,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
习惯说一说
2019/05/10
1.9K0
Location规则介绍
location修饰符类型 「=」 修饰符:要求路径完全匹配 server { server_name website.com; location = /abcd { […]
OwenZhang
2021/12/08
7130
了解Nginx
如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家。
java架构师
2019/01/28
6320
了解Nginx
nginx中location的使用
(5)按代码顺序执行正则匹配,当第一条正则 location 命中时,停止 location
全栈程序员站长
2022/07/04
6610
nginx中location的使用
Nginx的location配置规则梳理
Nginx几乎是当下绝大多数公司在用的web应用服务,熟悉Nginx的配置,对于我们日常的运维工作是至关重要的,下面就Nginx的location配置进行梳理: 1)location匹配的是nginx
洗尽了浮华
2018/01/23
2.1K0
Nginx 教程(1):基本概念
英文:netguru,翻译:开源中国 www.oschina.net/translate/nginx-tutorial-basics-concepts 简介 嗨!分享就是关心!所以,我们愿意再跟你分享一点点知识。我们准备了这个划分为三节的《Nginx教程》。如果你对 Nginx 已经有所了解,或者你希望了解更多,这个教程将会对你非常有帮助。 我们会告诉你 Nginx 是如何工作的,其背后的概念有哪些,以及如何优化它以提升应用程序的性能。还会告诉你如何安装,如何启动、运行。 这个教程包括三节: 基础概念——你
企鹅号小编
2018/02/02
8520
Nginx 配置和性能调优
Nginx 有 master 和 worker 两种进程,master 进程用于管理 worker 进程,worker 进程用于 Nginx 服务。
CRMEB商城源码
2022/06/15
1.7K0
相关推荐
Nginx篇--解读nginx配置
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验