Nginx反向代理与负载均衡
Nginx命令
# 查看nginx版本
nginx -v
# 检查nginx配置文件语法是否正确
nginx -t
# 指定使用的配置文件
nginx -c file
# 停止
nginx -s stop
# 安全退出
nginx -s quit
# 重新加载配置文件
nginx -s reload
代理nacos集群
upstream nacos-cluster {server 127.0.0.1:8845 weight=1;server 127.0.0.1:8846 weight=2;server 127.0.0.1:8847 weight=3;
}server {listen 80;server_name localhost;location /nacos {proxy_pass http://nacos-cluster;}
}
配置文件
- 全局配置选项
worker_processes
: 指定工作进程的数量,用于处理客户端请求
error_log
: 指定错误日志文件的路径和级别
events
: 设置事件模型,包括使用的事件驱动器和连接数
http
: 指定http相关的配置选项 - http配置选项
server
: 配置虚拟主机,指定监听的IP地址和端口号
location
: 配置请求匹配规则和处理方式
proxy_pass
: 配置反向代理,将请求转发到指定的后端服务器
root
: 指定静态文件的根目录
index
: 指定默认的索引文件
try_files
: 指定查找文件的规则
location指令
精确匹配
: 使用=
前缀,例如location = /about
,只匹配精确路径为/about
的请求。
location = /about { # 处理/about请求的配置
}
前缀匹配
: 默认情况下,location
配置是前缀匹配,例如location /path
,匹配以/path
开头的请求。如果有多个前缀匹配,Nginx会按照配置中的顺序进行匹配,并使用第一个匹配成功的location。
location /static { # 处理以/static开头的请求
}
正则匹配
: 使用~
前缀,例如location ~ \.php$
,匹配以.php
结尾的请求。还可以使用~*
前缀进行不区分大小写的正则匹配。如果有多个正则匹配,Nginx会按照正则表达式的顺序进行匹配,并使用第一个匹配成功的location。
location ~ \.php$ { # 处理以.php结尾的请求
}
最长前缀匹配
: 使用^~
前缀,例如location ^~ /path
,匹配以/path
开头的请求,并停止匹配其他location配置。这可以用于避免正则匹配的复杂性和性能开销,同时确保某些路径具有更高的优先级。
location ^~ /images/ { # 处理以/images/开头的请求,并停止匹配其他location
}
负载均衡规则
轮询
(默认)
upstream nacos {server 127.0.0.1:8845 ;server 127.0.0.1:8846 ;server 127.0.0.1:8847 ;}
weight
weight 代表权重, 默认为 1,权重越高被分配的客户端越多
upstream nacos {server 127.0.0.1:8845 weight=1;server 127.0.0.1:8846 weight=2;server 127.0.0.1:8847 weight=3;}
ip_hash
ip_hash 每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器
upstream nacos {ip_hash;server 127.0.0.1:8845 ;server 127.0.0.1:8846 ;server 127.0.0.1:8847 ;}
fair
fair(第三方),按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream nacos {fair;server 127.0.0.1:8845 ;server 127.0.0.1:8846 ;server 127.0.0.1:8847 ;}
Least Connections
Nginx会选择当前活动连接数最少的后端服务器来处理请求。
http { upstream backend { least_conn; server backend1.example.com; server backend2.example.com; } server { listen 80; location / { proxy_pass http://backend; } }
}
Backup
如果所有非备份服务器都宕机或繁忙,请求将被发送到标记为backup的服务器。
http { upstream backend { server backend1.example.com; server backend2.example.com backup; } server { listen 80; location / { proxy_pass http://backend; } }
}