STF STF nginx 配置介绍

blueshark · 2017年01月10日 · 最后由 linkin 回复于 2017年05月11日 · 3115 次阅读

一、介绍

在 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

linkin 回复

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

blueshark 回复

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

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册