Ich verwende zwei Server, um den Reverse-Proxy zu konfigurieren.
Server A leitet alle Anfragen über die folgende Konfiguration an die Testservergruppe weiter (obwohl es nur 1 in der Gruppe gibt)
listen 80;
root /home/www;
......
upstream test {
server 123.45.567.89:80 weight=1; // 服务器B
}
location / {
proxy_pass http://test;
}
Der Zugriff auf Server A über den Browser gibt den Inhalt von Server B zurück.
Hier stellt sich die Frage:
1. Server B (der Reverse-Proxy-Server) scheint keine Konfiguration zu erfordern?
2. Kann ich Upstream als Reverse-Proxy-Server beitreten, solange der Proxy-Server keine Blockierungseinstellungen hat?
3. Müssen die Projekte auf Server B mit den Projekten auf Server A konsistent sein, wenn ein Reverse-Proxy für den Lastausgleich verwendet wird?
第1点:简单来说被代理的对象是不需要什么配置的,但是要注意的是如果你要在B上处理请求的来源IP,那么需要对A上的nginx做一些配置,把源IP放到请求头里比如 X-Real-IP:xxx.xxx.xx.xx 然后B那里通过这个请求头获得真正的请求来源IP,否则你只能得到A的IP
第2点:upstream 没用过,通常我用 proxy_pass
第3点:通常来说是的。
1 被代理服务器B不需要什么设置
2 在upstream 中加入多组服务器也就是所谓的负载均衡配置。然后配置 proxy_pass
3 负载被均衡的服务器理论上是数据共享,业务相同,只是分布式部署在不同的机器,以减轻服务器压力。(楼主可以在同一台服务器中将同一个业务以不同端口启动多个服务,并配置负载均衡,验证一下 do yourself!)
负载均衡策略目前有一下几种方式
轮询(默认): 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
weight: 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
ip_hash: 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
fair(第三方):按后端服务器的响应时间来分配请求,响应时间短的优先分配。
url_hash(第三方):按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。