Nginx
# 概述
Nginx是一个高性能的HTTP和反向代理web服务器 , 同时也提供了 IMAP/POP3/SMTP 服务
正向代理&反向代理 正向代理要知道访问服务器的地址,反向代理不需要知道访问服务器的真实地址
优点 :
- 反向代理能够将请求进行 负载均衡
- 有多种 均衡策略
官网 : https://nginx.org (opens new window)
中文文档 : https://blog.redis.com.cn/doc/index.html (opens new window)
# 安装
下载 : https://nginx.org/en/download.html
一般下载稳定版即可
# Window
解压后 , cmd根路径 ==start nginx==/==nginx.exe== 指令即可食用
验证 : http://localhost:80
window常用指令
# 启动&退出&关闭&重启 服务
start nginx
nginx -s quit
nginx -s stop
nginx -s reopen
# 帮助
nginx -h
注意 :
- 解压路径中不能包含有中文路径
- Nginx配置是80端口 , 如果加载无效需要更改端口 配置文件 ==/conf/nginx.conf== 看见 ==listen 80;== 更改即可
# Linux
安装
# 安装
yum install epel-release
yum update
yum -y install nginx
# nginx服务 开启/停止/重启
systemctl start nginx
systemctl stop nginx
systemctl restart nginx
配置
- ==/etc/nginx/nginx.conf==文件
- ==/etc/nginx/conf.d/自定义文件.conf==文件 (一般在这里新建应用)
验证 : http://localhost:80
# 配置
Nginx配置中有三个核心功能 :
- 静态服务器
- 反向代理
- 负载均衡
# 全局配置
main
# 工作模式配置
events { }
# http 配置
http {
# 服务器主机配置
server { }
# 路由配置
location { }
# 负载均衡配置
upstream name { }
}
配置文档 :
- http://www.gwznkj.cn
- http://shouce.jb51.net/nginx/left.html
- https://blog.csdn.net/qq_33454884/article/details/89212702
# 主要配置
server {
# 端口
listen 80;
# 域名
server_name localhost 192.168.1.100;
# 代表这是项目根目录
location / {
# 虚拟目录
root /usr/share/nginx/www;
}
}
# 负载均衡配置
通过 upstream
实现多台主机服务
基本用法
http{
upstream myweb {
# 两个服务器
server localhost:8080;
server localhost:8081;
}
server {
listen 80;
# 路由对应
location / {
proxy_pass http://myweb;
}
}
}
需要对应路由才能进行访问后端指定路由
权重
根据权重进行为请求分流 , 以下配置 权重比 3 : 7 的比例进行分流
upstream backend {
server backend1.example.com weight=3;
server backend2.example.com weight=7;
}
备用
当其他主机不可用时才会采用 backend2
upstream backend {
server backend1.example.com;
server backend2.example.com backup;
}
健康
定期健康检查 , 会将不可用会被移出服务器池!
upstream backend {
server backend1.example.com;
server backend2.example.com;
# 健康检查
health_check;
# 健康配置的参数
# 检查时 , 超时时间 , 超时 标记不可用
health_check_timeout 5s;
# 健康时间 间隔
health_check_interval 10s;
# 请求 判断状态 200(如果不是200,标记不可用)
health_check_status 200;
# 请求 判断响应正文 success(如果不是success,标记不可用)
health_check_match "success";
# 标记不可用前 , 条件 : 重检失败 3次
health_check_fails 3;
# 标记可用前 , 条件 : 重检成功 2次
health_check_healthy_threshold 2;
}
# 分配策略
upstream
模块 提供了一下轮询策略 :
轮询
默认的负载均衡策略 , 每台服务器都跑一遍 , 按循序执行
哈希分配
根据 变量 计算出hash值 , 通过hash分配请求 , 保证同一请求同一主机
最少连接
将请求分配给当前连接数最少的服务器 , 请求会分配给最空闲的服务器
公平
根据主机响应时长来动态调整权重 , 使得响应时间较短的服务器获得更多的请求
随机
随机选择一台主机处理请求
哈希策略
自定义对象Hash
upstream backend {
# 计算uri的 hash值
# consistent作用 : 保证服务器 增加/删除 的情况下 , 保证hash值稳定性
hash $request_uri consistent;
server backend1.example.com;
server backend2.example.com;
}
最小连接策略
upstream backend {
# 使用 Least Connections 策略
least_conn;
server backend1.example.com;
server backend2.example.com;
}
公平策略
upstream backend {
# 使用 Fair 策略
fair;
server backend1.example.com;
server backend2.example.com;
}
随机策略
upstream backend {
# 使用 Random 策略
random;
server backend1.example.com;
server backend2.example.com;
}
# Docker应用
利用docker安装nginx实现反向代理
安装镜像
nginx
创建配置文件 (运行docker挂载的配置)
# 创建挂载目录 mkdir -p /home/nginx/conf mkdir -p /home/nginx/log mkdir -p /home/nginx/html
拷贝主要配置到宿主机
# 生成容器 docker run --name nginx -p 9001:80 -d nginx # 将容器nginx.conf文件复制到宿主机 docker cp nginx:/etc/nginx/nginx.conf /home/nginx/conf/nginx.conf # 将容器conf.d文件夹下内容复制到宿主机 docker cp nginx:/etc/nginx/conf.d /home/nginx/conf/conf.d # 将容器中的html文件夹复制到宿主机 docker cp nginx:/usr/share/nginx/html /home/nginx/
运行 Nginx容器
docker run \ -p 9002:80 \ --name nginx \ -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \ -v /home/nginx/conf/conf.d:/etc/nginx/conf.d \ -v /home/nginx/log:/var/log/nginx \ -v /home/nginx/html:/usr/share/nginx/html \ -d nginx:latest
访问 [IP]:9002 即可
命令 | 说明 |
---|---|
-name [名称] | 命名 |
-d | 后台运行 |
-p [宿主端口]:[容器端口] | 端口映射 |
-v [宿主路径]:[容器路径] | 配置文件挂载 |
nginx:latest | 本地运行的版本 |
\ | shell 命令换行 |
# Nginx Proxy Manger
官方 : https://nginxproxymanager.com/
Nginx 的进化 , 简化了Nginx操作 , 图形化UI操作
← TypeScript Sass→