-
反向代理
代理的是服务器,类似于我们访问服务器,由于用户有许多,需要代理去决定客户端访问的是哪一个服务器.从而客户端并不是指定那一台服务器响应,客户端只需要找代理,代理再去决定请求转发给那一台服务器,因此,隐藏了服务器的信息.客户端不知道服务器的真实信息.
-
负载均衡
-
HTTP服务器(动静分离)
可以将静态文件放到本地目录下,动态的交给服务器,实现动静分离
upstream test{
server localhost:8080;
server localhost:8081;
}
server{
listen 80;
server_name local;
location / {
root e:/savePath;
index index.html;
}
location ~\.(gif|jpg|png|bmp|swf|css|js)${
root e:\savePath;
}
}
-
正向代理
代理的是客户端,类似于翻墙,访问服务器的时候,由于某些限制条件,该客户端不能直接访问服务器,这时候就需要一个代理,帮我们访问服务器,客户端将请求发给代理,包括我的请求转发给哪一个服务器.因此,客户端的信息给隐藏,服务器不知道客户端的真实信息.
负载均衡
1). 轮询(默认)RR
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
upstream backserver {
server 192.168.1.62;
server 192.168.1.64;
}
2). 指定权重
指定轮询几率,weight权重大小和访问比率成正比,用于后端服务器性能不均的情况。
upstream backserver {
server 192.168.1.62 weight=1;
server 192.168.1.64 weight=2;
}
3). ip_hash
每个请求,按访问ip的hash结果进行分配,这样每个访客,会固定访问同一个后端服务器,可以解决session的问题。
upstream backserver {
ip_hash;
server 192.168.1.62:80;
server 192.168.1.64:80;
}
4). fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backserver {
server server1;
server server2;
fair;
}
5). url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
upstream backserver {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}
2. 解决Session共享问题
1)解决方案,使用ip_hash
2)在redis上存,所有服务器共享
a.自己写,redis中RedisTemplate的方法保存
b.spring-session,配置文件就可以(依赖:jedis,spring-data-redis,spring-session)