Mercurial > hg > nginx-quic
comparison src/http/modules/proxy/ngx_http_proxy_handler.c @ 306:6b91bfbc4123
nginx-0.0.3-2004-04-05-00:32:09 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Sun, 04 Apr 2004 20:32:09 +0000 |
parents | 4b1a3a4acc60 |
children | f5431a4bbc7d |
comparison
equal
deleted
inserted
replaced
305:4b1a3a4acc60 | 306:6b91bfbc4123 |
---|---|
367 } | 367 } |
368 | 368 |
369 | 369 |
370 void ngx_http_proxy_check_broken_connection(ngx_event_t *ev) | 370 void ngx_http_proxy_check_broken_connection(ngx_event_t *ev) |
371 { | 371 { |
372 int n; | |
373 char buf[1]; | |
374 ngx_err_t err; | |
372 ngx_connection_t *c; | 375 ngx_connection_t *c; |
373 ngx_http_request_t *r; | 376 ngx_http_request_t *r; |
374 ngx_http_proxy_ctx_t *p; | 377 ngx_http_proxy_ctx_t *p; |
375 | 378 |
376 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, ev->log, 0, | 379 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, ev->log, 0, |
377 "http proxy check client, write event:%d", ev->write); | 380 "http proxy check client, write event:%d", ev->write); |
378 | 381 |
379 c = ev->data; | |
380 r = c->data; | |
381 p = ngx_http_get_module_ctx(r, ngx_http_proxy_module); | |
382 | |
383 #if (HAVE_KQUEUE) | 382 #if (HAVE_KQUEUE) |
384 | 383 |
385 /* TODO: KEVENT_EVENT */ | 384 if (ngx_event_flags & NGX_HAVE_KQUEUE_EVENT) { |
386 | 385 |
387 if (ev->kq_eof) { | 386 if (!ev->kq_eof) { |
387 return; | |
388 } | |
389 | |
390 c = ev->data; | |
391 r = c->data; | |
392 p = ngx_http_get_module_ctx(r, ngx_http_proxy_module); | |
393 | |
388 ev->eof = 1; | 394 ev->eof = 1; |
389 | 395 |
390 if (ev->kq_errno) { | 396 if (ev->kq_errno) { |
391 ev->error = 1; | 397 ev->error = 1; |
392 } | 398 } |
405 "prematurely connection"); | 411 "prematurely connection"); |
406 | 412 |
407 if (p->upstream == NULL || p->upstream->peer.connection == NULL) { | 413 if (p->upstream == NULL || p->upstream->peer.connection == NULL) { |
408 ngx_http_proxy_finalize_request(p, NGX_HTTP_CLIENT_CLOSED_REQUEST); | 414 ngx_http_proxy_finalize_request(p, NGX_HTTP_CLIENT_CLOSED_REQUEST); |
409 } | 415 } |
410 } | 416 |
411 | 417 return; |
412 #else | 418 } |
419 | |
420 #endif | |
421 | |
422 c = ev->data; | |
423 r = c->data; | |
424 p = ngx_http_get_module_ctx(r, ngx_http_proxy_module); | |
413 | 425 |
414 n = recv(c->fd, buf, 1, MSG_PEEK); | 426 n = recv(c->fd, buf, 1, MSG_PEEK); |
415 | 427 |
416 if (n > 0) { | 428 if (n > 0) { |
417 /* TODO: delete level */ | 429 if ((ngx_event_flags & NGX_USE_LEVEL_EVENT) && ev->active) { |
430 if (ngx_del_event(ev, NGX_READ_EVENT, 0) == NGX_ERROR) { | |
431 ngx_http_proxy_finalize_request(p, | |
432 NGX_HTTP_INTERNAL_SERVER_ERROR); | |
433 } | |
434 } | |
435 | |
418 return; | 436 return; |
419 } | 437 } |
438 | |
439 ev->eof = 1; | |
420 | 440 |
421 if (n == -1) { | 441 if (n == -1) { |
422 err = ngx_socket_errno; | 442 err = ngx_socket_errno; |
423 if (err == NGX_EAGAIN) { | 443 if (err == NGX_EAGAIN) { |
424 return; | 444 return; |
425 } | 445 } |
426 | 446 |
427 ev->error = 1; | 447 ev->error = 1; |
428 | 448 |
429 } else if (n == 0) { | 449 } else { |
450 /* n == 0 */ | |
430 err = 0; | 451 err = 0; |
431 ev->eof = 1; | |
432 } | 452 } |
433 | 453 |
434 if (!p->cachable && p->upstream->peer.connection) { | 454 if (!p->cachable && p->upstream->peer.connection) { |
435 ngx_log_error(NGX_LOG_INFO, ev->log, err, | 455 ngx_log_error(NGX_LOG_INFO, ev->log, err, |
436 "client have closed prematurely connection, " | 456 "client have closed prematurely connection, " |
437 "so upstream connection is closed too"); | 457 "so upstream connection is closed too"); |
438 ngx_http_proxy_finalize_request(p, NGX_HTTP_CLIENT_CLOSED_REQUEST); | 458 ngx_http_proxy_finalize_request(p, NGX_HTTP_CLIENT_CLOSED_REQUEST); |
439 return; | 459 return; |
440 } | 460 } |
441 | 461 |
442 ngx_log_error(NGX_LOG_INFO, ev->log, ev->err, | 462 ngx_log_error(NGX_LOG_INFO, ev->log, err, |
443 "client have closed prematurely connection"); | 463 "client have closed prematurely connection"); |
444 | 464 |
445 if (p->upstream == NULL || p->upstream->peer.connection == NULL) { | 465 if (p->upstream == NULL || p->upstream->peer.connection == NULL) { |
446 ngx_http_proxy_finalize_request(p, NGX_HTTP_CLIENT_CLOSED_REQUEST); | 466 ngx_http_proxy_finalize_request(p, NGX_HTTP_CLIENT_CLOSED_REQUEST); |
447 } | 467 } |
448 | |
449 #endif | |
450 } | 468 } |
451 | 469 |
452 | 470 |
453 void ngx_http_proxy_busy_lock_handler(ngx_event_t *rev) | 471 void ngx_http_proxy_busy_lock_handler(ngx_event_t *rev) |
454 { | 472 { |
868 | 886 |
869 ngx_conf_merge_msec_value(conf->read_timeout, prev->read_timeout, 30000); | 887 ngx_conf_merge_msec_value(conf->read_timeout, prev->read_timeout, 30000); |
870 | 888 |
871 ngx_conf_merge_size_value(conf->header_buffer_size, | 889 ngx_conf_merge_size_value(conf->header_buffer_size, |
872 prev->header_buffer_size, 4096); | 890 prev->header_buffer_size, 4096); |
891 | |
873 ngx_conf_merge_bufs_value(conf->bufs, prev->bufs, 8, 4096); | 892 ngx_conf_merge_bufs_value(conf->bufs, prev->bufs, 8, 4096); |
893 | |
894 if (conf->bufs.num < 2) { | |
895 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, | |
896 "there must be at least 2 \"proxy_buffers\""); | |
897 return NGX_CONF_ERROR; | |
898 } | |
874 | 899 |
875 size = conf->header_buffer_size; | 900 size = conf->header_buffer_size; |
876 if (size < conf->bufs.size) { | 901 if (size < conf->bufs.size) { |
877 size = conf->bufs.size; | 902 size = conf->bufs.size; |
878 } | 903 } |
887 } else if (conf->busy_buffers_size < size) { | 912 } else if (conf->busy_buffers_size < size) { |
888 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, | 913 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, |
889 "\"proxy_busy_buffers_size\" must be equal or bigger than " | 914 "\"proxy_busy_buffers_size\" must be equal or bigger than " |
890 "maximum of the value of \"proxy_header_buffer_size\" and " | 915 "maximum of the value of \"proxy_header_buffer_size\" and " |
891 "one of the \"proxy_buffers\""); | 916 "one of the \"proxy_buffers\""); |
917 | |
918 return NGX_CONF_ERROR; | |
919 | |
920 } else if (conf->busy_buffers_size > (conf->bufs.num - 1) * conf->bufs.size) | |
921 { | |
922 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, | |
923 "\"proxy_busy_buffers_size\" must be less than " | |
924 "the size of all \"proxy_buffers\" minus one buffer"); | |
892 | 925 |
893 return NGX_CONF_ERROR; | 926 return NGX_CONF_ERROR; |
894 } | 927 } |
895 | 928 |
896 | 929 |