STF STF nginx 配置介绍

blueshark · January 10, 2017 · Last by linkin replied at May 11, 2017 · 2128 hits

一、介绍

在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了。不过有些情况,比如外网访问内网的机器,就必须代理。

共收到 4 条回复 时间 点赞

你好,能加下我的QQ吗?我最近在stf扩展机器上遇到了些许的坑,可以方便请教下您吗?我的QQ是455064755.万分感激,楼主

请教一个问题,你们有尝试过在nginx的二级目录反向代理stf吗?
看了这么多配置,基本都是根目录的配置方法。我遇到的坑是配为二级目录的时候,二级目录会消失。
应该访问的链接应该是: http://www.test.com/stf/auth/mock
然而出现的却是:http://www.test.com/auth/mock

通过在配置文件上加
location /auth/ {
proxy_pass http://stf_auth/auth/;
proxy_redirect http://stf_auth/auth/ http://$host/stf/auth/;
}
可以进去登录页面,但是点击登录后,跳转到:http://127.0.0.1:7100/?jwt=一串加密字符串

通过将上面的链接修改为http://www.test.com/stf/?jwt=http://www.test.com/stf,可以进入设备页面,页面链接为:http://www.test.com/stf/#!/devices。一串加密字符串,再用
点击设备和设置等按钮,结果又跳转到错误链接:http://www.test.com/#!/devices

blueshark #4 · May 11, 2017 作者
linkin 回复

这个没用过,我试了试确实不行,stf内部跳转的url是固定的,感觉不太好解决

blueshark 回复

对啊,全是固定的,我在试着在master版上改了下这些url。刚刚试着改了auth,跳转后没有接收的地方,所以必须全部修改才行

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up