-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Open
Labels
Description
The following settings lead to connections leak in nginx():
server {
listen 8081;
server_name localhost;
proxy_buffering on;
proxy_buffers 8 128k;
proxy_max_temp_file_size 0;
location /a/ {
content_by_lua_block {
local data = ngx.location.capture('/b/')
ngx.say("ok")
}
}
location /b/ {
proxy_pass http://127.0.0.1:8082/get/;
}
location /s/ {
stub_status;
}
}
If http://127.0.0.1:8082/get/ returned more than 1m (8 * 128k) of data then the upstream connection hangs. It still hangs even if the client connection breaks. You can easily see the leakage by configuring nginx with --with-http_stub_status_module option and by requesting http://127.0.0.1:8081/s/. Normal case (before requests):
Active connections: 1
server accepts handled requests
1 1 1
Reading: 0 Writing: 1 Waiting: 0
After 3 requests:
Active connections: 4
server accepts handled requests
5 5 5
Reading: 0 Writing: 4 Waiting: 0
You can setup a server for http://127.0.0.1:8082/get/ with the following configuration:
server {
listen 8082;
server_name localhost;
location /get/ {
content_by_lua_block {
ngx.say(string.rep(" ", 8*1024*1024))
}
}
}
Note that all works fine when proxy_buffering off; is set.
splitice and xiaocang