1 nginx概念
轻量级的Web服务器、反向代理服务器,内存占用少,启动快,高并发能力强
2 正向代理和反向代理
2.1 正向代理
- 在客户端配置VPN的地址和端口,实现访问google服务
- 用户知道的主动的一种代理行为
- 正向代理代理的是客户端
2.2 反向代理
- 通过公网访问内网时,不能直接访问内网地址,我们会访问一个公网地址,即代理服务器地址,在代理服务器中配置到内网的代理
- 用户不知道内网地址,不知道最终访问的服务器
- 反向代理代理的是服务器
3 master和worker
- master进程:读取并验证配置文件nginx.conf;管理worker进程
- worker进程:每一个worker进程都维护一个线程(避免线程切换),一般与CPU个数有关
4 nginx热部署
热部署两种方案,修改配置文件nginx.conf后
- master推送给worker更新配置信息,worker收到后进行更新
- 重新生成新的worker,以新的配置处理新的请求,老worker处理完毕后kill即可
nginx采用的是第二种方式
5 nginx如何实现高并发下的高效处理
采用了Linux的epoll模型,epoll模型基于事件驱动机制,它可以监控多个事件是否准备完毕,如果OK,那么放入epoll队列中,这个过程是异步的。worker只需要从epoll队列循环处理即可
6 nginx挂了怎么办
Keepalived+Nginx实现高可用
- 请求不要直接打到Nginx上,应该先通过Keepalived(这就是所谓虚拟IP,VIP)
- Keepalived应该能监控Nginx的生命状态(提供一个用户自定义的脚本,定期检查Nginx进程状态,进行权重变化,,从而实现Nginx故障切换)
7 nginx.conf
- location:~ 代表自己输入的英文字母
| 匹配符 | 匹配规则 | 优先级 |
|---|---|---|
| = | 精确匹配 | 1 |
| ^~ | 以某个字符串开头 | 2 |
| ~ | 区分大小写的正则匹配 | 3 |
| ~ * | 不区分大小写的正则匹配 | 4 |
| !~ | 区分大小写不匹配的正则 | 5 |
| !~* | 不区分大小写不匹配的正则 | 6 |
| / | 通用匹配,任何请求都会匹配到 | 7 |
- nginx能够提高速度的原因就有动静分离,静态资源放到nginx上,动态资源请求后台
- nginx可以进行ip访问控制,也就是说可以增加黑名单
8 反向代理(proxy_pass)
- location这一段配置中的root替换成proxy_pass
- 比如说request -> Nginx -> Tomcat,那么对于Tomcat而言,请求的IP地址就是Nginx的地址,而非真实的request地址,这一点需要注意。不过好在Nginx不仅仅可以反向代理请求,还可以由用户自定义设置HTTP HEADER
9 负载均衡(upstream)
- 通过upstream来定义一组Tomcat,并指定负载策略(IPHASH、加权论调、最少连接),健康检查策略(Nginx可以监控这一组Tomcat的状态)
- 将proxy_pass替换成upstream指定的值
- 用户状态的保存问题,如Session会话信息,不能在保存到服务器上
10 linux安装nginx
yum -y install gcc
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
wget -c <https://nginx.org/download/nginx-1.18.0.tar.gz>
tar -zxvf nginx-1.18.0.tar.gz
cd nginx-1.18.0
./configure --prefix=/usr/local/nginx
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module(需要ssl)
make
make install
whereis nginx
启动 /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
重启 /usr/local/nginx/sbin/nginx -s reload
停止 /usr/local/nginx/sbin/nginx -s quit
强行停止 /usr/local/nginx/sbin/nginx -s stop