V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
AlexaZhou
V2EX  ›  分享创造

VeryNginx 发布新版本,现已支持动态反向代理

  •  2
     
  •   AlexaZhou ·
    alexazhou · 2016-05-02 10:41:44 +08:00 · 12702 次点击
    这是一个创建于 3164 天前的主题,其中的信息可能已经有所发展或是发生改变。

    好吧,这次是个大更新。

    如果不知道 VeryNginx 是什么,那么请看这里 /t/255284

    本次更新主要有下面几点:

    • 加入了动态配置反向代理的功能

    现在可以直接在 web 界面上配置反向代理,不需要修改 nginx.conf ,不需要重启 nginx 即可生效。并且可以根据复杂的规则选择代理到哪。

    • 加入了动态配置静态文件目录的支持

    可以对满足特定条件的请求,使用不同的 root 路径

    • 加入了请求频率限制功能

    可以对满足特定条件的请求进行计数,指定时间内最多只允许指定次数的请求,超出次数则进行拦截。并支持对不同的 IP , URL 进行分别统计

    • 改进了之前的目录结构以及集成方式

    和 Nginx 集成更简单了,并且提供了一键安装脚本

    另外这次更新之后,通过 VeryNginx 反向代理某站可能是一种新玩法了。

    祝大家玩的开心~

    第 1 条附言  ·  2016-05-30 13:23:26 +08:00
    大家使用中如果有建议或者问题的,请到 Github 上提出 Issue ,我会及时处理。

    And PR welcome !
    68 条回复    2018-05-07 06:52:16 +08:00
    tSQghkfhTtQt9mtd
        1
    tSQghkfhTtQt9mtd  
       2016-05-02 11:34:15 +08:00 via Android   ❤️ 1
    吼啊,你搞的这个更新啊, Excited! 我已经闷声用了一段时间了!非常不错!
    yov123456
        2
    yov123456  
       2016-05-02 11:36:40 +08:00 via iPhone   ❤️ 1
    好用!
    holyghost
        3
    holyghost  
       2016-05-02 11:36:42 +08:00
    @liwanglin12 请问是生产环境吗
    tSQghkfhTtQt9mtd
        4
    tSQghkfhTtQt9mtd  
       2016-05-02 11:41:33 +08:00 via Android
    @holyghost 唔。。算是吧。。
    毕竟咱只有个人站喽┑( ̄Д  ̄)┍
    AlexaZhou
        5
    AlexaZhou  
    OP
       2016-05-02 11:54:08 +08:00
    @liwanglin12 @yov123456

    感谢支持!
    Lxxyx
        6
    Lxxyx  
       2016-05-02 11:55:34 +08:00
    好东西啊,话说我在服务器上开一个应用。地址是 www.xxxx.com:3000 ,那么能通过 VeryNginx 设置反向代理,实现访问 app.xxxx.com 等于访问 www.xxxx.com:3000 的效果吗?
    AlexaZhou
        7
    AlexaZhou  
    OP
       2016-05-02 11:59:54 +08:00   ❤️ 1
    当然可以


    先配置一个 Matcher : host=app.xxxx.com ,用来提取出来所有访问 host 为 **app.xxxx.com** 的请求

    然后配置 Proxy Pass 把这个请求转发到 127.0.0.1:3000 就可以了
    Lxxyx
        8
    Lxxyx  
       2016-05-02 12:02:43 +08:00   ❤️ 1
    @AlexaZhou 已经实现了,正好用的是你说的方式,这个感觉很好用啊。前端部署 Node.js 应用时,能省很多时间来着。
    AlexaZhou
        9
    AlexaZhou  
    OP
       2016-05-02 12:08:19 +08:00
    @Lxxyx

    真棒,一下就配置好了
    Lxxyx
        10
    Lxxyx  
       2016-05-02 12:45:11 +08:00   ❤️ 1
    已经在自己小轮子的 readme 里添加 VeryNginx 为推荐配置了。
    https://github.com/Lxxyx/koa2-easy
    AlexaZhou
        11
    AlexaZhou  
    OP
       2016-05-02 12:51:05 +08:00
    @Lxxyx

    wow! 多谢,我感受到很大的鼓励。
    CMGS
        12
    CMGS  
       2016-05-02 13:23:08 +08:00   ❤️ 1
    = =竟然用上了 balancer 的特性,老实讲 openresty 这个特性我个人是存疑的,因为会完全摈弃了 nginx 自带的几个 balance 算法,比如 last conn 。纯粹用 lua 自行实现的话,最简单的应该就是 random 了,所以我们自己的 elb 想了想去还是用了 tengine 里面包含的 dyups 这个插件,反正也是 lua 兼容。。
    AlexaZhou
        13
    AlexaZhou  
    OP
       2016-05-02 13:44:26 +08:00
    balancer 特性是比较新,不过我仔细测试过,应该没啥问题。这个特性主要是提供了一种方法,在请求到来时再计算出要反向代理的后端地址,让动态转发成为了可能。

    Balancer 其实就相当于绕开了 Nginx 原来的 balancer 那一套,提供了更多可能性的方法。当然如果使用了 balancer 来动态提供后端地址,负载均衡算法也要重新写一遍。

    drupes 提供了一种不重启情况下修改 upstream 的方式,一些情况下会很好用。不过 balancer 特性能做的事情会更多一些。
    qcloud
        14
    qcloud  
       2016-05-02 16:01:44 +08:00   ❤️ 1
    已经编译准备提交至 AMH ,多谢这么牛逼的东西
    AlexaZhou
        15
    AlexaZhou  
    OP
       2016-05-02 16:13:46 +08:00
    @qcloud

    多谢夸奖啦~
    可否科普一下 AMH ?
    qcloud
        16
    qcloud  
       2016-05-02 16:18:43 +08:00
    AlexaZhou
        17
    AlexaZhou  
    OP
       2016-05-02 16:26:06 +08:00
    @qcloud

    看到啦,感觉蛮有用的
    qcloud
        18
    qcloud  
       2016-05-02 16:26:55 +08:00   ❤️ 1
    @AlexaZhou 很大的用户量哦,做成模块,提供用户下载
    kdsex
        19
    kdsex  
       2016-05-02 16:33:26 +08:00 via iPhone
    mark 支持
    AlexaZhou
        20
    AlexaZhou  
    OP
       2016-05-02 16:34:19 +08:00
    太感谢支持啦
    common07
        21
    common07  
       2016-05-02 19:02:26 +08:00
    @AlexaZhou 不知道有没有打包好的 docker 镜像?
    Syc
        22
    Syc  
       2016-05-02 19:09:10 +08:00 via Android
    火钳刘明
    kn007
        23
    kn007  
       2016-05-02 19:26:18 +08:00
    支持。
    bazingaterry
        24
    bazingaterry  
       2016-05-02 19:27:00 +08:00 via iPhone
    支持!迟点的小项目用上试试。
    YUX
        25
    YUX  
       2016-05-02 19:44:52 +08:00
    求个 Docker image 版
    qcloud
        26
    qcloud  
       2016-05-02 19:52:51 +08:00   ❤️ 1
    hljjhb
        27
    hljjhb  
       2016-05-02 19:54:05 +08:00
    你这个项目啊…… excited !
    xuhaoyangx
        28
    xuhaoyangx  
       2016-05-02 20:45:39 +08:00
    反代基础上加上 sub_filter 就好了
    AlexaZhou
        29
    AlexaZhou  
    OP
       2016-05-02 21:19:03 +08:00 via iPhone
    @qcloud

    从图上看是缺少 gcc 工具链,所以没办法编译。装上 gcc 就好了
    lutla
        30
    lutla  
       2016-05-03 00:33:54 +08:00
    excited !
    dzxx36gyy
        31
    dzxx36gyy  
       2016-05-03 03:05:07 +08:00 via Android   ❤️ 1
    @qcloud 今天还给 amh 发了工单建议添加这个(:3▓▒,感觉不能在棒
    dzxx36gyy
        32
    dzxx36gyy  
       2016-05-03 03:12:41 +08:00 via Android   ❤️ 1
    @AlexaZhou 请问下 lua-resty-core 是怎么装的……我今天试了下是修改 makefile 中 include 为 luajit 目录然后直接 make;make install 了,貌似成功,但是不知道为啥插入 server 段的 conf 之后就 502 了。(我用的是 0.3 还没出 release 之前的版本 master 分之,失败之后换回 0.2.1 就正常了,不知道是不是因为 0.3.0 出 release 之前的版本有问题……还是我 lua-resty-core 安装方式不对
    dzxx36gyy
        33
    dzxx36gyy  
       2016-05-03 03:13:57 +08:00 via Android
    @qcloud 话说不试试直接基于 nginx-1.10.0 来改么,我自己就是这么干的……修改了下模块的编译参数
    qcloud
        34
    qcloud  
       2016-05-03 10:49:00 +08:00
    装个这玩意咋就这么难呢 - -
    https://gyazo.com/41ee1349e9bf43562b4a2dd6d41e85c7
    qcloud
        35
    qcloud  
       2016-05-03 10:49:28 +08:00
    @dzxx36gyy 发工单也不会集成了,只有自己搞,他会告诉你 nginx 系列就行了
    AlexaZhou
        36
    AlexaZhou  
    OP
       2016-05-03 12:08:36 +08:00
    @qcloud

    这是因为编译 Nginx 时,没找到 PCRE 源码, Nginx 用 PCRE 库进行 Rewrite 。。。

    如果是 fedora 的话,可以执行:

    yum install pcre pcre-devel

    这样把 PCRE 依赖装上就好啦

    如果是其它系统的话,可能包的名字不完全一样,需要自己看一下

    Ps :编译 Nginx 还需要 openssl ,如果没有的话可以通过下面的命令安装

    yum install openssl-devel

    我回头会写一个文档来把这些都列出来
    qcloud
        37
    qcloud  
       2016-05-03 12:17:54 +08:00
    @AlexaZhou 麻烦了
    AlexaZhou
        38
    AlexaZhou  
    OP
       2016-05-03 14:18:09 +08:00
    @dzxx36gyy

    我尝试了手动使用 lua-nginx-module 来安装,我发现并不是缺少了 lua-resty-core ,而是缺少了 lua-resty-dns 这个组件( 这个组件目前没有包含在 lua-resty-core 中 )。老版本没有问题是因为没有使用到这个库。

    另外经过我确认, lua-nginx-module 已经集成了 lua-resty-core 了,所以这个并不需要手动安装。为了解决这个问题,我把 lua-resty-dns 集成到 VeryNginx 中了, wiki 我也更新了。

    你更新代码再运行一下应该就可以了。
    dzxx36gyy
        39
    dzxx36gyy  
       2016-05-03 14:21:29 +08:00
    @AlexaZhou 感谢,我晚上再试试
    GPU
        40
    GPU  
       2016-05-03 14:32:52 +08:00
    一直在用 ,没更新前总感觉有点像花瓶 ,毕竟我用不上 match 这些功能。
    lzsadam
        41
    lzsadam  
       2016-05-03 16:16:58 +08:00
    安装配置好登录 502 什么问题?
    用的是
    https://blog.linuxeye.com/31.html
    的 OpenResty
    看他的源码 openresty.sh 里面只少了一个编译的参数,又加上重新编译了一次
    环境应该是 OK 的
    AlexaZhou
        42
    AlexaZhou  
    OP
       2016-05-03 17:24:08 +08:00
    @lzsadam

    可以访问一下页面,看看 nginx 的 error log 中有没有报错信息
    lzsadam
        43
    lzsadam  
       2016-05-03 17:33:24 +08:00
    @AlexaZhou 404 了,没报错,没改默认目录
    就是给了个域名,指向 /opt/verynginx/verynginx/dashboard
    lzsadam
        44
    lzsadam  
       2016-05-03 17:33:57 +08:00
    其余配置也没有任何变动
    lzsadam
        45
    lzsadam  
       2016-05-03 17:45:09 +08:00
    @AlexaZhou

    这是我的 nginx 配置

    server {
    listen 80;
    server_name verynginx.xxx.com;
    access_log off;
    root /opt/verynginx/verynginx/dashboard;

    include /opt/verynginx/verynginx/nginx_conf/in_server_block.conf;

    location / {
    index index.html index.htm;
    }

    # redirect server error pages to the static page /50x.html
    #
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
    root html;
    }
    }
    AlexaZhou
        46
    AlexaZhou  
    OP
       2016-05-03 17:46:05 +08:00
    @lzsadam

    呃,好吧,看来是安装的方式不对。

    VeryNginx 和 Nginx 集成并不是配置一个虚拟主机就可以的,完整的看一下安装文档吧,上面有怎么用脚本安装,也有怎么使用自己编译 Nginx 的说明。如果不想折腾的话,建议直接通过脚本安装吧
    lzsadam
        47
    lzsadam  
       2016-05-03 17:48:06 +08:00
    @AlexaZhou 是看安装文档装的

    只装了 verynginx 没装 openresty
    也按照配置加了 3 个 conf 到指定位置
    nginx 配了个域名
    其余没改任何东西
    AlexaZhou
        48
    AlexaZhou  
    OP
       2016-05-03 17:53:36 +08:00
    你上面贴出来的配置只有一个 include ,缺少了其它的。如果是自己编译的 Nginx ,直接使用仓库目录下面的 nginx.conf ,应该就可以跑起来了,可以用那个来 debug 。

    不需要配置 /root /opt/verynginx/verynginx/dashboard;
    也不需要配置 server name 啥的
    AlexaZhou
        49
    AlexaZhou  
    OP
       2016-05-03 18:05:13 +08:00
    @lzsadam

    呃,不知道你搞定了没有,如果有困难的话,也可以给我发邮件 [email protected] ,告诉我微信,我加你解决一下
    lzsadam
        50
    lzsadam  
       2016-05-03 18:19:52 +08:00
    @AlexaZhou 已经邮件你了,没有搞定。
    guonning
        51
    guonning  
       2016-05-03 21:16:06 +08:00 via iPhone
    也是没搞定,期待完整说明
    dzxx36gyy
        52
    dzxx36gyy  
       2016-05-04 19:03:48 +08:00
    @AlexaZhou
    _(:з」∠)_我 500 了
    dzxx36gyy
        53
    dzxx36gyy  
       2016-05-04 19:29:26 +08:00
    @AlexaZhou 哎呀,貌似是 release 里面的没更新, gitclone 最新的 master 正常了
    henbf
        54
    henbf  
       2016-05-06 16:50:41 +08:00
    安装好了之后还要修改一下 nginx.conf 里面的用户,我修改成 www-data 就没问题了
    Lxxyx
        55
    Lxxyx  
       2016-05-07 00:04:49 +08:00 via Android
    开启 gzip 是得自己改 nginx.conf 还是?
    AlexaZhou
        56
    AlexaZhou  
    OP
       2016-05-07 10:39:05 +08:00
    @Lxxyx

    需要自己在 nginx.conf 中添加
    unkn369
        57
    unkn369  
       2016-05-22 13:13:25 +08:00
    @AlexaZhou 反代 *.abc.com abc.com 到 127.0.0.1 Matcher 怎么写?
    AlexaZhou
        58
    AlexaZhou  
    OP
       2016-05-22 13:45:46 +08:00
    Matcher 这样写: host ≈ .*abc\.com

    反向代理怎么配置可以参考 github 上的在线 demo ,那个 demo 是把所有的请求反向代理到 localhost 的 tornado 上去,参考修改就可以啦
    AlexaZhou
        59
    AlexaZhou  
    OP
       2016-05-22 13:54:15 +08:00
    @unkn369

    刚忘记 @ 了
    unkn369
        60
    unkn369  
       2016-05-27 21:04:41 +08:00
    @AlexaZhou 添加 Up Stream 点 save 报错 Ajax request failed [status code = 200]
    AlexaZhou
        61
    AlexaZhou  
    OP
       2016-05-27 23:18:52 +08:00
    unkn369
        62
    unkn369  
       2016-05-30 11:53:20 +08:00   ❤️ 1
    @AlexaZhou 已经参照这个说明设置不行, Up Stream 和 Proxy Pass 之前已经添加成功两对记录, 现在要添加第三条记录, 保存时一直报错 Ajax request failed [status code = 200]
    AlexaZhou
        63
    AlexaZhou  
    OP
       2016-05-30 13:21:26 +08:00   ❤️ 1
    @unkn369

    呃,还可以看看 nginx error.log ,看有没有什么内容。另外请移步去 Github 上提 Issue 吧,尽量多说明一些情况,我好帮你解决。
    ZiShuo
        64
    ZiShuo  
       2016-06-25 20:04:37 +08:00 via Android
    @qcloud AMH 官方现在只顾着赚钱了,我很早就不用他们的插件了,话说我已经搞成 AMH 面板的插件了。后台一键安装,一键卸载!
    qcloud
        65
    qcloud  
       2016-06-26 20:11:33 +08:00
    @ZiShuo 不知道赚钱的公司不是好公司, QAQ
    xiaoz
        66
    xiaoz  
       2016-10-25 19:26:20 +08:00
    我就想问问怎样添加 IP 段?
    qcloud
        67
    qcloud  
       2016-12-30 13:03:29 +08:00
    老哥问个问题啊,如果网站用了 CDN ,表示设置的规则就不起作用了哇
    wzw
        68
    wzw  
       2018-05-07 06:52:16 +08:00 via iPhone
    还计划更新吗?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   975 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 21:01 · PVG 05:01 · LAX 13:01 · JFK 16:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.