Nginx是高效可靠的http中间件,支持海量的并发请求,稳定开源可靠,代理服务
环境调试确认:
1.确认系统网络
2.确认yum可用
3.确认关闭iptables规则
4.确认停用selinux
安装调试确认:
两项安装:
yum -y install gcc gcc-c++ autoconf pcre pcre-devel make automake
yum -y install wget httpd-tools vim
环境的调试确认:一次初始化
创建一些包
cd /opt;mkdir app (代码目录)download (下载的安装包目录)log (日志目录)work(放一些脚本) backup(配置文件目录,备份等)
查看iptables是否存在,我在centos上使用iptables -L查看,用iptables -F关闭
如果还不确认也可以用iptables -t nat -L查看用iptables -t nat -F关闭
用getenforce查看selinux是否是开启的 如果不是Disabled需要输入setenforce 0 来关闭
下面就是安装依赖包和环境了 yum -y install gcc gcc-c++ autoconf pcre pcre-devel make automake
还有一些必须用到的包yum -y install wget httpd-tools vim
安装完成后就是初始化一些项目。cd /opt/ 进入该文件后创建目录 mkdir mkdir app (代码目录)download (下载的安装包目录)log (日志目录)work(放一些脚本) backup(配置文件目录,备份等)
在网站的后台有很多的运用服务对用操作系统来驱动硬件来驱动服务,运用和运用之间调用,运用和操作系统之间调用会提高运用的耦合性和层次化不够隔离,所以就需要一个中间件来代理,来处理业务逻辑有了中间件的加入使运用更加明了,更好的服务,耦合度大大降低,
现在中间件功能更加强大了,加入了负载均衡,缓存的服务,安全防护的功能。
Nginx功能:Io多路复用epoll (上报我已经准备好了,来,不用一直苦苦等待) 很多IO请求变成一个sokert一次访问
专业描述:多个描述符的I/O操作都能在一个线程内并发交替的顺序发生完成,这里的复用指复用一个进程
epoll是多路复用的模型 每当fd就绪,采用系统的回调函数讲fd放入,效率更高
最大连接数无限定,通知信息更为准确,服务效率更高
Nginx是一个轻量级的服务,功能模块少,代码模块少 性能优势高
nginx的cpu亲和(affinity)现在的服务器是多核的(也就是多个cpu)nginx通过线程均匀的分布给cpu,每一个cpu负责一个线程官方解释:是一种把cpu核心和Nginx工作进程绑定方式,把每一个worker进程固定在一个cpu上执行,减少切换cpu的cachemiss,获得更好的性能
Nginx采用sendfile处理静态文件效率高(直接通过内核传输)
安装Nginx,nginx.org进入官网,打开yum下载方式,拷贝里面的源,在vim /etc/yum.repos.d/nginx.repo把源拷贝上去,保存在用yum list | grep nginx查看有没有x86-64的文件,如果有。直接yum install nginx安装
安装完成后就可以还用nginx的标签了,查看nginx -v查看版本,-V查看参数
用yum下载的都是一些rpm文件,用rpm -ql nginx查看那些文件安装了 目录
接下来可以再浏览器中访问你的公网ip,这样就可以看到在、usr/目录下有一个子目录下只有一个index.html文件,会去访问那个文件,在浏览器上可以看到。
在nginx中有很多文件,在nginx中就是靠log_format来吧这些文件以变量的形式配置到access.log中
可以用浏览器(curl)访问一个连接,获取里面的请求,修改nginx.conf文件可以查看需要的东西,当然nginx -t -c /etc/nginx
/nginx.conf -t检查配置文件是否正确 -c表示配置路径前期的配置语法检查
如果出现successful表示成功了
nginx -s reload -c /etc/nginx/nginx.conf 表示从新启动,加载配置
tail -n 200 /var/log/nginx/access.log 可以查看里面的信息,会发现出现了自己配置的信息
'$remote_addr //表示客户端的id- $remote_user //客户的基本信息[$time_local] //请求时间"$request" '//请求信息
'$status //返回的状态$body_bytes_sent//响应大小字节 "$http_referer" '//记录比较多的信息。比如防盗链,上一个页面地址等等
'"$http_user_agent"//请求的头信息什么浏览器 "$http_x_forwarded_for"';//协议的的信息
用tail -n 200 /var/log/nginx/access.log查看上面这些信息
Nginx官方支持的模块:下载的jar包中就有
第三方模块就是没有获得官方支持的模块
Nginx -V查看nginx编译的信息,其中就有官方模块
--with-http_stub_status_module这个模块在安装的时候就编译进去了
nginx处理连接的状态
在nginx-conf的server中的配置文件中家一个路径,Syntax: stub_status//启该功能
sudo pkill -9 nginx 启动 sudo nginx -c /etc/nginx/nginx.conf
Waiting 等待
给浏览者不同的体验
random_index on|off
mv .3.html 在文件名前加.表示隐藏该文件 随机选择文件不会选择隐藏文件
用于响应请求的时候把请求体内容替换一般不用
语法:sub_filter string//被替换的内容 replacement//替换的内容
context:http,server,location
还有一种校验服务器端的数据是否发生过变更一般记录时间,是否有更新
连接频率限制 -limit_conn_module
请求频率限制-limit_req_module
先建立连接(三次握手),后再请求,现在一次建立多次请求 tcp请求也叫建立连接
limit_conn_zone//要对连接限制首先要有空间存储连接状态(开辟空间) key//那个为key就限制哪个,比如客户端ip zone=name:size//为了限制调用定义名字 size申请空间的大小
必须定义在http server之外才有效
limit_conn zone//上面定义的名字 number //表示同一时间可以连接的次数
这个随意都可以添加
limit_req_zone key zone=name:size rate=rat//其他的跟连接一样,多了一个速率
调用,对客户端有限速的效果
limit_req zone=name [burst=number][nodelay]//一般调用前面的就可以了,括号里的不用配置
$binary_remtoe_addr//表示客户端地址
nodelay:表示直接返回503
burst=number代表这个访问多出来的选number留给下一秒访问
可以去尝试使用ab压力测试,ab -n 20 -c 15 http。。。。-n代表每秒的访问数,-c代表并发数
基于ip的访问控制:那些ip可以访问,那些ip不能访问
-http_access_module
allow//允许 address//ip|CLDR//网段|nuix://linux上的访问|all//所有
deny//不允许 address//ip|CLDR//网段|nuix:|all//所有
基于用户的信任登录-http_auth_basic_module
在location 前面加一个~表示模式的匹配
deny xxxxx.xxx.xx.xx
表示这个ip不能访问那个目录下admin.html开头的文件
其他的ip可以全部访问
proxy:代理(nginx)
http_x_forwarded_for=client IP,Proxy(1)IP,Proxy(2)IP.....http_x_forwarded_for要比remote_addr好
http_access_module的局限性解决方法
1.采用别的http信息控制访问,如:http_x_forwarded_for
2.结合geo模块
3.通过http自定义变量传递,一层一层的把客户端的信息传递下去
http_auth_basic_modouble模块
auth_basic string//默认是关闭的,如果加一个字符串表示开启,字符串也会在前端中出现| off
auth_basic_user_file file//文件地址,存储用户名的登录账号密码信息,可以去nginx官网查看它加密信息和使用
centos上如果没有httpd这个工具生成加密文件可以用yum install httpd-tools -y命令下载,用
htpasswd -h查看那些命令,
htpasswd -c ./auth-conf hufangwen//创建一个加密文件auth-conf,用户名为hufangwen,回车设置密码
这是登录模块的限制,在你登录的时候要求你输入账号密码。
http_auth_basic_modouble的缺点:用户信息依赖文件方式,操作管理机械,效率低
解决方案:1.Nginx结合LUA实现高效验证,2.Nginx和企业中的ldap打通,利用nginx-auth-ldap模块