Nginx
一、 引言.
为什么要学习Nginx:
- 客户端需要将请求发送到哪台服务器?
- 客户端如果将请求都发送到一台服务器上,集群部署没有意义。
- 客户端请求的动态资源和静态资源是否可以分开。
- 反向代理服务器,接收客户端请求,根据一定的策略转发到指定的服务器上。
- 实现客户端请求的负载均衡。
- 实现请求的动静分离,更快速的给客户端响应。
- Nginx的并发能力极强。
二、安装Nginx
2.1 简单的安装Nginx
version: "3.1"
services:
nginx:
restart: always
image: 10.0.134.175:5000/nginx:1.13.5-alpine
container_name: nginx
ports:
- 80:80
2.2 查看Nginx的配置文件
- 全局块:worker_processes指定Nginx的并发能力,一般CPU内核数。
- events块:worker_connections指定Nginx的并发能力,10000左右。
- http块:
- 引入了大量的媒体类型。
- 引入了conf.d目录下*.conf文件。
- server块:
- listen 端口号;
- server_name 映射的ip;
- location块:
- root 指定本地的路径;
- index 首页;
- proxy_pass 指定请求转发到哪个服务器上;
2.3 在yml文件中,添加数据卷映射*.conf文件
version: "3.1"
services:
nginx:
restart: always
image: 10.0.134.175:5000/nginx:1.13.5-alpine
container_name: nginx
ports:
- 80:80
volumes:
- ./conf:/etc/nginx/conf.d
三、 Nginx的反向代理
3.1 正向代理
在客户端配置代理服务器,客户端将请求发送到代理服务器,并指定代理服务器将请求发送给指定的服务器,可以隐藏客户端信息,提升访问速度。
3.2 反向代理
在服务器端配置的代理服务器,接口全部客户端的请求,根据代理服务器内部的策略,将请求转发到指定的其他服务器上,可以隐藏服务器端的信息。
3.3 配置反向代理
准备目标服务器,保证目标服务器直接访问没有问题。
准备Nginx反向代理服务器,配置Nginx的配置文件
location / { proxy_pass http://ip:port/; }
- 客户端发送请求到反向代理服务器,最终呈现出目标服务器的内容。
3.4 location映射请求路径
location = 路径:精准匹配,优先级最高。
location ^~ 路径:正常匹配,如果匹配上^~不会再向下检索其他映射方式。
location ~ 正则表达式:正则匹配,即便匹配上了, 还会继续向下检索其他匹配方式,找到匹配长度最长的路径。
location ~* 正则表达式:忽略大小写的正则,和上述匹配方式一致。
location 路径:正常匹配,匹配上后,还会继续向下检索其他匹配方式。
location /:匹配全部路径,优先级最低。
四、Nginx的负载均衡
Nginx自带的三种负载均衡策略
- 轮询:依次将客户端请求分发不同服务器。
- 权重:根据权重值的比例,将请求分发不同服务器。
- ip_hash:根据客户端ip地址不同,将请求分发到指定的服务器中。
4.2 实现方式
通过upstream的代码块,将全部集群的节点维护起来:
upstream 集群名称{ server ip:port; server ip:port; server ip:port; server ip:port; ... } server{ listen 80; server_name localhost; location / { proxy_pass http://集群名称/; } }
默认就是轮询的方式。
权重只需要在upstream代码块中指定每个server的weight属性即可:
upstream 集群名称{ server ip:port weight=100; server ip:port weight=200; server ip:port weight=500; server ip:port weight=100; ... }
- ip_hash方式: - ```sh upstream 集群名称{ ip_hash; ... }
五、 Nginx的动静分离
5.1 动静分离
为了提升Nginx的并发能力:
- 动态资源请求需要4个链接数。
- 静态资源请求需要2个链接数。
5.2 动静分离实现
- Nginx并发能力公式:
worker_processes * worker_connections / 4:动态资源
worker_processes * worker_connections / 2:静态资源
动态资源实现:
location / { proxy_pass 动态资源路径; }
- 静态资源实现:
location / {
root nginx服务器所在的磁盘路径;
index 指定默认访问的文件;
autoindex on; # 展示当前目录下的全部资源信息
}
六、 Nginx的集群(了解概念就行)
Nginx集群需要使用Keepalived软件来检测Nginx的健康情况,多个Nginx之间的Keepalived是需要通讯的,为客户端提供一个统一的入口,需要使用haproxy实现代理。
搭建Nginx集群,需要在每台Nginx所在服务上,安装Keepalived服务,来监听Nginx的健康情况,Keepalived之间会相互通讯,Master的Nginx宕机了,BackUp的Nginx就可以上位了。
具体配置仅供参考
- Dockerfile:下载Nginx镜像,并且安装上keepalived软件,在启动容器的同时,启动keepalived和nginx。
- entrypoint.sh:同时启动keepalived和Nginx的脚本文件。
- keepalived-master.conf:同时指定了一个虚拟路径172.20.128.50。
- keepalived-slave.conf:同时指定了一个虚拟路径172.20.128.50。
- docker-compose.yml:
- master-nginx:指定了Dockerfile文件,映射数据卷,固定ip。
- slave-nginx:指定了Dockerfile文件,映射数据卷,固定ip。
- haproxy:映射了80端口,数据卷映射了haproxy.cfg配置文件。
- haproxy.cfg:Haproxy映射了172.20.128.50:80端口。