其实现在类似于Nginx的中间件还有微软的IIS、httpd和GWS,为什么现在都在使用Nginx呢?
一、IO的多路复用epoll
什么是epoll?
多路I/O操作都能在一个线程内并发交替的顺序完成, 这就是I/O多路复用, 这里的复用是指同一个线程。
IO多路复用的实现方式select 、poll、epoll
2. select的缺点
1)有连接限制 1024
4. epoll模型
1) 每当FD就绪时候, 采用系统的回调函数之间将fd放图,效率更高
2)没有最大连接数量限制
二、轻量级
三、CPU亲和(affininty)
1.为什么需要CPU亲和:
减少CPU切换的损耗, 把CPU核心和Nginx工作进程绑定的方式, 把每个worker进程固定在一个cpu上进行, 减少切换cpu的cache miss, 获取更好的性能
四、sendfile
安装yum工具: yum -y install gcc gcc-c++ antoconf pcre pcre-devel make automake
yum -y install wget httpd-tools vim
添加nginx的yum源:
vim /etc/yum.repos.d/nginx,repo
http://nginx.org/en/linux_packages.html#RHEL-CentOS
yum -y install nginx
安装目录:
/ect/logratate.d/nginx 属于配置文件 #服务日志的切割
/etc/nginx/nginx.conf 配置文件 #主要配置文件
/etc/nginx/conf.d/default.conf 配置文件 #默认配置文件
配置文件 cgi配置相关, fastcgi 配置:
/etc/nginx/fastcgi_params
/etc/nginx/uwsgi_params
/etc/nginx/scgi__params
/etc/nginx/mime.types 设置http协议的Content-Type扩展名对应的关系
/usr/lib64/nginx/modules #nginx的模块
/usr/nginx/modules #nginx的模块
/var/cache/nginx 属于目录类型 #Nginx的缓存目录
/var/log/nginx 属于目录类型 #Nginx的日志目录
安装编译文件:
nginx的临时信息:
设定nginx的进程启动的用户和用户组
–user=nginx
–group=nginx
worker_connections : 最大连接为65355 一般是10000左右
use :
配置语法:
Syntax: sub_status
Default:–
Context: server, location 配置的位置
配置完成后验证: nginx -tc /etc/nginx/nginx.conf
配置完成后重新加载配置信息: nginx -s reload -c /etc/nginx/nginx.conf
配置语法:
Syntax: random_index on|off
Default: random_index off
Context: location 配置的位置
注意: 随机选择的时候不会选择隐藏的文件
Syntax: sub_filter string(被替换内容) replacement(替换内容)
Default: –
Context: http,server, location 配置的位置
Syntax: sub_filter_last_modified on|off
Default: sub_filter_last_modified off
Context: http,server, location 配置的位置
Syntax: sub_filter_once on|off 是不是匹配第一个字符串
Default: sub_filter_once off
Context: http,server, location 配置的位置
类型 : error.log access.log
日志的配置方法:
1、通过log_format进行语法格式配置, 这个属于nginx特有的日志格式, 教程入口: https://www.cnblogs.com/kaishirenshi/p/10551942.html
nginx内置变量 :
其中main代表的变量, 一个语法格式的变量
2.语法格式检查
nginx -t -c confPath
3.重新加载配置
nginx -s reload -c confPath
连接频率限制 - limit_conn_module
Syntax: limit_conn_zone key zone=name:size; 申请空间的大小
Default: –
Context: http 配置的位置
请求频率限制 - limit_req_module
Syntax: limit_conn zone number; 并发的限制
Default: –
Context: http,server, location 配置的位置
Syntax: limit_req_zone key zone=name:size rate=rate; 申请空间的大小
Default: –
Context: http 配置的位置
Syntax: limit_req zone=name [burst=number] [nodelay]; 并发的限制
Default: –
Context: http,server, location 配置的位置
示例:
基于IP的 http_access_module
Syntax: allow address | CIDR |unix:|all; 申请空间的大小
Default: –
Context: http ,server, location, limit_except 配置的位置
Syntax: allow address | CIDR |unix:|all; 申请空间的大小
Default: –
Context: http ,server, location, limit_except 配置的位置
http_access_module的局限性:
缺陷 : 通过代理的方式会无法进行限制
解决办法:
方法一、http_x_forwarded_for
在x_forwarded_for中可以看到第一个访问, 这样做访问控制是精准的, Http_x_forwarded_for = Client Ip, Proxy(1) IP
方法二、结合geo模块
方法三、通过Http自定义变量传递
基于用户的信任登陆模块 http_auth_basic_module
效率低下, 一般很少使用,
方法一、Nginx结合LUA实现高效验证
方法二、Nginx和LDAP打通, 利用nginx-auth-ldap模块