nginx常见正则匹配符号
^: 开始符。
$:结束符。
.*: .表示匹配任意字符,*表示匹配n次(n>=0)。
\. :斜杠用来转义,\.匹配 . 这个符号本身。
(值1|值2|值3|值4):或匹配模式,比如(jpg|gif|png|bmp)可以匹配jpg或gif或png或bmp。nginx的几个匹配模式
location = /uri:精确匹配,只有完全相同才能匹配。
location ~ regexPattern :区分大小写的正则匹配。
location ~* regexPattern :不区分大小写的正则匹配。
location ^~ /uri/:前缀匹配,匹配任何以 /uri/ 开头的请求,一旦匹配到就停止继续搜索,它优先于正则匹配。所以任何正则表达式的匹配将不被测试(正则匹配模式的优先级相对低)。
location /uri:不带任何修饰符,也表示前缀匹配,但正则匹配优先于它。
location /:通用匹配,可以匹配任何请求,所以任何未匹配到其它location的请求都会匹配到它。优先级最低。
优先级顺序:(精确匹配 = )>(前缀匹配 ^~)>(正则匹配 ~或~*,以文件配置顺序为准) > (不带任何修饰的前缀匹配) >(通用匹配)不同匹配模式下的匹配示例
【=】:要求路径完全匹配。
server {
server_name website.com;
location = /abcd {
[…]
}
}
http://website.com/abcd:匹配。 http://website.com/ABCD:可能会匹配 ,也可以不匹配,取决于操作系统的文件系统是否大小写敏感(case-sensitive)。比如Mac 默认是大小写不敏感的,可以匹配。
http://website.com/abcd?param1¶m2:匹配,自动忽略querystring部分。
http://website.com/abcd/:不匹配,多了一个结尾的/。
http://website.com/abcde:不匹配。【~】:区分大小写的正则匹配。
server {
server_name website.com;
location ~ ^/abcd$ {
[…]
}
}
^/abcd$这个正则表达式表示字符串必须以/开始,以$结束,中间必须是abcd。
http://website.com/abcd:匹配(完全匹配)。 http://website.com/ABCD:不匹配,此时大小写敏感。
http://website.com/abcd?param1¶m2:匹配,自动忽略querystring部分。
http://website.com/abcd/:不匹配,不满足正则表达式。
http://website.com/abcde:不匹配,不满足配正则表达式。【~*】:不区分大小写的正则匹配。
server {
server_name website.com;
location ~* ^/abcd$ {
[…]
}
}
http://website.com/abcd:匹配 (完全匹配)。
http://website.com/ABCD:匹配 ,此时大小写不敏感。
http://website.com/abcd?param1¶m2:匹配,自动忽略querystring部分。 http://website.com/abcd/ :不匹配,不满足正则表达式。
http://website.com/abcde :不匹配,不满足配正则表达式。root和alias区别
location /i/ {
root /data/w3;
}
root模式:请求http://kgc.com/i/top.gif 时,在服务器里面对应的真正的资源是 /data/w3/i/top.gif 。
location /i/ {
alias /data/w3/;
}
alias模式:请求http://kgc.com/i/top.gif 时,在服务器里面对应的真正的资源 /data/w3/top.gif。必须加上最后的斜杠。
简单的说,/i/top.gif是我们请求的部分,root模式下表示以/data/w3为基准位置。alias模式表示/i/top.gif替换为 /data/w3/top.gif。rewrite
作用:实现url重写以及重定向。用于做跳转。
$N:N为一个正整数,表示获取url中正则表达式里第一个正则匹配符的内容。比如对于^/(.*)/(.*)-xxx(.*)$,则$1表示获取第一个(.*)实际的内容。当请求为/a/b-xxx时,$1获取的是a,$2获取的是b。
rewrite break:url重写后,直接使用当前资源,不再执行location里余下的语句,完成本次请求,地址栏url不变。
rewrite last:url重写后,马上发起一个新的请求,再次进入server块,重试location匹配,超过10次匹配不到报500错误,地址栏url不变。
rewrite redirect:返回302临时重定向,地址栏显示重定向后的url,爬虫不会更新url(因为是临时)。
rewrite permanent :返回301永久重定向, 地址栏显示重定向后的url,爬虫更新url。proxy_pass
用于实现反向代理。nginx.conf
user nginx nginx ;
Nginx运行的用户和用户组。worker_processes 8;
nginx进程数,建议设置为等于CPU总核心数或者2倍于CPU。error_log /usr/local/nginx/logs/error.log info;
设置错误日志路径及日志级别( debug | info | notice | warn | error | crit)。pid /var/run/nginx.pid;
指定进程pid文件位置。worker_rlimit_nofile 65535;
指定进程可以打开的最大文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除。但是nginx分配请求并不均匀,所以建议与ulimit -n的值保持一致。
(文件描述符是一个简单的整数,用以标明每一个被进程所打开的文件和socket)nginx文件结构
... #全局块(和events块同级)events { #events块
# 设置事件驱动模型
use epoll;# 高性能网络I/O模型,linux建议epoll
...
}http #http块
{
... #http全局块
server #server块
{
... #server全局块
location [PATTERN] #location块
{
...
}
location [PATTERN]
{
...
}
}
server
{
...
}
... #http全局块
}
全局块:配置影响nginx全局的指令。包含运行nginx服务器的用户组,nginx进程,pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。简单的说,就是一些全局定义。
events块:配置影响nginx服务器或与用户的网络连接。包含每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,是否开启多个网络连接序列化等。
http块:可以嵌套多个server块,配置代理、缓存、日志定义等绝大多数功能以及第三方模块的配置。
server块:虚拟主机的配置。
location块:决定客户端发过来的请求URI如何处理,是映射到本地文件还是转发出去,以及被哪个location匹配处理。