前文
nginx 作为web服务器被广泛的使用,凭借 跨平台、配置简单、支持高并发, 内存消耗小、成本低廉等特点被大量企业公司使用
nginx
特点
跨平台、配置简单,事件驱动 异步非阻塞、高并发连接、内存消耗小、成本低廉。
1、正向代理
服务端不清楚 哪个客户端请求 nginx作为代理方,把不同url请求 连接到同一服务端
2、反向代理
客户端 不清楚请求发送到哪个服务端,nginx同样作为代理方,转发请求,保障应用服务器的安全(增加一层代理,可以屏蔽危险攻击,更方便的控制权限)
server {
listen 8080;
server_name localhost;
location / {
root html; # Nginx默认值
index index.html index.htm;
}
# 加一层 请求转发
proxy_pass http://localhost:8000; # 反向代理配置,请求会被转发到8000端口
}
http 模块下,每一个server 作为一个服务端; listen 监听端口,server_name 对应请求host字段
3、资源分离
静态资源 nginx 根据请求前缀跳转不同文件目录下的静态文件
动态资源 请求转发到tomcat 应用服务器
好处:给应用服务器减轻压力,将后台api接口服务化,还能将前后端代码分开并行开发和部署
4、负载均衡
分摊服务器集群压力;保证客户端访问的稳定性;负载均衡可以解决分摊服务器集群压力的问题。除此之外,Nginx还带有健康检查(服务器心跳检查)功能,会定期轮询向集群里的所有服务器发送健康检查请求,来检查集群中是否有服务器处于异常状态。
# 负载均衡:设置domain
upstream domain {
server localhost:8000;
server localhost:8001;
}
5、配置限流
正常限流(漏桶算法)
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;
server {
location /login/ {
limit_req zone=mylimit;
proxy_pass http://my_upstream;
}
}
Key - 定义应用限制的请求特性。示例中的Nginx变量remote_addr,占用更少的空间)
Zone - 定义用于存储每个IP地址状态以及被限制请求URL访问频率的共享内存区域。保存在内存共享区域的信息,意味着可以在Nginx的worker进程之间共享。定义分为两个部分:通过zone=keyword标识区域的名字,以及冒号后面跟区域大小。16000个IP地址的状态信息,大约需要1MB,所以示例中区域可以存储160000个IP地址。
Rate - 定义最大请求速率。在示例中,速率不能超过每秒10个请求。Nginx实际上以毫秒的粒度来跟踪请求,所以速率限制相当于每100毫秒1个请求。因为不允许”突发情况”(见下一章节),这意味着在前一个请求100毫秒内到达的请求将被拒绝。
扩展 nginx 怎么支持高并发
多进程单线程: 多少个cpu配置多少个worker进程,减少上下文切换
事件驱动模型:异步非阻塞执行请求,不阻塞等待请求返回,而是设置了事件回调,当请求处理完成后,调用work进程返回