nginx及常用部署方式与性能优化
nginx做反向代理服务器
nginx配置:
upstream backend_server{
server 123.34.34.34 weight=1
server 123.34.34.35 weight=1
}
server{
location / {
proxy_pass http://backend_server;
proxy_set_header Host $http_hosti:$http_host:$proxy_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarder-For $~~~~~~~~~~
proxy_http_version 1.1; -- 长连接
proxy_set_header Connection "";-- 长连接
}
}
H5 -》 nginx -》 多个服务器 -》
nginx和服务之间默认是短连接,怎么样修改成长连接:
proxy_http_version 1.1
netstat -an |grep IP |wc -l 查看连接数
高性能原因
一、epoll
- java BIO 阻塞式进程模型
- client和server 通过socket连接;网络发送慢 client就写不了了。
linux select模型 多路复用 - server 监听100个客户端连接是否有变化,有变化就唤醒自己,循环遍历100个链接,找到发生变化的,read操作
- 好处是read和write立马能返回
- 轮询太复杂
- epoll模型
- server监听
- 记录监听的回调函数
- 不用轮训
nginx就用epoll模型
二、master-worker 进程
ps -ef |grep nginx
能看到父子进程
master是管理的
worker是实际处理客户端的进程
master启动epoll模型
工作方式:
- 启动master
- 在master创建scoket的文件句柄
- scoke tlisten在80端口
- master启动epoll多路复用
- client收到tcpIp握手时的connect
- epoll收到了
- master让worker去处理
三、协程机制
golong就是基于协程的。
一个线程可以有多个协程。
没有cpu的切换,就切换内存。
不需要加锁。