本文主要介绍nginx反向代理的配置,以Windows版本nginx为例,Linux版配置一样,只是安装方式有所区别。
正向代理是一个位于客户端和目标服务器之间的服务器,为了从目标服务器取得内容,客户端向代理发送一个请求并指定目标服务器,然后代理向目标服务器转交请求并将获得的内容返回给客户端。
比如:我们通过VPN(Virtual Private Network)访问谷歌,而直接无法访问谷歌,正向代理隐藏了用户,用户的请求被代理服务器接收代替,到了服务器,服务器并不知道用户是谁。
反向代理(Reverse Proxy)方式是指以代理服务器来接受 Internet 上的连接请求,然后将请求转发给网络上的服务器,并将从服务器上得到的结果返回给 Internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
我们的后端服务由多个微服务组成,比如sys服务在8081端口,acl服务在8082端口,前端请求后端服务时,只需访问nginx的监听地址,便可以根据不同路径代理到不同的端口上。
http {
............
server {
listen 9001;
server_name localhost;
location ~ /sys/ {
proxy_pass http://localhost:8081;
}
location ~ /acl/ {
proxy_pass http://localhost:8082;
}
}
}
修改.env.development 文件,修改为nginx路径
# just a flag
ENV = 'development'
# base api
# VUE_APP_BASE_API = '/dev-api'
# 修改为Nginx路径
VUE_APP_BASE_API = 'http://localhost:9001'
Nginx 提供的负载均衡策略有2种,内置策略和扩展策略。内置策略:轮询、加权轮询与 Ip hash。扩展策略:fair、url_hash 等,首先给大家说下 upstream 这个配置,这个配置是写一组被代理的服务器地址,然后配置负载均衡的算法。
upstream mysvr {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
如果有两台服务器,当一台服务器发生事故时,才启用第二台服务器给提供服务。服务器处理请求的顺序:AAAAAA-当突然A挂掉-BBBBBBBBBBBBBB…
upstream mysvr {
server 127.0.0.1:8080;
server 127.0.0.1:8081 backup; #热备
}
nginx 默认就是轮询其权重都默认为1。服务器处理请求的顺序:ABABABABAB…
upstream mysvr {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
根据配置的权重的大小而分发给不同服务器不同数量的请求。如果不设置,则默认为1。下面服务器的请求顺序为:ABBABBABBABBABB…
upstream mysvr {
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8081 weight=2;
}
客户端请求的 ip 进行 hash 操作,然后根据 hash 结果将同一个客户端 ip 的请求分发给同一台服务器进行处理,可以解决session 不共享的问题。
upstream mysvr {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
ip_hash;
}