FightingBoy 2016-07-11
Nginx的代码是由一个核心和一系列的模块组成, 核心主要用于提供Web Server的基本功能,以及Web和Mail反向代理的功能;还用于启用网络协议,创建必要的运行时环境以及确保不同的模块之间平滑地进行交互。不过,大多跟协议相关的功能和某应用特有的功能都是由nginx的模块实现的。这些功能模块大致可以分为事件模块、阶段性处理器、输出过滤器、变量处理器、协议、upstream和负载均衡几个类别,这些共同组成了nginx的http功能。事件模块主要用于提供OS独立的(不同操作系统的事件机制有所不同)事件通知机制如kqueue或epoll等。协议模块则负责实现nginx通过http、tls/ssl、smtp、pop3以及imap与对应的客户端建立会话。
Nginx的核心模块为Main和Events,此外还包括标准HTTP模块、可选HTTP模块和邮件模块,其还可以支持诸多第三方模块。Main用于配置错误日志、进程及权限等相关的参数,Events用于配置IO模型,如epoll、kqueue、select或poll等,它们是必备模块。
更多Nginx相关教程见以下内容:
Nginx的主配置文件由几个段组成,这个段通常也被称为nginx的上下文,每个段的定义格式如下所示。需要注意的是,其每一个指令都必须使用分号(;)结束,否则为语法错误。
nginx安装完成后,全局块默认只有这几个配置。
nginx 在events只配置此两个选项;
下面介绍 http 块的配置,http块的配置比较多,用法也比较灵活,以下是比较常用的配置。
nginx和httpd虚拟主机使用的实现一样,都有基于端口,IP,域名的虚拟机主机。要为nginx配置虚拟主机,只需在http块中额外定义一个server块。
1,配置基于端口的虚拟主机时,只需修改listen中的端口号。
2,配置基于域名的虚拟主机
3,配置基于IP的虚拟主机
自上而下进行检查,可以在 http, server, location, limit_except 中配置,与httpd中的配置类似。
此配置是为了禁止外人访问特定页面时进行的限制,需要借助于httpd的htpasswd创建密码文件。
此模块为了便于用户下载站的文件等,类似于ftp的功能,本站的ftp依是如此。
防盗链是为了防止别的网站盗用自己网站的图片视频等资源,并给自己网站的服务器造成额外的负担。nginx使用valid_referers 指令进行配置防盗链规则。
(1) 定义合规的引用
none : 检测referer头域不存在的情况
blocked:检测referer头域的值被防火墙或者代理服务器删除或者伪装的情况。这种情况下该头域的值不以http或者https开头。
server_names : 设置一个或多个URL,可以使用统配符 * 。
(2) 拒绝不合规的引用
示例:
rewrite用于实现URI的重写,需要pcre的支持。
1.执行server块的rewrite指令(这里的块指的是server关键字后{}包围的区域,其它xx块类似)
2.执行location匹配
3.执行选定的location中的rewrite指令
如果其中某步URI被重写,则重新循环执行1-3,直到找到真实存在的文件
如果循环超过10次,则返回500 Internal Server Error错误.
请求顺序:http://www.b.org/images/a.jpg –> http://www.b.org/imgs/a.jpg
last: 一旦被当前规则匹配并重写后立即停止检查后续的其它rewrite的规则,而后通过重写后的规则重新发起请求;
break: 一旦被当前规则匹配并重写后立即停止后续的其它rewrite的规则,而后继续由nginx进行后续操作;
redirect: 返回302临时重定向;
permanent: 返回301永久重定向;
location /download/ {
rewrite ^(/download/.*)/media/(.*)\..*$ $1/media/$2.mp3 break;
}
此处若为last,则nginx最多循环10次,超出之后会返回500错误;
注意:一般将rewrite写在location中时都使用break标志,或者将rewrite写在if上下文中;
rewrite_log on|off; 是否把重写过程记录在错误日志中;默认为notice级别;默认为off;
return code;用于结束rewrite规则,并且为客户返回状态码;可以使用的状态码有204, 400, 402-406, 500-504等;