hi 各位好: 因为怕英文叙述不好,用中文叙述下吧: 我在自定义的插件中,编写access函数,在request中设置请求头Host的值为“xxxxxxxxxxxx:29800” 调用的代码是 function _M.access(conf, ctx) core.request.set_header("Host", "xxxxxxxxxxxx:29800") end 然后我在被代理的后端服务中,打印出请求头Host的值: 调用的代码是: System.out.println("Host:::::::::::::::::::::"+request.getHeader("Host")); 我在浏览器上面发出请求:http://10.110.149.175:9080/xxl-job-admin/ 后端服务打印日志如下: Host:::::::::::::::::::::10.110.149.175 可以看到日志打印的不是我在自定义插件中设置的值,所以,我怀疑,通过core.request.set_header("Host","xxvalue")设置请求头Host的值,是不是apisix的一个bug,或者是apisix对具体的Header(如Host)的值设定有限制。
为了验证我的怀疑,我在原生的nginx.conf中做如下设置: location /xxl-job-admin/ { proxy_pass http://xxlServer; proxy_set_header Host xxxxxxxxxx:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } 通过浏览器访问:http://10.110.152.175:8000/xxl-job-admin/ 后端服务打印日志如下: Host:::::::::::::::::::::xxxxxxxxxx:8000 与我在nginx.conf中设置的Host是相同的 综上,可以看出我在自定义插件access方法中,通过函数 core.request.set_header("Host","xxvalue") 设置请求头Host的值,是有问题的,请各位帮忙看下问题所在,谢谢! -- 此致! 敬礼 ----曹勇 TEL:15910514083