Fixed worker_shutdown_timeout in various cases.
The ngx_http_upstream_process_upgraded() did not handle c->close request,
and upgraded connections do not use the write filter. As a result,
worker_shutdown_timeout did not affect upgraded connections (ticket #1419).
Fix is to handle c->close in the ngx_http_request_handler() function, thus
covering most of the possible cases in http handling.
Additionally, mail proxying did not handle neither c->close nor c->error,
and thus worker_shutdown_timeout did not work for mail connections. Fix is
to add c->close handling to ngx_mail_proxy_handler().
Also, added explicit handling of c->close to stream proxy,
ngx_stream_proxy_process_connection(). This improves worker_shutdown_timeout
handling in stream, it will no longer wait for some data being transferred
in a connection before closing it, and will also provide appropriate
logging at the "info" level.
Maxim Dounin
4 years ago
881 | 881 |
c = ev->data;
|
882 | 882 |
s = c->data;
|
883 | 883 |
|
884 | |
if (ev->timedout) {
|
|
884 |
if (ev->timedout || c->close) {
|
885 | 885 |
c->log->action = "proxying";
|
886 | 886 |
|
887 | |
if (c == s->connection) {
|
|
887 |
if (c->close) {
|
|
888 |
ngx_log_error(NGX_LOG_INFO, c->log, 0, "shutdown timeout");
|
|
889 |
|
|
890 |
} else if (c == s->connection) {
|
888 | 891 |
ngx_log_error(NGX_LOG_INFO, c->log, NGX_ETIMEDOUT,
|
889 | 892 |
"client timed out");
|
890 | 893 |
c->timedout = 1;
|