Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。
这里我使用Docker创建了2个Nginx容器,宿主机上有安装Nginx.
宿主机Nginx实现负载均衡配置:
# 可配置多个服务器,此配置在http下
upstream dockerContainer {
server 127.0.0.1:8081 weight=10;# 容器1
server 127.0.0.1:8082 weight=5;# 容器2
}
如果设置了weight,则nginx会将请求按照weight比例分配给服务器。如上面的配置,2次请求到了127.0.0.1:8081,下一次就会请求到127.0.0.1:8082(请求数量是2:1)
# 配置
server {
listen 80;
server_name www.xxx.com;
location / {
# 配置代理转发,此时的www.xxx.com的请求会使用dockerContainer的规则进行转发
proxy_pass http://dockerContainer;
}
}
当然,nginx还支持多种规则进行转发,比如还可以根据IP进行转发,即相同的IP会被转发至同一台服务器。
如果你使用了session会话,那么每次请求都可能请求到了不同的服务器上处理,可能导致session不一致的问题,比如无法维护登录状态。此时一个比较好的解决办法就是使用nginx的sticky模块。
Sticky工作原理: Sticky是nginx的一个模块,通过分发和识别cookie,来使同一个客户端的请求落在同一台服务器上,这样就不会出现session不一致的问题。
sticky下载:https://code.google.com/archive/p/nginx-sticky-module/downloads(需翻墙)
sticky下载:http://static.lushaoming.cn/nginx/nginx-goodies-nginx-sticky-module.zip(无需翻墙)
安装nginx+sticky
# 在nginx源码目录重新安装nginx的时候加上--add-module
./configure ... --add-module=nginx-sticky-module-path
make && make install
安装完成之后,负载均衡配置:
# 可配置多个服务器,此配置在http下
upstream dockerContainer {
sticky name=sticky_route;
server 127.0.0.1:8081 weight=10;# 容器1
server 127.0.0.1:8082 weight=5;# 容器2
}
重启nginx,这样就可以保证同一个客户端请求到了同一台服务器。name表示cookie的名称,可以自己定义,但要确保不跟其他cookie冲突。
近期评论