1. 准备三个tomcat容器,一个nginx容器
8081-->8080 tomcat 接收uri中带edu的请求
8082-->8080 tomcat 接收uri中带vod的请求
8083-->8080 tomcat 接收uri中带edu的请求
88-->80 nginx
http://ip/edu/book.html 这个请求会被分发到8081和8083两个tomcat上
[root@izuf6crq4k1mozjbsp7p09z conf.d]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
13f254089b6f tomcat "catalina.sh run" 54 minutes ago Up 54 minutes 0.0.0.0:8083->8080/tcp tomcat-jarvis-03
cf9087e92618 tomcat "catalina.sh run" 4 hours ago Up 4 hours 0.0.0.0:8082->8080/tcp tomcat-jarvis-02
2cad9627b189 tomcat "catalina.sh run" 5 hours ago Up 5 hours 0.0.0.0:8081->8080/tcp tomcat-jarvis-01
1ac4322faeee nginx "/docker-entrypoint.…" 5 hours ago Up 47 seconds 0.0.0.0:88->80/tcp nginx-jarvis
2. 配置default.conf
upstream nginxServer { # 取名字不可加下换线"_" nginx_server会报错
server 172.16.166.67:8081;
server 172.16.166.67:8083;
}
server {
listen 80;
listen [::]:80;
server_name 172.16.166.67;
location ~ /edu/ {
proxy_pass http://nginxServer; ###
}
location ~ /vod/ {
proxy_pass http://172.16.166.67:8082;
}
...
}
3. 测试
说明:如果upstream的名称加了下划线,会报如下错误
分配策略
1. 轮询(默认):每个请求按时间顺序逐一分发到不同后端服务器。如果有一个服务器挂掉,能自动剔除。
2. weight:代表权重,默认为1。权重越多,服务器分到的请求数越多。如下示例:
upstream nginxServer {
server 172.16.166.67:8081 weight 2;
server 172.16.166.67:8083 weight 3;
}
3. ip_hash:根据ip的hash值结果分配。每个访客访问固定服务器
upstream nginxServer {
ip_hash;
server 172.16.166.67:8081;
server 172.16.166.67:8083;
}
4. fair:根据响应时间进行分配
upstream nginxServer {
fair;
server 172.16.166.67:8081;
server 172.16.166.67:8083;
}