nginx 代理 supervisor WebUI 到子目录

  • 2019-06-11
  • 39
  • 0
  • 0

nginx 代理 supervisor WebUI 到子目录。supervisor WebUI 开放的地址是在根目录下,直接代理到公网的话会占用根目录,所以推荐将其代理到子目录下。

接上篇 linux进程监管工具Supervisor ,配置后又想远程操控一些硬件、程序的启停。所以搜罗了解了 nginx 代理。

1. 代理

用到的知识有,

  1. nginx 请求参数,参考链接: nginx 配置$Query String
  2. location 匹配,参考链接: Nginx的location详解
  3. rewrite 的 last和 break,参考链接: nginx rewrite 指令last break区别

配置为:

location ~ /chdpath {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host/chdpath/;
    proxy_redirect off;
    rewrite ^/chdpath(.*)$ /$1 break;
    proxy_pass http://127.0.0.1:5555;
}

location ~ /(index\.html|tail\.html) {
    set $param $1;
    if ($query_string ~ "processname.+") {
        # add_header Content-Type text/plain;  # debug
        # return 200 $param;  # debug
        rewrite ^ /chdpath/$param?$1 last;
    }
}

需要修改 chdpath 为自己的子目录,以及 proxy_pass 字段的端口号。

第一部分为反代理 supervisor WebUI,第二部分反代理 supervisor WebUI 根目录的内容到子地址,效果为将 supervisor 原本地址,如 _yourhost.com/index.html?processname=A-camera&action=start_ 经过第二部分代理到 _yourhost.com/chdpath/index.html?processname=A-camera&action=start_, 再由第一部分传递信息给 supervisor web 后台。

这里解释下第二部分:

  1. location 匹配:
    • ~:区分大小写的正则匹配,匹配成功立即返回结果并结束解析过程
    • /(index\.html|tail\.html):匹配地址 _index.html_ 或 _tail.html_,其中 _\._ 意为将 _._ 标记为原义字符而非元字符,外层括号表示匹配并获取这一组匹配
  2. set param 1;$1 是上面匹配并获取的结果,这里其等于 index.htmltail.html,并将此结果赋值给 param。因为后面会再次正则匹配,所以需要赋值给 param 保存起来。
  3. if ($query_string ~ "processname.+"):如果请求参数以 _processname_ 开头就进入函数体,并且将此匹配结果保存到变量 $1
  4. rewrite ^ /chdpath/param?1 last;rewrite : 重定向,此处将 ^ (字符串的起始位置,后面跟空表示任意的地址) 定向到 /chdpath/\$param?\$1
    • $param :上面解释 2 中的变量,内容是 location 匹配的结果
    • ? : 去除后面的请求参数
    • $1 : 解释3 中的变量,内容是请求参数匹配结果
    • last : 在 location 内部时,停止当前这个请求,并根据 rewrite 匹配的规则重新发起一个请求。新请求重新开始执行,并匹配到第一部分,让第一部分proxy_pass。这里提下 break 作用是跳过当前请求的 rewrite 阶段,并继续执行本请求的其他阶段,比如第一部分后续的 proxy_pass

2. supervisor Web界面美化

supervisor Web文件在: /usr/local/lib/python3.5/dist-packages/supervisor/ui,主界面文件是: status.html,可以在里面加自己的样式以及其他内容。

有一些第三方的插件,可以集中管理多个设备的 supervisor ,如:cesi, multivisor, supervisord-monitor, flatfish

不过现在都有些不完美(2019年6月17日)。。。要么不支持显示日志(multivisor),要么不支持移动端(supervisord-monitor),要么不支持用户认证(cesi, multivisor),flatfish 算是功能比较全界面也支持多设备,但是功能还没有写完,有很多 bug。 等着他们更新完善把~。


版权声明: 本网站所有资源采用BY-NC-SA 4.0协议进行授权,转载应当以相同方式注明文章来自:nginx 代理 supervisor WebUI 到子目录 - 一方的天地

评论

还没有任何评论,你来说两句吧

发表评论

陕ICP备18010914号
知识共享许可协议
本作品由一方天地采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可,转载或引用本站文章应遵循相同协议。如果有侵犯版权的资源请尽快联系站长,本站会在24h内删除有争议的资源。 -