FinerKeysen opened a new issue, #10873:
URL: https://github.com/apache/apisix/issues/10873
### Current Behavior
在apisix release/2.13 以及 release/3.2 版本中
当路由同时启用hmac-auth和proxy-rewrite插件时,proxy-rewrite插件的rewirte阶段会进入两次
### Expected Behavior
_No response_
### Error Logs
2024/01/29 13:04:36 [warn] 26073#26073: *2 [lua] plugin.lua:252:
load_stream(): new plugins:
{"mqtt-proxy":true,"ip-restriction":true,"limit-conn":true,"syslog":true},
context: init_worker_by_lua*
2024/01/29 13:04:36 [warn] 26071#26071: *60 [lua] config_etcd.lua:168: main
etcd watcher started, revision=1374, context: ngx.timer
2024/01/29 13:04:36 [warn] 26074#26074: *80 [lua] config_etcd.lua:168: main
etcd watcher started, revision=1374, context: ngx.timer
2024/01/29 13:04:36 [warn] 26073#26073: *93 [lua] config_etcd.lua:168: main
etcd watcher started, revision=1374, context: ngx.timer
2024/01/29 13:05:29 [warn] 26073#26073: *3478 [lua] proxy-rewrite.lua:261:
phase_func(): 开始 》》》 proxy rewrite, client: 127.0.0.1, server: _, request: "GET
/api/v1/books?id=2 HTTP/1.1", host: "127.0.0.1:27151"
2024/01/29 13:05:29 [warn] 26073#26073: *3478 [lua] proxy-rewrite.lua:351:
phase_func(): 结束 << << << proxy rewrite, client: 127.0.0.1, server: _, request:
"GET /api/v1/books?id=2 HTTP/1.1", host: "127.0.0.1:27151"
2024/01/29 13:05:29 [warn] 26073#26073: *3478 [lua] proxy-rewrite.lua:261:
phase_func(): 开始 》》》 proxy rewrite, client: 127.0.0.1, server: _, request: "GET
/api/v1/books?id=2 HTTP/1.1", host: "127.0.0.1:27151"
2024/01/29 13:05:29 [warn] 26073#26073: *3478 [lua] proxy-rewrite.lua:351:
phase_func(): 结束 << << << proxy rewrite, client: 127.0.0.1, server: _, request:
"GET /api/v1/books?id=2 HTTP/1.1", host: "127.0.0.1:27151"
### Steps to Reproduce
### 1、run with apisix source code
#### Add debu log in proxy_rewrite plugin
```lua
function _M.rewrite(conf, ctx)
core.log.warn("开始 》》》 proxy rewrite")
for _, name in ipairs(upstream_names) do
if conf[name] then
ctx.var[upstream_vars[name]] = conf[name]
end
end
......
if conf.method then
ngx.req.set_method(switch_map[conf.method])
end
core.log.warn("结束 << << << proxy rewrite")
end
```
#### config.yaml
```yaml
deployment:
role: traditional
role_traditional:
config_provider: etcd
admin:
admin_key:
- name: admin
key: ebca3b7b5508638c15ba670c8c7963c7 # 使用实例ID的md5值
role: admin
allow_admin:
admin_listen:
ip: 0.0.0.0
port: 27152
etcd:
host:
- http://127.0.0.1:27157
apisix:
node_listen:
- port: 27151 # 网关的监听端口
# enable_http2: true
ssl:
listen:
- port: 27154 # 网关ssl的监听端口
# enable_http2: true
enable_control: true
control:
ip: "0.0.0.0"
port: 27153 # 网关控制api的端口
proxy_cache: #缓存插件配置
cache_ttl: 60s # 若上游未指定过期时间,则为默认缓存时间
zones:
- name: memory_cache
memory_size: 50m
plugin_attr:
prometheus:
metric_prefix: mse_gw_
export_addr:
ip: 0.0.0.0
port: 9091
username: prometheus
password: ENC(U2FsdGVkX1+yy1B8J1Zn35mHCDj7bX8GcTChRQeEWjo=)
opentelemetry:
resource:
service.name: MSEGW
project.code: MSEGW
deployment: dev
instance.id : "802635138818114560"
collector:
address: 127.0.0.1:27159
request_timeout: 3
nginx_config:
user: root
plugins: # plugin list (sorted by priority)
- real-ip # priority: 23000
- client-control # priority: 22000
- proxy-control # priority: 21990
- zipkin # priority: 12011
#- skywalking # priority: 12010
- opentelemetry # priority: 12009
- ext-plugin-pre-req # priority: 12000
- request-id # priority: 11010
- fault-injection # priority: 11000
- mocking # priority: 10900
- serverless-pre-function # priority: 10000
#- batch-requests # priority: 4010
- cors # priority: 4000
- ip-restriction # priority: 3000
- ua-restriction # priority: 2999
- referer-restriction # priority: 2990
- csrf # priority: 2980
- uri-blocker # priority: 2900
- request-validation # priority: 2800
- openid-connect # priority: 2599
- authz-casbin # priority: 2560
- wolf-rbac # priority: 2555
- ldap-auth # priority: 2540
- hmac-auth # priority: 2530
- basic-auth # priority: 2520
- jwt-auth # priority: 2510
- key-auth # priority: 2500
- consumer-restriction # priority: 2400
- forward-auth # priority: 2002
- opa # priority: 2001
- authz-keycloak # priority: 2000
#- error-log-logger # priority: 1091
- proxy-mirror # priority: 1010
- proxy-cache # priority: 1009
- proxy-rewrite # priority: 1008
- api-breaker # priority: 1005
- limit-conn # priority: 1003
- limit-count # priority: 1002
- limit-req # priority: 1001
#- node-status # priority: 1000
- gzip # priority: 995
- server-info # priority: 990
- traffic-split # priority: 966
- redirect # priority: 900
- response-rewrite # priority: 899
#- dubbo-proxy # priority: 507
- grpc-transcode # priority: 506
- grpc-web # priority: 505
- public-api # priority: 501
- prometheus # priority: 500
- datadog # priority: 495
- echo # priority: 412
- loggly # priority: 411
- http-logger # priority: 410
- splunk-hec-logging # priority: 409
- skywalking-logger # priority: 408
- google-cloud-logging # priority: 407
- sls-logger # priority: 406
- tcp-logger # priority: 405
- kafka-logger # priority: 403
- rocketmq-logger # priority: 402
- syslog # priority: 401
- udp-logger # priority: 400
- file-logger # priority: 399
- clickhouse-logger # priority: 398
#- log-rotate # priority: 100
# <- recommend to use priority (0, 100) for your custom plugins
- example-plugin # priority: 0
- aws-lambda # priority: -1899
- azure-functions # priority: -1900
- openwhisk # priority: -1901
- serverless-post-function # priority: -2000
- ext-plugin-post-req # priority: -3000
```
### 2、http-client.env
```http
{
"apisix-test": {
"host": "127.0.0.1",
"listenPort": "27151",
"adminPort": "27152",
"controlPort": "27153",
"X-API-KEY": "ebca3b7b5508638c15ba670c8c7963c7",
"upstreamUrl": "apisix/admin/upstreams",
"routeUrl": "apisix/admin/routes",
"resourceId": "1979"
}
}
```
### 3、create upstream
A book review demo
```http
### create upstream
PUT http://{{host}}:{{adminPort}}/{{upstreamUrl}}/{{resourceId}}
X-API-KEY: {{X-API-KEY}}
Content-Type: application/json
{
"type":"roundrobin",
"nodes":{
"127.0.0.1:39087": 1
}
}
```
### 4、create consumer
```http
### create consumer
PUT {{host}}:{{adminPort}}/apisix/admin/consumers/
X-API-KEY: {{X-API-KEY}}
Content-Type: application/json
{
"username": "7471377788",
"plugins": {
"hmac-auth": {
"access_key": "7471377788",
"encode_uri_params": true,
"validate_request_body": false,
"max_req_body": 524288,
"algorithm": "hmac-sha256",
"clock_skew": 0,
"keep_headers": false,
"secret_key": "bd9facb9e981449a82ff2331865abd1c"
}
}
}
```
### 5、create route wih hmac-auth and proxy-rewrite plugin
```http
### create route
PUT {{host}}:{{adminPort}}/apisix/admin/routes/{{resourceId}}
X-API-KEY: {{X-API-KEY}}
Content-Type: application/json
{
"uri": "/api/v1/books",
"upstream_id": "{{resourceId}}",
"vars": [["http_test1", "==", "1"]],
"priority": 2,
"id": "{{resourceId}}",
"name": "test",
"status": 1,
"plugins": {
"proxy-rewrite": {
"uri": "\/api\/v1\/books",
"disable": false,
"path_match_type": "EQUAL"
},
"hmac-auth": {
"disable": false
}
}
}
```
### 6、request this route
```http
### request
GET http://{{host}}:{{listenPort}}/api/v1/books?id=2
X-HMAC-ACCESS-KEY: 7471377788
X-HMAC-SIGNATURE: EN6AkEta1fJ0E2NUaLaaS6A6XKcaJC7xco5jRjARzDU=
X-HMAC-ALGORITHM: hmac-sha256
test1: 1
```
### Environment
- APISIX version (run `apisix version`): release/2.13 or release/3.2
- Operating system (run `uname -a`): Linux 0000000g-ZDXrgOHSNP
5.4.0-149-generic #166~18.04.1-Ubuntu SMP Fri Apr 21 16:42:44 UTC 2023 x86_64
x86_64 x86_64 GNU/Linux
- OpenResty / Nginx version (run `openresty -V` or `nginx -V`): nginx
version: openresty/1.25.3.1
built with OpenSSL 1.1.1w 11 Sep 2023
TLS SNI support enabled
- etcd version, if relevant (run `curl
http://127.0.0.1:9090/v1/server_info`): v3.5.1
- APISIX Dashboard version, if relevant: no
- Plugin runner version, for issues related to plugin runners:
hmac-auth(version=0.1)、proxy-rewrite(version=0.1)
- LuaRocks version, for installation issues (run `luarocks --version`): 3.8.0
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]