1.Nginx基础
1.1 为什么要使用Nginx
- 问题1: 客户端到底要将请求发送给哪台服务器
- 问题2: 如果所有客户端的请求都发送给了服务器1. 服务器集群没起到实际作用
- 问题3: 客户端发送的请求可能是申请动态资源的, 也可能是申请静态资源的

- 我们在客户端和服务器之间可以追加一个Nginx反向代理服务器
- 之后我所有客户端的请求,都可以交给Nginx来处理.
- 我的客户端只需要记住Nginx的ip和端口号
- 以后的客户端的请求,到底是发给了服务器1,2,3...的哪一个,我的客户端不用关注
- Nginx在它这个位置会做一个负载均衡的策略,根据一定的算法来决定你的请求到底发给哪一个服务器
- Nginx可以帮我们实现动静分离,把动态资源交给咱们的服务器处理,静态资源他自己就可以处理,不用经过服务器,效率会更高一些.

1.2 Nginx介绍
- 是由俄罗斯人研发的,应对Rambler的网站,并且2004年发布的第一个版本.
- Nginx的特点
(1)稳定性极强
(2)Nginx提供了非常丰富的配置实例
(3)占用内存小,并发能力强(Tomcat能承受150个并发, Nginx能承受5万以上的并发)
(1)
version: '3.1'
services: // 服务
nginx:
restart: always // 总是启用
image: xx/xx/xx // 地址
container_name: nginx // 容器名
ports: // nginx默认占用的端口
- 80:80
volumes:
-/opt/docker_nginx/conf.d/:/etc/nginx/conf.d
(2)
终端: mkdir docker_nginx
cd docker_nginx
vi docker-compose.yml 将上述(1)中的内容 复制到这个文件中
docker-compose up -d 运行
1.3 Nginx配置文件
(1)
在/etc/nginx/nginx.conf 文件中: (核心配置文件)
worker_processes 1
error_log /var/log/nginx/error.log warn
pid /var/run/nginx.pid
注: 以上统称为全局块
events {
worker_connections 1024
}
注: 以上是events块
http {
include /etc/nginx/mime.types
default_type applition/octet-stream
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
' "$http_user_agent" "$http_x_forwarded_for" '
access_log /var/log/nginx/access.log main
sendfilr on
keepalive_timeout 65
include /etc/nginx/conf.d/*.conf
}
注: 以上是http块
(2) 在/etc/nginx/conf.d/xxx.conf 文件中: (我们主要的配置操作)
server {
listen 80
server_name localhost
location / {
root /usr/share/nginx/html
index index.html index.htm
}
}
2.nginx的反向代理
2.1正向代理:
- 正向代理的服务器是由客户端设立的.
- 客户端了解代理服务器和目标服务器都是谁.
- 帮助咱们实现突破访问权限,提高访问的速度,对目标服务器隐藏客户端的ip地址

2.2 反向代理
- 反向代理服务器 是配置在服务端的.
- 客户端是不知道访问的到底是哪一台服务器的.
- 达到负载均衡,并且可以隐藏服务器真正的ip地址

http块下的
server {
listen 80
server_name localhost
location / {
proxy_pass: http://192.168.199.109:8080/
}
}
2.3 关于Nginx的location路径映射
优先级: = 最高 > 完整路径 > 匹配开头^~ > 正则~ 和 结尾匹配~* > 通用匹配/xxx > 通用匹配 /
1. = 等号匹配
location = /{ 只会匹配斜杠, 斜杠后边有内容的话,不会匹配到
}
2. 通用匹配
location /{ 会匹配带有斜杠的,任意以斜杠开头的都能匹配
}
location /newly-apaas-user {
proxy_pass: 192.168.10.100:9898
}
location /rtmp-serve {
proxy_pass: 192.168.9.120:2020 //反向代理到你想访问的 IP地址 或者 域名
}
3.正则匹配
location ~/xxx { 匹配所有以/xxx开头的路径
}
4.匹配开头的路径
location ^~ /xxx{ 匹配所有以/xxx开头的路径
}
5.匹配结尾的路径
location ~* \.(gif|jpg|png)${ 匹配所有以.gif .jpg .png 为结尾的路径
}
3.负载均衡
3.1 介绍 (Nginx为我们提供了三种负载均衡的策略)
- 轮询:将客户端发起的请求,平均的分配给每一台服务器
- 权重:会将客户端的请求根据服务器的权重值的不同,分配不同的数量
- ip_hash:基于发起请求的客户端的IP地址的不同,他始终会将请求发送到指定的服务器上.
3.2 负载均衡配置过程
upstream来声明变量, upstream块是与server块 并列的
(1) 轮询
upstream my-server { // 自己声明的变量一定不要加下划线
server 192.xxx.xx.xx:8080
server 192.xxx.xx.xx:8081
server 192.xxx.xx.xx:8082
server 192.xxx.xx.xx:8083
}
location / {
proxy_pass http://my-server/
}
(2) 权重
upstream my-server { // 自己声明的变量一定不要加下划线
server 192.xxx.xx.xx:8080 weight=10
server 192.xxx.xx.xx:8081 weight=15
server 192.xxx.xx.xx:8082 weight=5
server 192.xxx.xx.xx:8083 weight=3
}
location / {
proxy_pass http://my-server/
}
(3) ip哈希
upstream my-server { // 自己声明的变量一定不要加下划线
ip_hash
server 192.xxx.xx.xx:8080
server 192.xxx.xx.xx:8081
server 192.xxx.xx.xx:8082
server 192.xxx.xx.xx:8083
}
location / {
proxy_pass http://my-server/
}
4. Nginx动静分离
- Nginx并发能力: worker_processes * worker_connections/4或2 最终得到并发能力
- Nginx通过动静分离,来提升Nginx的并发能力,更快的用户响应
4.1 动态资源代理
location / {
proxy_pass 路径:
}
4.2 静态资源代理
location / {
root 静态资源路径
index 默认访问路径下的什么资源
autoindex on; 代表展示静态资源全部内容(以列表的形式)
}
- 先修改docker,添加一个数据卷,映射到Nginx服务器的一个目录

5.Nginx集群的搭建
5.1
- 准备多个Nginx
- 在每个Nginx中都添加一个keepalived,来监听当前Nginx是否挂掉
- 准备happroxy,提供一个虚拟的路径,统一去接收用户的请求,来决定用哪个Nginx.


