orlabs/orange

orange invalid URL prefix in

Open

#275 创建于 2019年7月8日

在 GitHub 查看
 (19 评论) (0 反应) (1 负责人)Lua (2,295 star) (575 fork)batch import
help wanted

描述

我查到的相关信息

我查到已经有人提了pr,修复了此bug:https://github.com/orlabs/orange/pull/240/commits/c718ce102425796d55be82c74faa28c68135399b 并且该pr我看已经合并到master中,但是该bug并没有解决。lol,版本及配置信息如下 注:我使用的orange是clone的最新的master分支的代码

使用的Orange版本

Orange: 0.7.0

需求或场景

将/appdata 重写成/api/appdata

使用的插件

Rewrite插件

具体的配置

nginx.conf

server {
        listen       80;
        server_name  orange.com;

        location = /favicon.ico {
            log_not_found off;
            access_log off;
        }

        location / {
            set $upstream_host $host;
            set $upstream_request_uri '';
            set $upstream_url '';
            set $upstream_scheme '';
            set $target '';

            rewrite_by_lua_block {
                local orange = context.orange
                orange.redirect()
                orange.rewrite()
            }

            access_by_lua_block {
                local orange = context.orange
                orange.access()
            }

            # proxy
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Scheme $scheme;
            proxy_pass $upstream_scheme$upstream_url$upstream_request_uri;

            header_filter_by_lua_block {
                local orange = context.orange
                orange.header_filter()
            }

            body_filter_by_lua_block {
                local orange = context.orange
                orange.body_filter()
            }

            log_by_lua_block {
                local orange = context.orange
                orange.log()
            }
        }

        location /robots.txt {
            return 200 'User-agent: *\nDisallow: /';
        }
    }

dashbord中规则如下

{
  "name": "appdata",
  "judge": {
    "type": 0,
    "conditions": [
      {
        "type": "URI",
        "operator": "match",
        "value": "appdata"
      }
    ]
  },
  "extractor": {
    "type": 1,
    "extractions": []
  },
  "handle": {
    "uri_tmpl": "/api/appdata",
    "log": true
  },
  "enable": true
}
期望的结果

浏览器访问:http://orange.com/appdata 日志报错

2019/07/08 19:11:08 [error] 87443#0: *26 invalid URL prefix in "", client: 192.168.90.26, server: orange.com, request: "GET /appdata HTTP/1.1", host: "orange.com"
错误的结果
2019/07/08 19:11:08 [info] 87443#0: *26 [lua] handler.lua:85: rewrite(): ==[Rewrite][PASS THROUGH SELECTOR:cf067719-ff7d-4401-a1bb-35df5def11ad], client: 192.168.90.26, server: orange.com, request: "GET /appdata HTTP/1.1", host: "orange.com"
2019/07/08 19:11:08 [info] 87443#0: *26 [lua] handler.lua:97: rewrite(): [Rewrite][PASS-SELECTOR:cf067719-ff7d-4401-a1bb-35df5def11ad] /appdata, client: 192.168.90.26, server: orange.com, request: "GET /appdata HTTP/1.1", host: "orange.com"
2019/07/08 19:11:08 [info] 87443#0: *26 [lua] handler.lua:36: filter_rules(): [Rewrite] /appdata to:/api/appdata, client: 192.168.90.26, server: orange.com, request: "GET /appdata HTTP/1.1", host: "orange.com"
2019/07/08 19:11:08 [info] 87443#0: *26 [lua] handler.lua:85: rewrite(): ==[Rewrite][PASS THROUGH SELECTOR:cf067719-ff7d-4401-a1bb-35df5def11ad], client: 192.168.90.26, server: orange.com, request: "GET /appdata HTTP/1.1", host: "orange.com"
2019/07/08 19:11:08 [info] 87443#0: *26 [lua] handler.lua:97: rewrite(): [Rewrite][PASS-SELECTOR:cf067719-ff7d-4401-a1bb-35df5def11ad] /api/appdata, client: 192.168.90.26, server: orange.com, request: "GET /appdata HTTP/1.1", host: "orange.com"
2019/07/08 19:11:08 [info] 87443#0: *26 [lua] handler.lua:95: access(): ==[Divide][PASS THROUGH SELECTOR:f302f4bf-1cb9-48c4-b40b-1f2051d4420e], client: 192.168.90.26, server: orange.com, request: "GET /appdata HTTP/1.1", host: "orange.com"
2019/07/08 19:11:08 [error] 87443#0: *26 invalid URL prefix in "", client: 192.168.90.26, server: orange.com, request: "GET /appdata HTTP/1.1", host: "orange.com"
从日志可见,URL确实被重写了,但是最终这个invalid URL prefix in "",我查找了源码,没有找到原因,希望帮忙解答,thanks

贡献者指南