反向代理
客户知道代理服务器,但不知道实际服务器,因此客户对于实际服务器的变动是无感知的
负载均衡的模式
- 轮询
- 权重
- hash $request_uri
- ip_hash(用于解决session集群共享的问题,现在一般用redis来解决)
- least_conn 最少连接数法
linux下手动安装nginx
- nginx安装包下载地址
- 放到根目录下进行解压 tar -zxvf xxxx.tar.gz
- 进入nginx目录,执行./configure
- 执行make
- 执行make install
docker安装nginx
nginx命令
- ./nginx 启动
- ./nginx -s stop 暂停,直接关闭worker子进程
- ./nginx -s quit 安全退出,等待worker子进程执行完成再退出
- ./nginx -s reload 重启
- ./nginx -t 检查
- ps -ef | grep nginx 查看nginx进程
- ps aux | grep nginx 查看nginx进程
场景1:虚拟主机
多ip
多端口
多域名
虚拟主机主要有三种形式:多ip、多端口、多域名
server {
# 1.多ip,listen不同网卡的ip,端口可相同
listen 8000;
server_name 127.0.0.1;
listen 8000;
server_name 127.0.0.2;
# 2.多端口,listen不同的端口,本地内网一般用这个
listen 8001;
server_name localhost;
listen 8002;
server_name localhost;
# 3.多域名,listen不同的域名,端口可相同,公网一般用这个
listen 8003;
server_name www.test1.com;
listen 8003;
server_name www.test2.com;
}
一个server就是一个虚拟主机,不需要后端端口启动,需要到/etc/hosts中配置域名解析,如果其他服务器要访问,也需要到其他服务器的/etc/hosts中配置本机ip地址的域名解析
http {
# 多域名方式: 端口相同,域名不同
server {
listen 8005;
server_name www.test1.com;
location /1 {
return 200 "user 1 host: $host";
}
}
server {
listen 8005;
server_name www.test2.com;
location /1 {
return 200 "use 2 host: $host";
}
}
}
场景2:静态站点
场景3:反向代理
七层反向代理
四层反向代理
场景4:负载均衡
轮循
权重
hash $request_uri
ip_hash
least_conn 最少连接
场景5:https加密传输
场景6:文件服务器
场景7:限速(限制响应速度) limit_rate
场景8:限流
场景9:黑白名单(限制特定的IP或网段) allow deny
场景10:请求拦截,先拦截判断是否放行,比如鉴权
场景11:合并请求
nginx.conf 配置文件
- 前提:
- 本地有一个接口/test
- 现有同一服务启动了4个端口8080/8081/8082/8083
- 目标:
- 使用/v1/test,访问8080/8081,并侧重于8080,实现接口/test的调用
- 使用/v2/test,访问8082/8083,并侧重于8082,实现接口/test的调用
- 用到的配置代码
- location /v1 location /v2
- rewrite
- proxy_pass
- upstream & weight 负载均衡 & 权重
- 配置如下
#user nobody;
# 解决通过nginx访问服务器静态资源时产生的403forbidden(Permission denied)
# 只配置user root; 会解析为user root root; -> 表示root所在组为root。
# 此时在nginx -t时会失败。
# 通过id root查询80端口对应的组(即admin),回到nginx.conf修改为 user root admin;
user root admin;
场景2: 静态站点
可以把vue打包后的目录,放到nginx的html系统目录下,由nginx解析就可以了
server {
listen 80;
server_name localhost;
location / {
root /opt/nginx/html;
index index.html index.htm;
}
}
场景3: 反向代理
- 七层反向代理
server {
listen 80;
server_name localhost;
location / {
proxy_pass https://www.baidu.com;
}
}
- 四层反向代理
Nginx除了可以代理HTTP七层流量,还可以代理TCP/UDP四层流量,核心模块strean需要在编译配置时增加"-with- stream"参数进行编译(rpm包已包含)。 配置文件如下(需写在main段中,与http同级)
# 四层反向代理
stream {
server {
listen 33333;
server_name www.test1.com;
proxy_pass 127.0.0.1:8080;
}
}
问题
- 没有stream模块,需要下载stream模块
- 下载stream模块需要使用yum, 没有yum
- yum安装时 sudo apt install yum,导致apt报错
Unable to locate an executable at "/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/bin/apt" (-1) - nginx无法从http转发给https,好像可以安装一个
yum install -y openssl openssl-devel解决这个问题
场景4: 负载均衡
upstream 轮询 权重 hash(语句hash $request_uri;) ip_hash(语句ip_hash; 可以解决session共享的问题) 最少连接数算法(least_conn; 极端情况下会沦落为轮循算法)
nginx实现防盗链
- 浏览器的referer,白名单域名