发现在method为非get请求时,子请求会一直pending住到超时。
我配置如下:
location = /test {
content_by_lua_block {
local res = ngx.location.capture("/aaa", {method = ngx.HTTP_POST})
ngx.status = res.status
return ngx.say(res.body)
}
}
然后子请求会命中这里:
location / {
proxy_pass http://up;
}
关于up我是这样写的:
upstream up {
server 127.0.0.1:9092;
server 127.0.0.1:9093;
}
server {
listen 9092;
server_name up1;
location / {
proxy_pass http://10.219.204.43:8018;
}
location = /status {
access_log off;
proxy_pass http://10.219.204.43:8018;
}
}
server {
listen 9093;
server_name up2;
location / {
proxy_pass http://10.219.204.43:8018;
}
location = /status {
access_log off;
proxy_pass http://10.219.204.43:8018;
}
}
经过尝试,把ngx.location.capture换成ngx.exec是可行的。
另外,在子请求接收到的地方设置content-length为空则不会一直阻塞至超时,看起来是这个值不正确导致的。
如果负载均衡的配置并非我本机,则也不会出现这个问题。
我该如何去处理这个问题呢?