WebService 对外提供 SOAP 接口,SOAP 接口基于 HTTP + XML,因此,可以使用 Nginx 作用 WebService 的反向代理,以实现 WebService 请求的负载均衡功能。
本文使用 docker-compose 部署 nginx,有关 docker-compose 的使用,可以参考 《Docker Compose 入门教程》。
文件目录结构如下:
.
├── conf.d
│ └── ksb.conf
├── docker-compose.yml
└── log
├── access.log
└── error.log
其中,
ksb.conf:nginx 的server配置文件docker-compose.yml:docker-compose 使用access.log:nginx 访问日志error.log:nginx 异常日志
docker-compose.yml 文件:
version: '3'
services:
nginx:
image: docker.io/nginx:alpine
container_name: nginx
restart: always
ports:
- "7000:8080"
environment:
TZ : 'Asia/Shanghai'
volumes:
- /home/lihao/docker/nginx/conf.d:/etc/nginx/conf.d
- /home/lihao/docker/nginx/log:/var/log/nginx
其中,
environment:TZ : 'Asia/Shanghai'用于正确设置时区,避免 nginx 日志打印时间不正确volumes:方便直接在宿主机设置 nginx 配置文件,以及查看 nginx 输出日志ports:设置端口映射,方便在外部使用7000端口访问 nginx
Nginx 的 server 配置 ksb.conf:
upstream router {
server 10.88.115.114:5555 weight=2;
server 10.88.115.137:80 weight=1;
}
server {
listen 8080;
server_name 10.88.115.137;
charset utf-8;
proxy_intercept_errors on;
location / {
proxy_pass http://router;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
proxy_set_header Via "nginx";
proxy_read_timeout 660;
proxy_connect_timeout 10;
proxy_send_timeout 60;
}
}
重点关注几个配置项:
upstream:用于配置 nginx 后端服务器(即 upstream,上游服务器),这里我们配置了两个后端服务器,并设置转发的权重分别为 2 和 1proxy_pass:配置代码转发,即使用上面upstream router作为后端服务器转发proxy_read_timeout:nginx 与后端服务器连接成功后,后端服务器响应的超时时间,即后端服务器处理请求的超时时间,由于后端服务器处理请求的最长时间为 600 秒,这里设置 660 秒proxy_connect_timeout:nginx 与后端服务器连接的超时时间proxy_send_timeout:后端服务器完成请求处理后,传输完整数据的超时时间
先启动两个后端服务器,这两个后端服务器均对处提供 WebService 接口。然后使用 docker-compose up -d 启动 nginx 作为 WebService 接口反向代理。
客户端访问 nginx ,可以看到客户端 WebService 请求被正常转发到了两个 WebService 后端服务器处理,然后客户端通过 nginx 正常获取了后端服务器的返回结果。