nginx location 配置方法总结

一、location [=|~|~*|^~|@] /uri/ { ... }

1、~ 为区分大小写匹配
 2、~* 为不区分大小写匹配
 3、!~ 为区分大小写不匹配
4、!~* 为不区分大小写不匹配
 5、= 开头表示精确匹配
6、/ 通用匹配,所有请求都会被匹配到

有多个location配置的情况下,先走 = ,然后是^~,其他的则按书写顺序来依次匹配,最后是通用匹配 / ;

 代码如下 复制代码

nginx不对url进行编码,例如:/20%/ 可以被 / / 匹配到。 示例: 匹配所有请求,因为请求都是以/开头
 location / {
    #rule
}

 仅仅匹配 /
location =/{
    #rule
}
 匹配以.jpg、.png、.gif等结尾的url
location ^~ .(jpg|png|gif)$ {
    #rule
}

匹配过程如下:

第一步:进行字符串匹配,找到最合适的那一个
第二步:进行正则表达式匹配,找到匹配上的第一个
第三步:如果第二步匹配上了,则用第二步匹配的结果,否则用第一步匹配的结果
从上面可以看出来,正则表达式的优先级要高一些

二、rewrite 语法

 last - 基本上都用这个Flag。
break - 中止Rewirte,不在继续匹配
redirect - 返回临时重定向的HTTP状态302
permanent - 返回永久重定向的HTTP状态301
1、下面是判断表达式:
-f 和 !-f 用来判断是否存在文件
-d 和 !-d 用来判断是否存在目录
-e 和 !-e 用来判断是否存在文件或目录
-x 和 !-x 用来判断文件是否可执行

全局变量:

2、下面是可以用作判断的全局变量示例

 代码如下 复制代码

例:http://www.111cn.net /post.php
$host:www.111cn.net
$server_port:80
$request_uri:http://www.111cn.net /post.php
$document_uri:/post.php
$document_root:/home/web
$request_filename:/home/web/blog/post.php

配置示例:

 代码如下 复制代码

server{
    listen:80;
    server_name:www.111cn.net ;
    root /home/web/blog;
    location ~* .(jpg|png|css|js)${
        expires 10h;
        break;
    }
}

例子

 代码如下 复制代码

location = / {
# 只匹配 / 查询。
[ configuration A ]
}
location / {
# 匹配任何查询,因为所有请求都已 / 开头。但是正则表达式规则和长的块规则将被优先和查询匹配。
[ configuration B ]
}

location ^~ /images/ {
# 匹配任何已 /images/ 开头的任何查询并且停止搜索。任何正则表达式将不会被测试。
[ configuration C ]
}

location ~* .(gif|jpg|jpeg)$ {
# 匹配任何已 gif、jpg 或 jpeg 结尾的请求。然而所有 /images/ 目录的请求将使用 Configuration C。
[ configuration D ]
}

实际测试,下面为一个完整的nginx域名配置,使用return来进行区分匹配上哪个location

 代码如下 复制代码

server{
     listen       80;
     server_name  want.abc.com;
     charset gbk;
     access_log  logs/want_access.log  main;
     error_log  logs/want_error.log;

    location  = / { return 100;}
    location  / { return 101;}
    location ~ /images/ { return 102;}
    location ^~ /images/ { return 103;}
    location ~* .(gif|jpg|jpeg)$ {return 105;   }
    location /a {return 106;}
    location ~ /a { return 107; }
}

解释:先进行"="的完全匹配,如果匹配上,则搜索停止
~# wget want.abc.com/           
--2012-01-05 16:09:23--  http://want.abc.com/
正在解析主机 want.abc.com... 127.0.0.1
正在连接 want.abc.com|127.0.0.1|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 100
2012-01-05 16:09:23 错误 100:(没有描述)。

解释:正则表达式没有匹配上,就是用字符串匹配
# wget want.abc.com/document/document.html
--2012-01-05 16:12:03--  http://want.abc.com/document/document.html
正在解析主机 want.abc.com... 127.0.0.1
正在连接 want.abc.com|127.0.0.1|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 101
2012-01-05 16:12:03 错误 101:(没有描述)。

解释:进行字符串匹配,匹配上了,同时有"^~",则停止搜索
#wget want.abc.com/images/a
--2012-01-05 16:12:25--  http://want.abc.com/images/a
正在解析主机 want.abc.com... 127.0.0.1
正在连接 want.abc.com|127.0.0.1|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 103
2012-01-05 16:12:25 错误 103:(没有描述)。

解释:正则表达式匹配上了,停止搜索
# wget want.abc.com/abc/1.gif
--2012-01-05 16:14:23--  yun_qi_img/1.gif
正在解析主机 want.abc.com... 127.0.0.1
正在连接 want.abc.com|127.0.0.1|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 105
2012-01-05 16:14:23 错误 105:(没有描述)。

解释:字符串匹配上了,正则表达式匹配上了,但是优先使用正则表达式匹配
# wget want.abc.com/a
--2012-01-05 16:18:15--  http://want.abc.com/a
正在解析主机 want.abc.com... 127.0.0.1
正在连接 want.abc.com|127.0.0.1|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 107
2012-01-05 16:18:15 错误 107:(没有描述)

例子请求:

 代码如下 复制代码
/ -> configuration A
/documents/document.html -> configuration B
/images/1.gif -> configuration C
/documents/1.jpg -> configuration D

注意:按任意顺序定义这4个配置结果将仍然一样。

(location =) > (location 完整路径 ) >(location ^~ 路径) >(location ~*, ~ 正则) >(location 部分起始路径) 正则表达式根据配置文件中的前后顺序影响匹配, 前面的优先匹配. 其它则根据匹配长度来优先匹配.

时间: 2024-09-19 10:12:18

nginx location 配置方法总结的相关文章

nginx 伪静态配置方法

nginx里使用伪静态是直接在nginx.conf 中写规则的,并不需要像apache要开启写模块(mod_rewrite)才能进行伪静态 nginx只需要打开nginx.conf配置文件,在server里面写需要的规则即可  代码如下 复制代码 server { listen       80; server_name  bbs.o135.cn; index index.html index.htm index.php; root  /home/www/bbs; error_page  404

linux系统中nginx HTTP配置方法

首先安装htpasswd命令. yum install httpd 1.打开站点配置文件 location / {                 auth_basic "Admin Auth";                 auth_basic_user_file /usr/local/nginx/conf/proxy/pwd; .... auth_basic为认证页面提示语,auth_basic_user_file 为密码认证文件 2.新建pwd文件,输入一对密码串 yourn

Symfony2在Nginx下的配置方法图文教程_php实例

本文详细讲述了Symfony2在Nginx下的配置方法.分享给大家供大家参考,具体如下: 网上有很多关于symfony2在nginx下的配置文章,如果是小白,按照网上贴出来的配置文件配置,却怎么也不成功,我经过多次摸索,写下心得: 1. 首先开启Nginx的pathinfo 至于什么是pathinfo,可以参考文章<nginx下支持PATH_INFO的方法实例详解>,自行脑补.很多人按照教程配置的时候,会报500的错误,查报错日志也查不出来,八成就是没有开启pathinfo. 如果你的主机上安

Nginx服务器中location配置的一些基本要点解析_nginx

在这一篇文章里,我将介绍nginx关于location的处理,大家都知道Nginx配置文件里面会有很多的location,nginx的配置指令的作用域可以分为 main,server,location这3个种,实际上这3者不是依次包含的关系,而是相互独立的关系,比如一个只具有main级别作用域的指令,是不能写在某个server或者location内的,模块的某个指令可以同时具有main,server,location这3种作用域,另外每个模块有 main,srv,loc这3个级别的配置,一个模块

Nginx服务器中的location配置详解_nginx

语法location  [=|~|~*|^~] /uri/  {...} 规则= : 表示精确的URI匹配(有兴趣的同学可以看一下url和uri的区别) -: 表示区分大小写的正则匹配 -*:表示不区分大小写的正则匹配 !~ && !~*:表示区分大小写不匹配的正则和不区分大小写的不匹配的正则 /:通用匹配,任何请求都会匹配到 location匹配目标location匹配测试只使用请求URI的部分,而不使用参数部分.(原因:参数的写法太多,无法精确匹配) location匹配顺序多个loc

nginx location语法使用介绍_nginx

nginx location介绍 Nginx 中的 Location 指令 是NginxHttpCoreModule中重要指令.Location 指令,是用来为匹配的 URI 进行配置,URI 即语法中的"/uri/",可以是字符串或正则表达式.但如果要使用正则表达式,则必须指定前缀. nginx location语法 基本语法:location [=|~|~*|^~] /uri/ { - } = 严格匹配.如果这个查询匹配,那么将停止搜索并立即处理此请求. ~ 为区分大小写匹配(可用

自动化Nginx服务器的反向代理的配置方法

  这篇文章主要介绍了自动化Nginx服务器的反向代理的配置方法,反向代理是Nginx服务器的招牌功能,需要的朋友可以参考下 如果可以减少过多的外部隔离的API和简化部署的细节 这会是非常好的. 在以前的文章中,我解释了"一些使用反向代理的好处".在我目前的项目里,我们已经构建分布式面向服务的架构,也显式提供了一个HTTP API,我们使用反向代理将请求路由通过API路由给单个组件.我们选择了Nginx Web这个优秀的服务器作为我们的反向代理,它快速.可靠且易于配置.我们通过它将多个

Nginx服务器中处理AJAX跨域请求的配置方法讲解_nginx

Nginx 实现AJAX跨域请求AJAX从一个域请求另一个域会有跨域的问题.那么如何在nginx上实现ajax跨域请求呢?要在nginx上启用跨域请求,需要添加add_header Access-Control*指令.如下所示: location /{ add_header 'Access-Control-Allow-Origin' 'http://other.subdomain.com'; add_header 'Access-Control-Allow-Credentials' 'true'

Nginx实现网站多机负载均衡配置方法

Nginx的高并发特性就不用多说了,单机静态并发能承受大压力测试,但并不代表在搭载后端的情况下依然保持高并发,因为后端动态处理才是并发瓶颈.nginx作者初衷是为邮件提供多机反向代理,而这特性也正好能用在其他网络服务上,因为这是nginx原生基础服务,比apache等其他服务器需提供外部插件的实现形式显得更快捷高效. 传统负载均衡的方法是在后端服务器前设置一台前端服务器负责总调度,这是最简单的方式,当前端搭载的是nginx负责单点均衡,后端服务可以是任意web服务,譬如apache,tomcat