nginx时一款开源的中间件服务软件,阿里自建的也是根据nginx1.6版本来改造的P-Nginx的,已经开源了。Apache的HttpD功能更多。
nginx的优点
选用nginx的原因
IO多路复用epoll
一个socket服用给多个io流,IO流需要获取文件描述符,然后发出系统通知,多个描述符在一个进程内交替完成操作,就是IO复用。
在2.6内核之后,出现了替代select模型的epoll模型,无最大连接数的限制。
轻量级
- 功能模块少,只包括http相关模块
- 代码模块少
CPU亲和(affinity)
为什么需要CPU亲和呢,nginx有多个worker进程,把core和worker进程固定在一个CPU上,减少切换CPU的cache miss,获得更好的性能。
sendfile
零拷贝,对CDN有好处
安装
mainLine、stableVersion、 LegacyVersion
安装目录
|
|
编译
安装编译参数
|
|
nginx.conf 配置语法
|
|
日志
主要有
- error.log,错误
- access_log
通过log_format配置日志
|
|
Nginx变量
http请求变量:arg_PAARAMETER
- http_HEADER
- sent_http_HEADER
内置变量:nginx内置的
自定义变量:自己定义,nginx+Lua
模块
nginx -V 里面的–with
官方模块
下载到的模块
sub_module
|
|
请求限制
链接频率限制:limit_conn_module
请求频率限制:limit_req_module
多次请求可以建立在一个连接上。
访问控制
基于IP的访问控制http_access_module
基于用户的信任登录http_auth_basic_module
|
|
这种方式的局限性:
http_access_module的局限性:中间可能经历了多层的LSB,CDN,Nginx
http_x_forwarded_for:
http_x_forwarded_for=Client IP, Proxy(1) IP, … …
解决方案:
- 采用别的Http头信息控制,比如HTTP_X_FORWARD_FOR
- 采用GEO
- 使用HTTP自定义变量
认证模块http_auth_basic_module
基本认证模块的访问控制
局限性
- 用户信息依赖文件方式
- 操作机械,效率低下
解决方案
- 可以通过nginx+Lua解决
- nginx和LDAP方式打通,利用nginx-auth-ldap模块