手记

Nginx 实现反向代理及负载均衡配置

需求

nginx 作为负载均衡服务器,用户请求先到达 nginx,再由 nginx 根据负载配置将请求分发至 tomcat 服务器

  • tomcat 服务器一:192.168.127.130:8080
  • tomcat 服务器二:192.168.127.130:8081
  • tomcat 服务器三:192.168.127.130:8082
  • nginx 代理服务器:192.168.127.130

什么是反向代理

反向代理可以防止外网对内网服务器的恶性攻击、缓存以减少服务器的压力和访问安全控制之外,还可以进行负载均衡,将用户请求分配给多个服务器

负载均衡

负载均衡是一种用于优化资源利用率,最大化吞吐量,减少延迟和确保容错配置的常用技术。可以将 nginx 用作非常有效的 HTTP 负载平衡器,以将流量分配到多个应用程序服务器,并使用 nginx 改善 Web 应用程序的性能,可伸缩性和可靠性。

部署 Tomcat 集群

创建 docker-compose.yml,定义 tomcat 服务集群,分别对外映射端口 808080818082

version: '3'
services:
  tomcat1:
    image: tomcat
    container_name: tomcat1
    ports:
      - 8080:8080
  tomcat2:
    image: tomcat
    container_name: tomcat2
    ports:
      - 8081:8080
  tomcat3:
    image: tomcat
    container_name: tomcat3
    ports:
      - 8082:8080

启动容器

$ docker-compose up -d

Nginx 自带支持的负载均衡机制

默认(轮询):对应用程序服务器的请求以轮询方式分发:

upstream tomcatServers {
    server 192.168.127.130:8080;
    server 192.168.127.130:8081;
    server 192.168.127.130:8082;
}

minimum_conn(最少连接):将下一个请求分配给活动连接数量最少的服务器:

upstream tomcatServers {
    minimum_conn;
    server 192.168.127.130:8080;
    server 192.168.127.130:8081;
    server 192.168.127.130:8082;
}

ip-hash(会话持久性)—哈希函数用于确定应为下一个固定请求选择哪个服务器(基于客户端的IP地址),解决 session 的问题

upstream tomcatServers {
    ip_hash;
    server 192.168.127.130:8080;
    server 192.168.127.130:8081;
    server 192.168.127.130:8082;
}

负载均衡设备的相关配置说明

  • weight:默认值为 1,值越大,负载的权重就越大
  • down:表示当前的 server 暂时不参与负载
  • max_fails:允许请求失败的次数默认为 1 当超过最大次数时,返回 proxy_next_upstream 模块定义的错误
  • fail_timeout:触发 max_fails 后暂停的时间,过了这段时间,重新探测故障服务器是否可用
  • backup:其它所有的非 backup 机器 down 或者忙的时候,请求 backup 机器。所以这台机器压力会最轻

配置 Nginx

创建 docker-compose.yml,挂载 nginx.conf 文件,并对外映射端口 80

version: '3.1'
services:
  nginx:
    restart: always
    image: nginx
    container_name: nginx
    ports:
      - 80:81
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf

docker-compose.yml 同目录下创建 nginx.conf 文件,配置反向代理及负载均衡

user  nginx;
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

        # 服务器集群,weight是权重的意思,权重越大,分配的概率越大
	upstream tomcatServers {
                minimum_conn;
		server 192.168.127.130:8080 weight = 10;
                server 192.168.127.130:8081 weight = 10;
                server 192.168.127.130:8082 weight = 10;
	}

	server {
		listen 81;
		location / {
                        # 配置反向代理地址
			proxy_pass http://tomcatServers;
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_set_header Host $http_host;
                        proxy_set_header X-Forwarded-Proto $scheme;
                        proxy_set_header X-Real-IP $remote_addr;
		}
	}
}

启动容器

$ docker-compose up -d
0人推荐
随时随地看视频
慕课网APP