一、介绍

在STF的官方的部署文档 (https://github.com/openstf/stf/blob/master/doc/DEPLOYMENT.md) 中,作者推荐用nginx来组合不同的模块,这样不同的模块可以分别部署在不同机器上,而且可以部署多个。先简单介绍一下nginx这个工具吧。

Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,简单来说,nginx可以把用户不同的请求分配给不同的服务器处理,然后把结果在返回给用户。

在STF中nginx把不同类型的请求,例如api、img、js等不同类型的资源分配给不同的docker,这样就可以实现负载均衡以及模块的扩展,甚至可以实现在不影响服务的情况下进行更新。

二、nginx.conf解释

下面详细说一下nginx.conf里关键几部分的作用

1、upstream

http {
upstream stf_app {
server 192.168.255.100:3100 max_fails=0;
}

upstream stf_auth {
server 192.168.255.150:3200 max_fails=0;
}
.....

这部分自然对应不同的STF模块,其实这里可以配置多个,实现负载均衡:

http {
upstream stf_app {
server 192.168.255.100:3100 max_fails=0;
server 192.168.255.101:3100 max_fails=0;
server 192.168.255.102:3100 max_fails=0;
}
.....

100、101、102只要保证一个在线即可,这样我们可以在线重新部署其中一个或两个。

2、map $http_upgrade

map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}

这部分的作用是配置nginx让其支持长连接代理,详细内容可以搜索nginx代理长连接的信息。

3、server部分中的DNS

server里有很多httpsr配置,如果不用https完全可以删除。里面有一段关于DNS的

resolver 8.8.4.4 8.8.8.8 valid=300s;
resolver_timeout 10s;

这段的意思是指定google的DNS,当然,作者假设你想把STF部署在一个外网域名上,而实际上很多公司可能使用的是内网域名,这时resolver就必须改掉。

4、server中的location

location ~ "^/d/floor4/([^/]+)/(?<port>[0-9]{5})/$" {
proxy_pass http://192.168.255.200:$port/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
}

这段的意思是代理长连接了,主要用途是代理provider的屏幕画面传输,如果没有这段,用户是看不到provider的屏幕的,但是可以操作屏幕!!!有兴趣的同学可以试一下。localtion那一行其实是一个正则匹配,因为每个手机传输图像的端口不一样,所以只能匹配了。真正区别不同provider的参数是floo4。

当然,让nginx代理屏幕的图像传输感觉会有性能问题,如果大量手机同时使用,不知道nginx会不会有瓶颈。解决这个问题的方法是不用nginx代理,直接让用户从provider处接收屏幕图像,只要修改provider的启动参数就可以了:

.....ws://192.168.0.100:<%= publicPort %>/d/floor4/<%= serial %>/<%= publicPort %>/

不用nginx代理以后就可以自由的增加和减少provider了。不过有些情况,比如外网访问内网的机器,就必须代理。


↙↙↙阅读原文可查看相关链接,并与作者交流