一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

nginx location 配置方法总结

时间:2014-06-20 编辑:简简单单 来源:一聚教程网

一、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.111com.net /post.php
$host:www.111com.net
$server_port:80
$request_uri:http://www.111com.net /post.php
$document_uri:/post.php
$document_root:/home/web
$request_filename:/home/web/blog/post.php

配置示例:

 代码如下 复制代码

server{
    listen:80;
    server_name:www.111com.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--  http://want.abc.com/abc/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 部分起始路径) 正则表达式根据配置文件中的前后顺序影响匹配, 前面的优先匹配. 其它则根据匹配长度来优先匹配.

热门栏目