nginx 配置解析

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&param2:匹配,自动忽略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&param2:匹配,自动忽略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&param2:匹配,自动忽略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匹配处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值