nginx的安装环境:
- 确认yum可用
- 确认关闭iptable规则
- iptables -L : 查看
- iptables -F : 关闭
- 确认停用selinux ;
- 安装一些工具软件;
- yum -y install gcc gcc-c++ autoconf pcre pcre-devel make automake;
- yum -y install wget httpd-toools vim
- 新建一些准备的目录
- cd /opt;
- mkdir app download logs work backup ;
- app : 放置我们自己写的代码目录
- download : 放置源码目录
- logs ; 日志文件(两种日志,access.log(记录所有请求的信息) 和error.log (记录搓去的请求信息)日志)
- works : 放置一些shell 的脚本
- backup ; 专门放置备份文件的目录
nginx的优点
- I/O 多路复用: 多个描述符的IO操作,都能在一个线程内并发的交替的完成,有点像AIO的模式,复用是指复用同一个线程;
- IO多路复用的模式:
+ select :就是NIO轮询的模式,缺点: 轮询耗费太多资源,轮询的文件描述符的数量有限制;
+ epoll 模型: 每当FD(文件描述符)就绪之后,就会采用系统的回调函数,调用复用线程来操作;相对于select ,最大链接数量无限制;
- 轻量级,代码模块化
- cpu 亲和 : 工作进程和cpu 核 多对多
- 是一种把 cpu 核心和worker进程绑定的方式,减少了切换cpu的cache miss ,以获得更好的性能
- sendfile 的功效的节省; 零拷贝的使用。
常用的文件的配置目录
- 运行缓存目录
nginx的日志format 中可以输出一些变量
- http变量: ;
- 请求的一些参数 : arg_PARAMETER : 请求的参数,
- request 的请求头 : http_HEADER
- response的回复头: sett_http_HEADER
- http_header
- nginx的内置变量
format 形成的字段的解释:
- remote_addr : 客户端的地址
- remote_user: 客户端请求nginx 认证的用户名,如果没有默认为空;
- request : 代表请求行 get /http1.1
- status : 服务端返回的状态值
- body_bytes_sent: 服务端返回的数据的大小
- http_referer: 请求的上一站地址
- http_user_agent : 从那个浏览器发送过来的
- http_x_forwarded_for:
nginx中各模块的使用:
stub_status 模块
Active connections: 1 //代表活跃的链接数
server accepts handled requests
178 178 1983 依次是 握手的次数 ,链接数,总的请求数
Reading: 0 Writing: 1 Waiting: 0
–with-http_sub_module 模块
http内容替换
sub_filter string replacement ;
可以放置的位置: http server locationsub_filter_last_modified on | off ;(默认是关闭的)
在头信息中有一个last_modified 的字段;作用: 判断服务端的数据是否发生了更新,如果没有更新就不用重复返回数据;sub_filter_once on|off ;
sub_filter_once on 默认;
context: http server location
可以放置的上下文内容;
作用: 是匹配html代码里面的第一个还是所有的字段(要替换的);
nginx还有一个模块可以控制请求的并发链接数和并发请求数;
http_access_module 的局限性: 走过代理服务器时,remote_addr 发生了替换;
解决的方式:
- 采用别的http头信息访问控制,如HTTP_X_FORWARD_FOR
- 结合geo模块;
- 通过HTTP自定义变量进行传递;
nginx中的权限认证模块 auth_basic:
http_auth_basic_module 的局限性
- 用户信息依赖于文件
- 管理差
解决: nginx结合LUA实现高效验证;或者: nginx和LDAP打通 ,利用nginx-auth_ldap模块