annotate src/http/ngx_http_upstream.c @ 4037:f4dd627c657f stable-1.0

Merge of r4035: Cache size accounting fix: actual cache size on disk was less than needed by sum of sizes of files loaded by worker processes themselves while cache loader was running. The bug has been introduced in r3900.
author Igor Sysoev <igor@sysoev.ru>
date Mon, 29 Aug 2011 09:35:00 +0000
parents f1f194ceab16
children 10fbb8f02a45 2d062c031fff
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2 /*
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3 * Copyright (C) Igor Sysoev
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4 */
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
5
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
6
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7 #include <ngx_config.h>
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #include <ngx_core.h>
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9 #include <ngx_http.h>
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
11
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
12 #if (NGX_HTTP_CACHE)
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
13 static ngx_int_t ngx_http_upstream_cache(ngx_http_request_t *r,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
14 ngx_http_upstream_t *u);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
15 static ngx_int_t ngx_http_upstream_cache_send(ngx_http_request_t *r,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
16 ngx_http_upstream_t *u);
2952
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
17 static ngx_int_t ngx_http_upstream_cache_status(ngx_http_request_t *r,
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
18 ngx_http_variable_value_t *v, uintptr_t data);
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
19 #endif
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
20
3052
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
21 static void ngx_http_upstream_init_request(ngx_http_request_t *r);
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
22 static void ngx_http_upstream_resolve_handler(ngx_resolver_ctx_t *ctx);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
23 static void ngx_http_upstream_rd_check_broken_connection(ngx_http_request_t *r);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
24 static void ngx_http_upstream_wr_check_broken_connection(ngx_http_request_t *r);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
25 static void ngx_http_upstream_check_broken_connection(ngx_http_request_t *r,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
26 ngx_event_t *ev);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
27 static void ngx_http_upstream_connect(ngx_http_request_t *r,
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
28 ngx_http_upstream_t *u);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
29 static ngx_int_t ngx_http_upstream_reinit(ngx_http_request_t *r,
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
30 ngx_http_upstream_t *u);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
31 static void ngx_http_upstream_send_request(ngx_http_request_t *r,
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
32 ngx_http_upstream_t *u);
2386
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
33 static void ngx_http_upstream_send_request_handler(ngx_http_request_t *r,
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
34 ngx_http_upstream_t *u);
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
35 static void ngx_http_upstream_process_header(ngx_http_request_t *r,
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
36 ngx_http_upstream_t *u);
2268
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
37 static ngx_int_t ngx_http_upstream_test_next(ngx_http_request_t *r,
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
38 ngx_http_upstream_t *u);
2267
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
39 static ngx_int_t ngx_http_upstream_intercept_errors(ngx_http_request_t *r,
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
40 ngx_http_upstream_t *u);
1153
c843f3df3b85 separate ngx_http_upstream_test_connect() and
Igor Sysoev <igor@sysoev.ru>
parents: 1143
diff changeset
41 static ngx_int_t ngx_http_upstream_test_connect(ngx_connection_t *c);
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
42 static ngx_int_t ngx_http_upstream_process_headers(ngx_http_request_t *r,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
43 ngx_http_upstream_t *u);
2386
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
44 static void ngx_http_upstream_process_body_in_memory(ngx_http_request_t *r,
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
45 ngx_http_upstream_t *u);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
46 static void ngx_http_upstream_send_response(ngx_http_request_t *r,
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
47 ngx_http_upstream_t *u);
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
48 static void
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
49 ngx_http_upstream_process_non_buffered_downstream(ngx_http_request_t *r);
2386
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
50 static void
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
51 ngx_http_upstream_process_non_buffered_upstream(ngx_http_request_t *r,
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
52 ngx_http_upstream_t *u);
2381
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
53 static void
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
54 ngx_http_upstream_process_non_buffered_request(ngx_http_request_t *r,
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
55 ngx_uint_t do_write);
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
56 static ngx_int_t ngx_http_upstream_non_buffered_filter_init(void *data);
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
57 static ngx_int_t ngx_http_upstream_non_buffered_filter(void *data,
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
58 ssize_t bytes);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
59 static void ngx_http_upstream_process_downstream(ngx_http_request_t *r);
2386
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
60 static void ngx_http_upstream_process_upstream(ngx_http_request_t *r,
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
61 ngx_http_upstream_t *u);
2381
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
62 static void ngx_http_upstream_process_request(ngx_http_request_t *r);
1291
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
63 static void ngx_http_upstream_store(ngx_http_request_t *r,
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
64 ngx_http_upstream_t *u);
2386
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
65 static void ngx_http_upstream_dummy_handler(ngx_http_request_t *r,
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
66 ngx_http_upstream_t *u);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
67 static void ngx_http_upstream_next(ngx_http_request_t *r,
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
68 ngx_http_upstream_t *u, ngx_uint_t ft_type);
569
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
69 static void ngx_http_upstream_cleanup(void *data);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
70 static void ngx_http_upstream_finalize_request(ngx_http_request_t *r,
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
71 ngx_http_upstream_t *u, ngx_int_t rc);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
72
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
73 static ngx_int_t ngx_http_upstream_process_header_line(ngx_http_request_t *r,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
74 ngx_table_elt_t *h, ngx_uint_t offset);
3669
1f5841b1fcd7 treat Set-Cookie as a header that forbids caching
Igor Sysoev <igor@sysoev.ru>
parents: 3667
diff changeset
75 static ngx_int_t ngx_http_upstream_process_set_cookie(ngx_http_request_t *r,
1f5841b1fcd7 treat Set-Cookie as a header that forbids caching
Igor Sysoev <igor@sysoev.ru>
parents: 3667
diff changeset
76 ngx_table_elt_t *h, ngx_uint_t offset);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
77 static ngx_int_t
2669
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
78 ngx_http_upstream_process_cache_control(ngx_http_request_t *r,
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
79 ngx_table_elt_t *h, ngx_uint_t offset);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
80 static ngx_int_t ngx_http_upstream_ignore_header_line(ngx_http_request_t *r,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
81 ngx_table_elt_t *h, ngx_uint_t offset);
2666
81556a9b6488 support Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2665
diff changeset
82 static ngx_int_t ngx_http_upstream_process_expires(ngx_http_request_t *r,
81556a9b6488 support Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2665
diff changeset
83 ngx_table_elt_t *h, ngx_uint_t offset);
2663
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
84 static ngx_int_t ngx_http_upstream_process_accel_expires(ngx_http_request_t *r,
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
85 ngx_table_elt_t *h, ngx_uint_t offset);
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
86 static ngx_int_t ngx_http_upstream_process_limit_rate(ngx_http_request_t *r,
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
87 ngx_table_elt_t *h, ngx_uint_t offset);
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
88 static ngx_int_t ngx_http_upstream_process_buffering(ngx_http_request_t *r,
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
89 ngx_table_elt_t *h, ngx_uint_t offset);
657
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
90 static ngx_int_t ngx_http_upstream_process_charset(ngx_http_request_t *r,
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
91 ngx_table_elt_t *h, ngx_uint_t offset);
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
92 static ngx_int_t ngx_http_upstream_copy_header_line(ngx_http_request_t *r,
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
93 ngx_table_elt_t *h, ngx_uint_t offset);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
94 static ngx_int_t
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
95 ngx_http_upstream_copy_multi_header_lines(ngx_http_request_t *r,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
96 ngx_table_elt_t *h, ngx_uint_t offset);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
97 static ngx_int_t ngx_http_upstream_copy_content_type(ngx_http_request_t *r,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
98 ngx_table_elt_t *h, ngx_uint_t offset);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
99 static ngx_int_t ngx_http_upstream_copy_content_length(ngx_http_request_t *r,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
100 ngx_table_elt_t *h, ngx_uint_t offset);
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
101 static ngx_int_t ngx_http_upstream_copy_last_modified(ngx_http_request_t *r,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
102 ngx_table_elt_t *h, ngx_uint_t offset);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
103 static ngx_int_t ngx_http_upstream_rewrite_location(ngx_http_request_t *r,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
104 ngx_table_elt_t *h, ngx_uint_t offset);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
105 static ngx_int_t ngx_http_upstream_rewrite_refresh(ngx_http_request_t *r,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
106 ngx_table_elt_t *h, ngx_uint_t offset);
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
107 static ngx_int_t ngx_http_upstream_copy_allow_ranges(ngx_http_request_t *r,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
108 ngx_table_elt_t *h, ngx_uint_t offset);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
109
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
110 #if (NGX_HTTP_GZIP)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
111 static ngx_int_t ngx_http_upstream_copy_content_encoding(ngx_http_request_t *r,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
112 ngx_table_elt_t *h, ngx_uint_t offset);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
113 #endif
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
114
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
115 static ngx_int_t ngx_http_upstream_add_variables(ngx_conf_t *cf);
1181
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
116 static ngx_int_t ngx_http_upstream_addr_variable(ngx_http_request_t *r,
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
117 ngx_http_variable_value_t *v, uintptr_t data);
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
118 static ngx_int_t ngx_http_upstream_status_variable(ngx_http_request_t *r,
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
119 ngx_http_variable_value_t *v, uintptr_t data);
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
120 static ngx_int_t ngx_http_upstream_response_time_variable(ngx_http_request_t *r,
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
121 ngx_http_variable_value_t *v, uintptr_t data);
2402
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
122 static ngx_int_t ngx_http_upstream_response_length_variable(
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
123 ngx_http_request_t *r, ngx_http_variable_value_t *v, uintptr_t data);
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
124
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
125 static char *ngx_http_upstream(ngx_conf_t *cf, ngx_command_t *cmd, void *dummy);
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
126 static char *ngx_http_upstream_server(ngx_conf_t *cf, ngx_command_t *cmd,
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
127 void *conf);
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
128
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
129 static void *ngx_http_upstream_create_main_conf(ngx_conf_t *cf);
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
130 static char *ngx_http_upstream_init_main_conf(ngx_conf_t *cf, void *conf);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
131
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
132 #if (NGX_HTTP_SSL)
591
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
133 static void ngx_http_upstream_ssl_init_connection(ngx_http_request_t *,
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
134 ngx_http_upstream_t *u, ngx_connection_t *c);
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
135 static void ngx_http_upstream_ssl_handshake(ngx_connection_t *c);
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
136 #endif
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
137
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
138
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
139 ngx_http_upstream_header_t ngx_http_upstream_headers_in[] = {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
140
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
141 { ngx_string("Status"),
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
142 ngx_http_upstream_process_header_line,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
143 offsetof(ngx_http_upstream_headers_in_t, status),
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
144 ngx_http_upstream_copy_header_line, 0, 0 },
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
145
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
146 { ngx_string("Content-Type"),
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
147 ngx_http_upstream_process_header_line,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
148 offsetof(ngx_http_upstream_headers_in_t, content_type),
673
b80f94fa2197 nginx-0.3.58-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
149 ngx_http_upstream_copy_content_type, 0, 1 },
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
150
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
151 { ngx_string("Content-Length"),
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
152 ngx_http_upstream_process_header_line,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
153 offsetof(ngx_http_upstream_headers_in_t, content_length),
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
154 ngx_http_upstream_copy_content_length, 0, 0 },
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
155
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
156 { ngx_string("Date"),
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
157 ngx_http_upstream_process_header_line,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
158 offsetof(ngx_http_upstream_headers_in_t, date),
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
159 ngx_http_upstream_copy_header_line,
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
160 offsetof(ngx_http_headers_out_t, date), 0 },
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
161
1291
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
162 { ngx_string("Last-Modified"),
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
163 ngx_http_upstream_process_header_line,
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
164 offsetof(ngx_http_upstream_headers_in_t, last_modified),
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
165 ngx_http_upstream_copy_last_modified, 0, 0 },
1291
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
166
3037
0278f13b04c5 process upstream ETag header
Igor Sysoev <igor@sysoev.ru>
parents: 3032
diff changeset
167 { ngx_string("ETag"),
0278f13b04c5 process upstream ETag header
Igor Sysoev <igor@sysoev.ru>
parents: 3032
diff changeset
168 ngx_http_upstream_process_header_line,
0278f13b04c5 process upstream ETag header
Igor Sysoev <igor@sysoev.ru>
parents: 3032
diff changeset
169 offsetof(ngx_http_upstream_headers_in_t, etag),
0278f13b04c5 process upstream ETag header
Igor Sysoev <igor@sysoev.ru>
parents: 3032
diff changeset
170 ngx_http_upstream_copy_header_line,
0278f13b04c5 process upstream ETag header
Igor Sysoev <igor@sysoev.ru>
parents: 3032
diff changeset
171 offsetof(ngx_http_headers_out_t, etag), 0 },
0278f13b04c5 process upstream ETag header
Igor Sysoev <igor@sysoev.ru>
parents: 3032
diff changeset
172
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
173 { ngx_string("Server"),
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
174 ngx_http_upstream_process_header_line,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
175 offsetof(ngx_http_upstream_headers_in_t, server),
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
176 ngx_http_upstream_copy_header_line,
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
177 offsetof(ngx_http_headers_out_t, server), 0 },
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
178
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
179 { ngx_string("WWW-Authenticate"),
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
180 ngx_http_upstream_process_header_line,
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
181 offsetof(ngx_http_upstream_headers_in_t, www_authenticate),
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
182 ngx_http_upstream_copy_header_line, 0, 0 },
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
183
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
184 { ngx_string("Location"),
2140
dce5ddef5af9 if upstream sent a location header without status use 302
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
185 ngx_http_upstream_process_header_line,
dce5ddef5af9 if upstream sent a location header without status use 302
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
186 offsetof(ngx_http_upstream_headers_in_t, location),
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
187 ngx_http_upstream_rewrite_location, 0, 0 },
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
188
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
189 { ngx_string("Refresh"),
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
190 ngx_http_upstream_ignore_header_line, 0,
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
191 ngx_http_upstream_rewrite_refresh, 0, 0 },
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
192
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
193 { ngx_string("Set-Cookie"),
3669
1f5841b1fcd7 treat Set-Cookie as a header that forbids caching
Igor Sysoev <igor@sysoev.ru>
parents: 3667
diff changeset
194 ngx_http_upstream_process_set_cookie, 0,
531
c3bd8cdabb8f nginx-0.1.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 529
diff changeset
195 ngx_http_upstream_copy_header_line, 0, 1 },
c3bd8cdabb8f nginx-0.1.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 529
diff changeset
196
c3bd8cdabb8f nginx-0.1.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 529
diff changeset
197 { ngx_string("Content-Disposition"),
c3bd8cdabb8f nginx-0.1.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 529
diff changeset
198 ngx_http_upstream_ignore_header_line, 0,
c3bd8cdabb8f nginx-0.1.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 529
diff changeset
199 ngx_http_upstream_copy_header_line, 0, 1 },
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
200
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
201 { ngx_string("Cache-Control"),
2669
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
202 ngx_http_upstream_process_cache_control, 0,
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
203 ngx_http_upstream_copy_multi_header_lines,
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
204 offsetof(ngx_http_headers_out_t, cache_control), 1 },
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
205
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
206 { ngx_string("Expires"),
2666
81556a9b6488 support Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2665
diff changeset
207 ngx_http_upstream_process_expires, 0,
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
208 ngx_http_upstream_copy_header_line,
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
209 offsetof(ngx_http_headers_out_t, expires), 1 },
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
210
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
211 { ngx_string("Accept-Ranges"),
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
212 ngx_http_upstream_process_header_line,
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
213 offsetof(ngx_http_upstream_headers_in_t, accept_ranges),
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
214 ngx_http_upstream_copy_allow_ranges,
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
215 offsetof(ngx_http_headers_out_t, accept_ranges), 1 },
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
216
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
217 { ngx_string("Connection"),
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
218 ngx_http_upstream_ignore_header_line, 0,
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
219 ngx_http_upstream_ignore_header_line, 0, 0 },
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
220
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
221 { ngx_string("Keep-Alive"),
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
222 ngx_http_upstream_ignore_header_line, 0,
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
223 ngx_http_upstream_ignore_header_line, 0, 0 },
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
224
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
225 { ngx_string("X-Powered-By"),
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
226 ngx_http_upstream_ignore_header_line, 0,
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
227 ngx_http_upstream_copy_header_line, 0, 0 },
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
228
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
229 { ngx_string("X-Accel-Expires"),
2664
f903114355d4 zero field
Igor Sysoev <igor@sysoev.ru>
parents: 2663
diff changeset
230 ngx_http_upstream_process_accel_expires, 0,
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
231 ngx_http_upstream_copy_header_line, 0, 0 },
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
232
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
233 { ngx_string("X-Accel-Redirect"),
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
234 ngx_http_upstream_process_header_line,
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
235 offsetof(ngx_http_upstream_headers_in_t, x_accel_redirect),
3003
b630e7d095b3 allow to proxy_pass_header/fastcgi_pass_header "X-Accel-Redirect",
Igor Sysoev <igor@sysoev.ru>
parents: 2971
diff changeset
236 ngx_http_upstream_copy_header_line, 0, 0 },
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
237
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
238 { ngx_string("X-Accel-Limit-Rate"),
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
239 ngx_http_upstream_process_limit_rate, 0,
3003
b630e7d095b3 allow to proxy_pass_header/fastcgi_pass_header "X-Accel-Redirect",
Igor Sysoev <igor@sysoev.ru>
parents: 2971
diff changeset
240 ngx_http_upstream_copy_header_line, 0, 0 },
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
241
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
242 { ngx_string("X-Accel-Buffering"),
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
243 ngx_http_upstream_process_buffering, 0,
3003
b630e7d095b3 allow to proxy_pass_header/fastcgi_pass_header "X-Accel-Redirect",
Igor Sysoev <igor@sysoev.ru>
parents: 2971
diff changeset
244 ngx_http_upstream_copy_header_line, 0, 0 },
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
245
657
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
246 { ngx_string("X-Accel-Charset"),
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
247 ngx_http_upstream_process_charset, 0,
3003
b630e7d095b3 allow to proxy_pass_header/fastcgi_pass_header "X-Accel-Redirect",
Igor Sysoev <igor@sysoev.ru>
parents: 2971
diff changeset
248 ngx_http_upstream_copy_header_line, 0, 0 },
657
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
249
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
250 #if (NGX_HTTP_GZIP)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
251 { ngx_string("Content-Encoding"),
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
252 ngx_http_upstream_process_header_line,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
253 offsetof(ngx_http_upstream_headers_in_t, content_encoding),
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
254 ngx_http_upstream_copy_content_encoding, 0, 0 },
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
255 #endif
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
256
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
257 { ngx_null_string, NULL, 0, NULL, 0, 0 }
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
258 };
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
259
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
260
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
261 static ngx_command_t ngx_http_upstream_commands[] = {
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
262
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
263 { ngx_string("upstream"),
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
264 NGX_HTTP_MAIN_CONF|NGX_CONF_BLOCK|NGX_CONF_TAKE1,
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
265 ngx_http_upstream,
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
266 0,
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
267 0,
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
268 NULL },
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
269
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
270 { ngx_string("server"),
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
271 NGX_HTTP_UPS_CONF|NGX_CONF_1MORE,
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
272 ngx_http_upstream_server,
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
273 NGX_HTTP_SRV_CONF_OFFSET,
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
274 0,
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
275 NULL },
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
276
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
277 ngx_null_command
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
278 };
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
279
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
280
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
281 static ngx_http_module_t ngx_http_upstream_module_ctx = {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
282 ngx_http_upstream_add_variables, /* preconfiguration */
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
283 NULL, /* postconfiguration */
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
284
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
285 ngx_http_upstream_create_main_conf, /* create main configuration */
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
286 ngx_http_upstream_init_main_conf, /* init main configuration */
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
287
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
288 NULL, /* create server configuration */
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
289 NULL, /* merge server configuration */
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
290
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
291 NULL, /* create location configuration */
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
292 NULL /* merge location configuration */
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
293 };
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
294
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
295
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
296 ngx_module_t ngx_http_upstream_module = {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
297 NGX_MODULE_V1,
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
298 &ngx_http_upstream_module_ctx, /* module context */
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
299 ngx_http_upstream_commands, /* module directives */
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
300 NGX_HTTP_MODULE, /* module type */
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 537
diff changeset
301 NULL, /* init master */
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
302 NULL, /* init module */
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 537
diff changeset
303 NULL, /* init process */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 537
diff changeset
304 NULL, /* init thread */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 537
diff changeset
305 NULL, /* exit thread */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 537
diff changeset
306 NULL, /* exit process */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 537
diff changeset
307 NULL, /* exit master */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 537
diff changeset
308 NGX_MODULE_V1_PADDING
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
309 };
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
310
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
311
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
312 static ngx_http_variable_t ngx_http_upstream_vars[] = {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
313
1181
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
314 { ngx_string("upstream_addr"), NULL,
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
315 ngx_http_upstream_addr_variable, 0,
3898
bd1222fb0192 allow to use $upstream_... variables in SSI
Igor Sysoev <igor@sysoev.ru>
parents: 3879
diff changeset
316 NGX_HTTP_VAR_NOCACHEABLE, 0 },
1181
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
317
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 629
diff changeset
318 { ngx_string("upstream_status"), NULL,
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
319 ngx_http_upstream_status_variable, 0,
3898
bd1222fb0192 allow to use $upstream_... variables in SSI
Igor Sysoev <igor@sysoev.ru>
parents: 3879
diff changeset
320 NGX_HTTP_VAR_NOCACHEABLE, 0 },
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
321
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 629
diff changeset
322 { ngx_string("upstream_response_time"), NULL,
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
323 ngx_http_upstream_response_time_variable, 0,
3898
bd1222fb0192 allow to use $upstream_... variables in SSI
Igor Sysoev <igor@sysoev.ru>
parents: 3879
diff changeset
324 NGX_HTTP_VAR_NOCACHEABLE, 0 },
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
325
2402
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
326 { ngx_string("upstream_response_length"), NULL,
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
327 ngx_http_upstream_response_length_variable, 0,
3898
bd1222fb0192 allow to use $upstream_... variables in SSI
Igor Sysoev <igor@sysoev.ru>
parents: 3879
diff changeset
328 NGX_HTTP_VAR_NOCACHEABLE, 0 },
2402
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
329
2957
b4f39842523b fix building --without-http-cache, broken in r2953
Igor Sysoev <igor@sysoev.ru>
parents: 2953
diff changeset
330 #if (NGX_HTTP_CACHE)
b4f39842523b fix building --without-http-cache, broken in r2953
Igor Sysoev <igor@sysoev.ru>
parents: 2953
diff changeset
331
2952
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
332 { ngx_string("upstream_cache_status"), NULL,
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
333 ngx_http_upstream_cache_status, 0,
3898
bd1222fb0192 allow to use $upstream_... variables in SSI
Igor Sysoev <igor@sysoev.ru>
parents: 3879
diff changeset
334 NGX_HTTP_VAR_NOCACHEABLE, 0 },
2952
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
335
2957
b4f39842523b fix building --without-http-cache, broken in r2953
Igor Sysoev <igor@sysoev.ru>
parents: 2953
diff changeset
336 #endif
b4f39842523b fix building --without-http-cache, broken in r2953
Igor Sysoev <igor@sysoev.ru>
parents: 2953
diff changeset
337
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 629
diff changeset
338 { ngx_null_string, NULL, NULL, 0, 0, 0 }
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
339 };
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
340
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
341
2268
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
342 static ngx_http_upstream_next_t ngx_http_upstream_next_errors[] = {
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
343 { 500, NGX_HTTP_UPSTREAM_FT_HTTP_500 },
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
344 { 502, NGX_HTTP_UPSTREAM_FT_HTTP_502 },
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
345 { 503, NGX_HTTP_UPSTREAM_FT_HTTP_503 },
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
346 { 504, NGX_HTTP_UPSTREAM_FT_HTTP_504 },
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
347 { 404, NGX_HTTP_UPSTREAM_FT_HTTP_404 },
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
348 { 0, 0 }
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
349 };
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
350
2875
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2874
diff changeset
351
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2874
diff changeset
352 ngx_conf_bitmask_t ngx_http_upstream_cache_method_mask[] = {
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2874
diff changeset
353 { ngx_string("GET"), NGX_HTTP_GET},
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2874
diff changeset
354 { ngx_string("HEAD"), NGX_HTTP_HEAD },
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2874
diff changeset
355 { ngx_string("POST"), NGX_HTTP_POST },
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2874
diff changeset
356 { ngx_null_string, 0 }
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2874
diff changeset
357 };
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2874
diff changeset
358
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2874
diff changeset
359
3667
12bd9e26fadb use shared ngx_http_upstream_ignore_headers_masks[]
Igor Sysoev <igor@sysoev.ru>
parents: 3527
diff changeset
360 ngx_conf_bitmask_t ngx_http_upstream_ignore_headers_masks[] = {
12bd9e26fadb use shared ngx_http_upstream_ignore_headers_masks[]
Igor Sysoev <igor@sysoev.ru>
parents: 3527
diff changeset
361 { ngx_string("X-Accel-Redirect"), NGX_HTTP_UPSTREAM_IGN_XA_REDIRECT },
12bd9e26fadb use shared ngx_http_upstream_ignore_headers_masks[]
Igor Sysoev <igor@sysoev.ru>
parents: 3527
diff changeset
362 { ngx_string("X-Accel-Expires"), NGX_HTTP_UPSTREAM_IGN_XA_EXPIRES },
12bd9e26fadb use shared ngx_http_upstream_ignore_headers_masks[]
Igor Sysoev <igor@sysoev.ru>
parents: 3527
diff changeset
363 { ngx_string("Expires"), NGX_HTTP_UPSTREAM_IGN_EXPIRES },
12bd9e26fadb use shared ngx_http_upstream_ignore_headers_masks[]
Igor Sysoev <igor@sysoev.ru>
parents: 3527
diff changeset
364 { ngx_string("Cache-Control"), NGX_HTTP_UPSTREAM_IGN_CACHE_CONTROL },
3669
1f5841b1fcd7 treat Set-Cookie as a header that forbids caching
Igor Sysoev <igor@sysoev.ru>
parents: 3667
diff changeset
365 { ngx_string("Set-Cookie"), NGX_HTTP_UPSTREAM_IGN_SET_COOKIE },
3667
12bd9e26fadb use shared ngx_http_upstream_ignore_headers_masks[]
Igor Sysoev <igor@sysoev.ru>
parents: 3527
diff changeset
366 { ngx_null_string, 0 }
12bd9e26fadb use shared ngx_http_upstream_ignore_headers_masks[]
Igor Sysoev <igor@sysoev.ru>
parents: 3527
diff changeset
367 };
12bd9e26fadb use shared ngx_http_upstream_ignore_headers_masks[]
Igor Sysoev <igor@sysoev.ru>
parents: 3527
diff changeset
368
12bd9e26fadb use shared ngx_http_upstream_ignore_headers_masks[]
Igor Sysoev <igor@sysoev.ru>
parents: 3527
diff changeset
369
3006
95972b9e790b ngx_http_upstream_create() to cleanup the previous upstream after
Igor Sysoev <igor@sysoev.ru>
parents: 3004
diff changeset
370 ngx_int_t
95972b9e790b ngx_http_upstream_create() to cleanup the previous upstream after
Igor Sysoev <igor@sysoev.ru>
parents: 3004
diff changeset
371 ngx_http_upstream_create(ngx_http_request_t *r)
95972b9e790b ngx_http_upstream_create() to cleanup the previous upstream after
Igor Sysoev <igor@sysoev.ru>
parents: 3004
diff changeset
372 {
95972b9e790b ngx_http_upstream_create() to cleanup the previous upstream after
Igor Sysoev <igor@sysoev.ru>
parents: 3004
diff changeset
373 ngx_http_upstream_t *u;
95972b9e790b ngx_http_upstream_create() to cleanup the previous upstream after
Igor Sysoev <igor@sysoev.ru>
parents: 3004
diff changeset
374
95972b9e790b ngx_http_upstream_create() to cleanup the previous upstream after
Igor Sysoev <igor@sysoev.ru>
parents: 3004
diff changeset
375 u = r->upstream;
95972b9e790b ngx_http_upstream_create() to cleanup the previous upstream after
Igor Sysoev <igor@sysoev.ru>
parents: 3004
diff changeset
376
95972b9e790b ngx_http_upstream_create() to cleanup the previous upstream after
Igor Sysoev <igor@sysoev.ru>
parents: 3004
diff changeset
377 if (u && u->cleanup) {
3112
5ddc9458e4bb increase request counter before an upstream cleanup because the cleanup
Igor Sysoev <igor@sysoev.ru>
parents: 3083
diff changeset
378 r->main->count++;
3006
95972b9e790b ngx_http_upstream_create() to cleanup the previous upstream after
Igor Sysoev <igor@sysoev.ru>
parents: 3004
diff changeset
379 ngx_http_upstream_cleanup(r);
95972b9e790b ngx_http_upstream_create() to cleanup the previous upstream after
Igor Sysoev <igor@sysoev.ru>
parents: 3004
diff changeset
380 }
95972b9e790b ngx_http_upstream_create() to cleanup the previous upstream after
Igor Sysoev <igor@sysoev.ru>
parents: 3004
diff changeset
381
95972b9e790b ngx_http_upstream_create() to cleanup the previous upstream after
Igor Sysoev <igor@sysoev.ru>
parents: 3004
diff changeset
382 u = ngx_pcalloc(r->pool, sizeof(ngx_http_upstream_t));
95972b9e790b ngx_http_upstream_create() to cleanup the previous upstream after
Igor Sysoev <igor@sysoev.ru>
parents: 3004
diff changeset
383 if (u == NULL) {
95972b9e790b ngx_http_upstream_create() to cleanup the previous upstream after
Igor Sysoev <igor@sysoev.ru>
parents: 3004
diff changeset
384 return NGX_ERROR;
95972b9e790b ngx_http_upstream_create() to cleanup the previous upstream after
Igor Sysoev <igor@sysoev.ru>
parents: 3004
diff changeset
385 }
95972b9e790b ngx_http_upstream_create() to cleanup the previous upstream after
Igor Sysoev <igor@sysoev.ru>
parents: 3004
diff changeset
386
95972b9e790b ngx_http_upstream_create() to cleanup the previous upstream after
Igor Sysoev <igor@sysoev.ru>
parents: 3004
diff changeset
387 r->upstream = u;
95972b9e790b ngx_http_upstream_create() to cleanup the previous upstream after
Igor Sysoev <igor@sysoev.ru>
parents: 3004
diff changeset
388
95972b9e790b ngx_http_upstream_create() to cleanup the previous upstream after
Igor Sysoev <igor@sysoev.ru>
parents: 3004
diff changeset
389 u->peer.log = r->connection->log;
95972b9e790b ngx_http_upstream_create() to cleanup the previous upstream after
Igor Sysoev <igor@sysoev.ru>
parents: 3004
diff changeset
390 u->peer.log_error = NGX_ERROR_ERR;
95972b9e790b ngx_http_upstream_create() to cleanup the previous upstream after
Igor Sysoev <igor@sysoev.ru>
parents: 3004
diff changeset
391 #if (NGX_THREADS)
95972b9e790b ngx_http_upstream_create() to cleanup the previous upstream after
Igor Sysoev <igor@sysoev.ru>
parents: 3004
diff changeset
392 u->peer.lock = &r->connection->lock;
95972b9e790b ngx_http_upstream_create() to cleanup the previous upstream after
Igor Sysoev <igor@sysoev.ru>
parents: 3004
diff changeset
393 #endif
95972b9e790b ngx_http_upstream_create() to cleanup the previous upstream after
Igor Sysoev <igor@sysoev.ru>
parents: 3004
diff changeset
394
3056
d22afd261e72 do not create cache key in AIO invocation
Igor Sysoev <igor@sysoev.ru>
parents: 3055
diff changeset
395 #if (NGX_HTTP_CACHE)
d22afd261e72 do not create cache key in AIO invocation
Igor Sysoev <igor@sysoev.ru>
parents: 3055
diff changeset
396 r->cache = NULL;
d22afd261e72 do not create cache key in AIO invocation
Igor Sysoev <igor@sysoev.ru>
parents: 3055
diff changeset
397 #endif
d22afd261e72 do not create cache key in AIO invocation
Igor Sysoev <igor@sysoev.ru>
parents: 3055
diff changeset
398
3006
95972b9e790b ngx_http_upstream_create() to cleanup the previous upstream after
Igor Sysoev <igor@sysoev.ru>
parents: 3004
diff changeset
399 return NGX_OK;
95972b9e790b ngx_http_upstream_create() to cleanup the previous upstream after
Igor Sysoev <igor@sysoev.ru>
parents: 3004
diff changeset
400 }
95972b9e790b ngx_http_upstream_create() to cleanup the previous upstream after
Igor Sysoev <igor@sysoev.ru>
parents: 3004
diff changeset
401
95972b9e790b ngx_http_upstream_create() to cleanup the previous upstream after
Igor Sysoev <igor@sysoev.ru>
parents: 3004
diff changeset
402
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
403 void
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
404 ngx_http_upstream_init(ngx_http_request_t *r)
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
405 {
3052
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
406 ngx_connection_t *c;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
407
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
408 c = r->connection;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
409
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
410 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
411 "http init upstream, client timer: %d", c->read->timer_set);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
412
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
413 if (c->read->timer_set) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
414 ngx_del_timer(c->read);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
415 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
416
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
417 if (ngx_event_flags & NGX_USE_CLEAR_EVENT) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
418
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
419 if (!c->write->active) {
531
c3bd8cdabb8f nginx-0.1.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 529
diff changeset
420 if (ngx_add_event(c->write, NGX_WRITE_EVENT, NGX_CLEAR_EVENT)
c3bd8cdabb8f nginx-0.1.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 529
diff changeset
421 == NGX_ERROR)
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
422 {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
423 ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
424 return;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
425 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
426 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
427 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
428
3052
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
429 ngx_http_upstream_init_request(r);
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
430 }
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
431
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
432
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
433 static void
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
434 ngx_http_upstream_init_request(ngx_http_request_t *r)
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
435 {
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
436 ngx_str_t *host;
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
437 ngx_uint_t i;
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
438 ngx_resolver_ctx_t *ctx, temp;
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
439 ngx_http_cleanup_t *cln;
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
440 ngx_http_upstream_t *u;
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
441 ngx_http_core_loc_conf_t *clcf;
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
442 ngx_http_upstream_srv_conf_t *uscf, **uscfp;
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
443 ngx_http_upstream_main_conf_t *umcf;
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
444
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
445 if (r->aio) {
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
446 return;
537
c9ad0d9c7d59 nginx-0.1.43-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 531
diff changeset
447 }
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
448
3052
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
449 u = r->upstream;
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
450
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
451 #if (NGX_HTTP_CACHE)
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
452
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
453 if (u->conf->cache) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
454 ngx_int_t rc;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
455
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
456 rc = ngx_http_upstream_cache(r, u);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
457
3055
92b6cfaa3c27 fix sending a cached file using AIO
Igor Sysoev <igor@sysoev.ru>
parents: 3053
diff changeset
458 if (rc == NGX_BUSY) {
3052
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
459 r->write_event_handler = ngx_http_upstream_init_request;
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
460 return;
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
461 }
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
462
3055
92b6cfaa3c27 fix sending a cached file using AIO
Igor Sysoev <igor@sysoev.ru>
parents: 3053
diff changeset
463 r->write_event_handler = ngx_http_request_empty_handler;
92b6cfaa3c27 fix sending a cached file using AIO
Igor Sysoev <igor@sysoev.ru>
parents: 3053
diff changeset
464
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
465 if (rc == NGX_DONE) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
466 return;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
467 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
468
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
469 if (rc != NGX_DECLINED) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
470 ngx_http_finalize_request(r, rc);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
471 return;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
472 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
473 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
474
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
475 #endif
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
476
3052
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
477 u->store = (u->conf->store || u->conf->store_lengths);
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
478
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
479 if (!u->store && !r->post_action && !u->conf->ignore_client_abort) {
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
480 r->read_event_handler = ngx_http_upstream_rd_check_broken_connection;
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
481 r->write_event_handler = ngx_http_upstream_wr_check_broken_connection;
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
482 }
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
483
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
484 if (r->request_body) {
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
485 u->request_bufs = r->request_body->bufs;
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
486 }
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
487
537
c9ad0d9c7d59 nginx-0.1.43-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 531
diff changeset
488 if (u->create_request(r) != NGX_OK) {
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
489 ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
490 return;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
491 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
492
3271
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 3198
diff changeset
493 u->peer.local = u->conf->local;
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 3198
diff changeset
494
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
495 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
496
3053
0d253659da12 directio_alignment
Igor Sysoev <igor@sysoev.ru>
parents: 3052
diff changeset
497 u->output.alignment = clcf->directio_alignment;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
498 u->output.pool = r->pool;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
499 u->output.bufs.num = 1;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
500 u->output.bufs.size = clcf->client_body_buffer_size;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
501 u->output.output_filter = ngx_chain_writer;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
502 u->output.filter_ctx = &u->writer;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
503
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
504 u->writer.pool = r->pool;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
505
1168
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
506 if (r->upstream_states == NULL) {
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
507
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
508 r->upstream_states = ngx_array_create(r->pool, 1,
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
509 sizeof(ngx_http_upstream_state_t));
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
510 if (r->upstream_states == NULL) {
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
511 ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
512 return;
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
513 }
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
514
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
515 } else {
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
516
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
517 u->state = ngx_array_push(r->upstream_states);
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
518 if (u->state == NULL) {
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
519 ngx_http_upstream_finalize_request(r, u,
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
520 NGX_HTTP_INTERNAL_SERVER_ERROR);
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
521 return;
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
522 }
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
523
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
524 ngx_memzero(u->state, sizeof(ngx_http_upstream_state_t));
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
525 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
526
593
425af804d968 nginx-0.3.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 591
diff changeset
527 cln = ngx_http_cleanup_add(r, 0);
569
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
528 if (cln == NULL) {
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
529 ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
530 return;
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
531 }
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
532
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
533 cln->handler = ngx_http_upstream_cleanup;
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
534 cln->data = r;
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
535 u->cleanup = &cln->handler;
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
536
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
537 if (u->resolved == NULL) {
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
538
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
539 uscf = u->conf->upstream;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
540
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
541 } else {
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
542
2422
7af1e5fe102c variable support for unix sockets in fastcgi_pass and proxy_pass
Igor Sysoev <igor@sysoev.ru>
parents: 2413
diff changeset
543 if (u->resolved->sockaddr) {
7af1e5fe102c variable support for unix sockets in fastcgi_pass and proxy_pass
Igor Sysoev <igor@sysoev.ru>
parents: 2413
diff changeset
544
7af1e5fe102c variable support for unix sockets in fastcgi_pass and proxy_pass
Igor Sysoev <igor@sysoev.ru>
parents: 2413
diff changeset
545 if (ngx_http_upstream_create_round_robin_peer(r, u->resolved)
7af1e5fe102c variable support for unix sockets in fastcgi_pass and proxy_pass
Igor Sysoev <igor@sysoev.ru>
parents: 2413
diff changeset
546 != NGX_OK)
7af1e5fe102c variable support for unix sockets in fastcgi_pass and proxy_pass
Igor Sysoev <igor@sysoev.ru>
parents: 2413
diff changeset
547 {
3169
b1013d768911 fix request counter in resolver handling, the bug was introduced in r3050
Igor Sysoev <igor@sysoev.ru>
parents: 3161
diff changeset
548 ngx_http_upstream_finalize_request(r, u,
b1013d768911 fix request counter in resolver handling, the bug was introduced in r3050
Igor Sysoev <igor@sysoev.ru>
parents: 3161
diff changeset
549 NGX_HTTP_INTERNAL_SERVER_ERROR);
2422
7af1e5fe102c variable support for unix sockets in fastcgi_pass and proxy_pass
Igor Sysoev <igor@sysoev.ru>
parents: 2413
diff changeset
550 return;
7af1e5fe102c variable support for unix sockets in fastcgi_pass and proxy_pass
Igor Sysoev <igor@sysoev.ru>
parents: 2413
diff changeset
551 }
7af1e5fe102c variable support for unix sockets in fastcgi_pass and proxy_pass
Igor Sysoev <igor@sysoev.ru>
parents: 2413
diff changeset
552
7af1e5fe102c variable support for unix sockets in fastcgi_pass and proxy_pass
Igor Sysoev <igor@sysoev.ru>
parents: 2413
diff changeset
553 ngx_http_upstream_connect(r, u);
7af1e5fe102c variable support for unix sockets in fastcgi_pass and proxy_pass
Igor Sysoev <igor@sysoev.ru>
parents: 2413
diff changeset
554
7af1e5fe102c variable support for unix sockets in fastcgi_pass and proxy_pass
Igor Sysoev <igor@sysoev.ru>
parents: 2413
diff changeset
555 return;
7af1e5fe102c variable support for unix sockets in fastcgi_pass and proxy_pass
Igor Sysoev <igor@sysoev.ru>
parents: 2413
diff changeset
556 }
7af1e5fe102c variable support for unix sockets in fastcgi_pass and proxy_pass
Igor Sysoev <igor@sysoev.ru>
parents: 2413
diff changeset
557
1705
d22095839d86 optimize r->upstream usage
Igor Sysoev <igor@sysoev.ru>
parents: 1701
diff changeset
558 host = &u->resolved->host;
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
559
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
560 umcf = ngx_http_get_module_main_conf(r, ngx_http_upstream_module);
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
561
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
562 uscfp = umcf->upstreams.elts;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
563
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
564 for (i = 0; i < umcf->upstreams.nelts; i++) {
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
565
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
566 uscf = uscfp[i];
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
567
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
568 if (uscf->host.len == host->len
2285
c77f4710595c fix r1913
Igor Sysoev <igor@sysoev.ru>
parents: 2268
diff changeset
569 && ((uscf->port == 0 && u->resolved->no_port)
1912
68b426b43c31 fix r1903
Igor Sysoev <igor@sysoev.ru>
parents: 1908
diff changeset
570 || uscf->port == u->resolved->port)
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
571 && ngx_memcmp(uscf->host.data, host->data, host->len) == 0)
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
572 {
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
573 goto found;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
574 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
575 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
576
3879
502a6b0acf3f fix case when a host in fastcgi_pass, scgi_pass, and uwsgi_pass
Igor Sysoev <igor@sysoev.ru>
parents: 3713
diff changeset
577 if (u->resolved->port == 0) {
502a6b0acf3f fix case when a host in fastcgi_pass, scgi_pass, and uwsgi_pass
Igor Sysoev <igor@sysoev.ru>
parents: 3713
diff changeset
578 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
502a6b0acf3f fix case when a host in fastcgi_pass, scgi_pass, and uwsgi_pass
Igor Sysoev <igor@sysoev.ru>
parents: 3713
diff changeset
579 "no port in upstream \"%V\"", host);
502a6b0acf3f fix case when a host in fastcgi_pass, scgi_pass, and uwsgi_pass
Igor Sysoev <igor@sysoev.ru>
parents: 3713
diff changeset
580 ngx_http_upstream_finalize_request(r, u,
502a6b0acf3f fix case when a host in fastcgi_pass, scgi_pass, and uwsgi_pass
Igor Sysoev <igor@sysoev.ru>
parents: 3713
diff changeset
581 NGX_HTTP_INTERNAL_SERVER_ERROR);
502a6b0acf3f fix case when a host in fastcgi_pass, scgi_pass, and uwsgi_pass
Igor Sysoev <igor@sysoev.ru>
parents: 3713
diff changeset
582 return;
502a6b0acf3f fix case when a host in fastcgi_pass, scgi_pass, and uwsgi_pass
Igor Sysoev <igor@sysoev.ru>
parents: 3713
diff changeset
583 }
502a6b0acf3f fix case when a host in fastcgi_pass, scgi_pass, and uwsgi_pass
Igor Sysoev <igor@sysoev.ru>
parents: 3713
diff changeset
584
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
585 temp.name = *host;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
586
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
587 ctx = ngx_resolve_start(clcf->resolver, &temp);
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
588 if (ctx == NULL) {
3169
b1013d768911 fix request counter in resolver handling, the bug was introduced in r3050
Igor Sysoev <igor@sysoev.ru>
parents: 3161
diff changeset
589 ngx_http_upstream_finalize_request(r, u,
b1013d768911 fix request counter in resolver handling, the bug was introduced in r3050
Igor Sysoev <igor@sysoev.ru>
parents: 3161
diff changeset
590 NGX_HTTP_INTERNAL_SERVER_ERROR);
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
591 return;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
592 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
593
1683
1e0b028055ec allow to use IP addresses without defined resolver
Igor Sysoev <igor@sysoev.ru>
parents: 1658
diff changeset
594 if (ctx == NGX_NO_RESOLVER) {
3052
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
595 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
1683
1e0b028055ec allow to use IP addresses without defined resolver
Igor Sysoev <igor@sysoev.ru>
parents: 1658
diff changeset
596 "no resolver defined to resolve %V", host);
1e0b028055ec allow to use IP addresses without defined resolver
Igor Sysoev <igor@sysoev.ru>
parents: 1658
diff changeset
597
3169
b1013d768911 fix request counter in resolver handling, the bug was introduced in r3050
Igor Sysoev <igor@sysoev.ru>
parents: 3161
diff changeset
598 ngx_http_upstream_finalize_request(r, u, NGX_HTTP_BAD_GATEWAY);
1683
1e0b028055ec allow to use IP addresses without defined resolver
Igor Sysoev <igor@sysoev.ru>
parents: 1658
diff changeset
599 return;
1e0b028055ec allow to use IP addresses without defined resolver
Igor Sysoev <igor@sysoev.ru>
parents: 1658
diff changeset
600 }
1e0b028055ec allow to use IP addresses without defined resolver
Igor Sysoev <igor@sysoev.ru>
parents: 1658
diff changeset
601
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
602 ctx->name = *host;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
603 ctx->type = NGX_RESOLVE_A;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
604 ctx->handler = ngx_http_upstream_resolve_handler;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
605 ctx->data = r;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
606 ctx->timeout = clcf->resolver_timeout;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
607
1959
4f16186f5603 quick resolving handles u->resolved->ctx by itself
Igor Sysoev <igor@sysoev.ru>
parents: 1958
diff changeset
608 u->resolved->ctx = ctx;
4f16186f5603 quick resolving handles u->resolved->ctx by itself
Igor Sysoev <igor@sysoev.ru>
parents: 1958
diff changeset
609
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
610 if (ngx_resolve_name(ctx) != NGX_OK) {
1959
4f16186f5603 quick resolving handles u->resolved->ctx by itself
Igor Sysoev <igor@sysoev.ru>
parents: 1958
diff changeset
611 u->resolved->ctx = NULL;
3169
b1013d768911 fix request counter in resolver handling, the bug was introduced in r3050
Igor Sysoev <igor@sysoev.ru>
parents: 3161
diff changeset
612 ngx_http_upstream_finalize_request(r, u,
b1013d768911 fix request counter in resolver handling, the bug was introduced in r3050
Igor Sysoev <igor@sysoev.ru>
parents: 3161
diff changeset
613 NGX_HTTP_INTERNAL_SERVER_ERROR);
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
614 return;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
615 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
616
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
617 return;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
618 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
619
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
620 found:
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
621
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
622 if (uscf->peer.init(r, uscf) != NGX_OK) {
3169
b1013d768911 fix request counter in resolver handling, the bug was introduced in r3050
Igor Sysoev <igor@sysoev.ru>
parents: 3161
diff changeset
623 ngx_http_upstream_finalize_request(r, u,
b1013d768911 fix request counter in resolver handling, the bug was introduced in r3050
Igor Sysoev <igor@sysoev.ru>
parents: 3161
diff changeset
624 NGX_HTTP_INTERNAL_SERVER_ERROR);
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
625 return;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
626 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
627
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
628 ngx_http_upstream_connect(r, u);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
629 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
630
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
631
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
632 #if (NGX_HTTP_CACHE)
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
633
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
634 static ngx_int_t
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
635 ngx_http_upstream_cache(ngx_http_request_t *r, ngx_http_upstream_t *u)
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
636 {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
637 ngx_int_t rc;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
638 ngx_http_cache_t *c;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
639
3056
d22afd261e72 do not create cache key in AIO invocation
Igor Sysoev <igor@sysoev.ru>
parents: 3055
diff changeset
640 c = r->cache;
d22afd261e72 do not create cache key in AIO invocation
Igor Sysoev <igor@sysoev.ru>
parents: 3055
diff changeset
641
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
642 if (c == NULL) {
3056
d22afd261e72 do not create cache key in AIO invocation
Igor Sysoev <igor@sysoev.ru>
parents: 3055
diff changeset
643
d22afd261e72 do not create cache key in AIO invocation
Igor Sysoev <igor@sysoev.ru>
parents: 3055
diff changeset
644 if (!(r->method & u->conf->cache_methods)) {
d22afd261e72 do not create cache key in AIO invocation
Igor Sysoev <igor@sysoev.ru>
parents: 3055
diff changeset
645 return NGX_DECLINED;
d22afd261e72 do not create cache key in AIO invocation
Igor Sysoev <igor@sysoev.ru>
parents: 3055
diff changeset
646 }
d22afd261e72 do not create cache key in AIO invocation
Igor Sysoev <igor@sysoev.ru>
parents: 3055
diff changeset
647
d22afd261e72 do not create cache key in AIO invocation
Igor Sysoev <igor@sysoev.ru>
parents: 3055
diff changeset
648 if (r->method & NGX_HTTP_HEAD) {
d22afd261e72 do not create cache key in AIO invocation
Igor Sysoev <igor@sysoev.ru>
parents: 3055
diff changeset
649 u->method = ngx_http_core_get_method;
d22afd261e72 do not create cache key in AIO invocation
Igor Sysoev <igor@sysoev.ru>
parents: 3055
diff changeset
650 }
d22afd261e72 do not create cache key in AIO invocation
Igor Sysoev <igor@sysoev.ru>
parents: 3055
diff changeset
651
3698
d11227f0107f rename ngx_http_file_cache_create() to ngx_http_file_cache_new()
Igor Sysoev <igor@sysoev.ru>
parents: 3697
diff changeset
652 if (ngx_http_file_cache_new(r) != NGX_OK) {
3056
d22afd261e72 do not create cache key in AIO invocation
Igor Sysoev <igor@sysoev.ru>
parents: 3055
diff changeset
653 return NGX_ERROR;
d22afd261e72 do not create cache key in AIO invocation
Igor Sysoev <igor@sysoev.ru>
parents: 3055
diff changeset
654 }
d22afd261e72 do not create cache key in AIO invocation
Igor Sysoev <igor@sysoev.ru>
parents: 3055
diff changeset
655
d22afd261e72 do not create cache key in AIO invocation
Igor Sysoev <igor@sysoev.ru>
parents: 3055
diff changeset
656 if (u->create_key(r) != NGX_OK) {
d22afd261e72 do not create cache key in AIO invocation
Igor Sysoev <igor@sysoev.ru>
parents: 3055
diff changeset
657 return NGX_ERROR;
d22afd261e72 do not create cache key in AIO invocation
Igor Sysoev <igor@sysoev.ru>
parents: 3055
diff changeset
658 }
d22afd261e72 do not create cache key in AIO invocation
Igor Sysoev <igor@sysoev.ru>
parents: 3055
diff changeset
659
d22afd261e72 do not create cache key in AIO invocation
Igor Sysoev <igor@sysoev.ru>
parents: 3055
diff changeset
660 /* TODO: add keys */
d22afd261e72 do not create cache key in AIO invocation
Igor Sysoev <igor@sysoev.ru>
parents: 3055
diff changeset
661
d22afd261e72 do not create cache key in AIO invocation
Igor Sysoev <igor@sysoev.ru>
parents: 3055
diff changeset
662 ngx_http_file_cache_create_key(r);
d22afd261e72 do not create cache key in AIO invocation
Igor Sysoev <igor@sysoev.ru>
parents: 3055
diff changeset
663
3944
f1f194ceab16 fix segfault if cache key is larger than upstream buffer size
Igor Sysoev <igor@sysoev.ru>
parents: 3940
diff changeset
664 if (r->cache->header_start >= u->conf->buffer_size) {
f1f194ceab16 fix segfault if cache key is larger than upstream buffer size
Igor Sysoev <igor@sysoev.ru>
parents: 3940
diff changeset
665 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
f1f194ceab16 fix segfault if cache key is larger than upstream buffer size
Igor Sysoev <igor@sysoev.ru>
parents: 3940
diff changeset
666 "cache key too large, increase upstream buffer size %uz",
f1f194ceab16 fix segfault if cache key is larger than upstream buffer size
Igor Sysoev <igor@sysoev.ru>
parents: 3940
diff changeset
667 u->conf->buffer_size);
f1f194ceab16 fix segfault if cache key is larger than upstream buffer size
Igor Sysoev <igor@sysoev.ru>
parents: 3940
diff changeset
668
f1f194ceab16 fix segfault if cache key is larger than upstream buffer size
Igor Sysoev <igor@sysoev.ru>
parents: 3940
diff changeset
669 r->cache = NULL;
f1f194ceab16 fix segfault if cache key is larger than upstream buffer size
Igor Sysoev <igor@sysoev.ru>
parents: 3940
diff changeset
670 return NGX_DECLINED;
f1f194ceab16 fix segfault if cache key is larger than upstream buffer size
Igor Sysoev <igor@sysoev.ru>
parents: 3940
diff changeset
671 }
f1f194ceab16 fix segfault if cache key is larger than upstream buffer size
Igor Sysoev <igor@sysoev.ru>
parents: 3940
diff changeset
672
3917
2a70484a6580 fix a broken cached response if bypass/no_cache directive values are different,
Igor Sysoev <igor@sysoev.ru>
parents: 3898
diff changeset
673 switch (ngx_http_test_predicates(r, u->conf->cache_bypass)) {
2a70484a6580 fix a broken cached response if bypass/no_cache directive values are different,
Igor Sysoev <igor@sysoev.ru>
parents: 3898
diff changeset
674
2a70484a6580 fix a broken cached response if bypass/no_cache directive values are different,
Igor Sysoev <igor@sysoev.ru>
parents: 3898
diff changeset
675 case NGX_ERROR:
2a70484a6580 fix a broken cached response if bypass/no_cache directive values are different,
Igor Sysoev <igor@sysoev.ru>
parents: 3898
diff changeset
676 return NGX_ERROR;
2a70484a6580 fix a broken cached response if bypass/no_cache directive values are different,
Igor Sysoev <igor@sysoev.ru>
parents: 3898
diff changeset
677
2a70484a6580 fix a broken cached response if bypass/no_cache directive values are different,
Igor Sysoev <igor@sysoev.ru>
parents: 3898
diff changeset
678 case NGX_DECLINED:
2a70484a6580 fix a broken cached response if bypass/no_cache directive values are different,
Igor Sysoev <igor@sysoev.ru>
parents: 3898
diff changeset
679 u->cache_status = NGX_HTTP_CACHE_BYPASS;
2a70484a6580 fix a broken cached response if bypass/no_cache directive values are different,
Igor Sysoev <igor@sysoev.ru>
parents: 3898
diff changeset
680 return NGX_DECLINED;
2a70484a6580 fix a broken cached response if bypass/no_cache directive values are different,
Igor Sysoev <igor@sysoev.ru>
parents: 3898
diff changeset
681
2a70484a6580 fix a broken cached response if bypass/no_cache directive values are different,
Igor Sysoev <igor@sysoev.ru>
parents: 3898
diff changeset
682 default: /* NGX_OK */
2a70484a6580 fix a broken cached response if bypass/no_cache directive values are different,
Igor Sysoev <igor@sysoev.ru>
parents: 3898
diff changeset
683 break;
2a70484a6580 fix a broken cached response if bypass/no_cache directive values are different,
Igor Sysoev <igor@sysoev.ru>
parents: 3898
diff changeset
684 }
2a70484a6580 fix a broken cached response if bypass/no_cache directive values are different,
Igor Sysoev <igor@sysoev.ru>
parents: 3898
diff changeset
685
3056
d22afd261e72 do not create cache key in AIO invocation
Igor Sysoev <igor@sysoev.ru>
parents: 3055
diff changeset
686 u->cacheable = 1;
d22afd261e72 do not create cache key in AIO invocation
Igor Sysoev <igor@sysoev.ru>
parents: 3055
diff changeset
687
3697
3c442bd5597b ngx_http_file_cache_create()
Igor Sysoev <igor@sysoev.ru>
parents: 3692
diff changeset
688 c = r->cache;
3c442bd5597b ngx_http_file_cache_create()
Igor Sysoev <igor@sysoev.ru>
parents: 3692
diff changeset
689
3056
d22afd261e72 do not create cache key in AIO invocation
Igor Sysoev <igor@sysoev.ru>
parents: 3055
diff changeset
690 c->min_uses = u->conf->cache_min_uses;
d22afd261e72 do not create cache key in AIO invocation
Igor Sysoev <igor@sysoev.ru>
parents: 3055
diff changeset
691 c->body_start = u->conf->buffer_size;
d22afd261e72 do not create cache key in AIO invocation
Igor Sysoev <igor@sysoev.ru>
parents: 3055
diff changeset
692 c->file_cache = u->conf->cache->data;
d22afd261e72 do not create cache key in AIO invocation
Igor Sysoev <igor@sysoev.ru>
parents: 3055
diff changeset
693
d22afd261e72 do not create cache key in AIO invocation
Igor Sysoev <igor@sysoev.ru>
parents: 3055
diff changeset
694 u->cache_status = NGX_HTTP_CACHE_MISS;
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
695 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
696
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
697 rc = ngx_http_file_cache_open(r);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
698
2926
80a314b63c56 delete useless r->cache->uses
Igor Sysoev <igor@sysoev.ru>
parents: 2912
diff changeset
699 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
80a314b63c56 delete useless r->cache->uses
Igor Sysoev <igor@sysoev.ru>
parents: 2912
diff changeset
700 "http upstream cache: %i", rc);
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
701
2952
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
702 switch (rc) {
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
703
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
704 case NGX_HTTP_CACHE_UPDATING:
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
705
2927
55ceaef03d34 proxy_cache_use_stale/fastcgi_cache_use_stale updating
Igor Sysoev <igor@sysoev.ru>
parents: 2926
diff changeset
706 if (u->conf->cache_use_stale & NGX_HTTP_UPSTREAM_FT_UPDATING) {
2952
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
707 u->cache_status = rc;
2927
55ceaef03d34 proxy_cache_use_stale/fastcgi_cache_use_stale updating
Igor Sysoev <igor@sysoev.ru>
parents: 2926
diff changeset
708 rc = NGX_OK;
55ceaef03d34 proxy_cache_use_stale/fastcgi_cache_use_stale updating
Igor Sysoev <igor@sysoev.ru>
parents: 2926
diff changeset
709
55ceaef03d34 proxy_cache_use_stale/fastcgi_cache_use_stale updating
Igor Sysoev <igor@sysoev.ru>
parents: 2926
diff changeset
710 } else {
55ceaef03d34 proxy_cache_use_stale/fastcgi_cache_use_stale updating
Igor Sysoev <igor@sysoev.ru>
parents: 2926
diff changeset
711 rc = NGX_HTTP_CACHE_STALE;
55ceaef03d34 proxy_cache_use_stale/fastcgi_cache_use_stale updating
Igor Sysoev <igor@sysoev.ru>
parents: 2926
diff changeset
712 }
2952
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
713
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
714 break;
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
715
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
716 case NGX_OK:
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
717 u->cache_status = NGX_HTTP_CACHE_HIT;
2927
55ceaef03d34 proxy_cache_use_stale/fastcgi_cache_use_stale updating
Igor Sysoev <igor@sysoev.ru>
parents: 2926
diff changeset
718 }
55ceaef03d34 proxy_cache_use_stale/fastcgi_cache_use_stale updating
Igor Sysoev <igor@sysoev.ru>
parents: 2926
diff changeset
719
2952
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
720 switch (rc) {
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
721
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
722 case NGX_OK:
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
723
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
724 rc = ngx_http_upstream_cache_send(r, u);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
725
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
726 if (rc != NGX_HTTP_UPSTREAM_INVALID_HEADER) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
727 return rc;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
728 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
729
2952
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
730 break;
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
731
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
732 case NGX_HTTP_CACHE_STALE:
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
733
2665
4d627567c324 fix r2664: ..._cache_valid did not work for stale responses
Igor Sysoev <igor@sysoev.ru>
parents: 2664
diff changeset
734 c->valid_sec = 0;
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
735 u->buffer.start = NULL;
2952
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
736 u->cache_status = NGX_HTTP_CACHE_EXPIRED;
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
737
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
738 break;
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
739
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
740 case NGX_DECLINED:
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
741
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
742 if ((size_t) (u->buffer.end - u->buffer.start) < u->conf->buffer_size) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
743 u->buffer.start = NULL;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
744
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
745 } else {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
746 u->buffer.pos = u->buffer.start + c->header_start;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
747 u->buffer.last = u->buffer.pos;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
748 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
749
2952
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
750 break;
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
751
3052
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
752 case NGX_HTTP_CACHE_SCARCE:
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
753
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
754 u->cacheable = 0;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
755
2952
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
756 break;
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
757
3052
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
758 case NGX_AGAIN:
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
759
3055
92b6cfaa3c27 fix sending a cached file using AIO
Igor Sysoev <igor@sysoev.ru>
parents: 3053
diff changeset
760 return NGX_BUSY;
3052
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
761
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
762 case NGX_ERROR:
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
763
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
764 return NGX_ERROR;
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
765
2952
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
766 default:
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
767
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
768 /* cached NGX_HTTP_BAD_GATEWAY, NGX_HTTP_GATEWAY_TIME_OUT, etc. */
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
769
2952
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
770 u->cache_status = NGX_HTTP_CACHE_HIT;
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
771
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
772 return rc;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
773 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
774
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
775 r->cached = 0;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
776
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
777 return NGX_DECLINED;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
778 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
779
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
780
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
781 static ngx_int_t
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
782 ngx_http_upstream_cache_send(ngx_http_request_t *r, ngx_http_upstream_t *u)
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
783 {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
784 ngx_int_t rc;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
785 ngx_http_cache_t *c;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
786
2952
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
787 r->cached = 1;
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
788 c = r->cache;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
789
3369
479468a7d982 fix handling cached HTTP/0.9 response
Igor Sysoev <igor@sysoev.ru>
parents: 3272
diff changeset
790 if (c->header_start == c->body_start) {
479468a7d982 fix handling cached HTTP/0.9 response
Igor Sysoev <igor@sysoev.ru>
parents: 3272
diff changeset
791 r->http_version = NGX_HTTP_VERSION_9;
479468a7d982 fix handling cached HTTP/0.9 response
Igor Sysoev <igor@sysoev.ru>
parents: 3272
diff changeset
792 return ngx_http_cache_send(r);
479468a7d982 fix handling cached HTTP/0.9 response
Igor Sysoev <igor@sysoev.ru>
parents: 3272
diff changeset
793 }
479468a7d982 fix handling cached HTTP/0.9 response
Igor Sysoev <igor@sysoev.ru>
parents: 3272
diff changeset
794
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
795 /* TODO: cache stack */
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
796
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
797 u->buffer = *c->buf;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
798 u->buffer.pos += c->header_start;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
799
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
800 ngx_memzero(&u->headers_in, sizeof(ngx_http_upstream_headers_in_t));
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
801
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
802 if (ngx_list_init(&u->headers_in.headers, r->pool, 8,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
803 sizeof(ngx_table_elt_t))
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
804 != NGX_OK)
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
805 {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
806 return NGX_ERROR;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
807 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
808
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
809 rc = u->process_header(r);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
810
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
811 if (rc == NGX_OK) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
812
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
813 if (ngx_http_upstream_process_headers(r, u) != NGX_OK) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
814 return NGX_DONE;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
815 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
816
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
817 return ngx_http_cache_send(r);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
818 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
819
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
820 if (rc == NGX_ERROR) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
821 return NGX_ERROR;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
822 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
823
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
824 /* rc == NGX_HTTP_UPSTREAM_INVALID_HEADER */
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
825
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
826 /* TODO: delete file */
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
827
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
828 return rc;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
829 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
830
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
831 #endif
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
832
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
833
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
834 static void
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
835 ngx_http_upstream_resolve_handler(ngx_resolver_ctx_t *ctx)
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
836 {
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
837 ngx_http_request_t *r;
3169
b1013d768911 fix request counter in resolver handling, the bug was introduced in r3050
Igor Sysoev <igor@sysoev.ru>
parents: 3161
diff changeset
838 ngx_http_upstream_t *u;
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
839 ngx_http_upstream_resolved_t *ur;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
840
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
841 r = ctx->data;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
842
3169
b1013d768911 fix request counter in resolver handling, the bug was introduced in r3050
Igor Sysoev <igor@sysoev.ru>
parents: 3161
diff changeset
843 u = r->upstream;
b1013d768911 fix request counter in resolver handling, the bug was introduced in r3050
Igor Sysoev <igor@sysoev.ru>
parents: 3161
diff changeset
844 ur = u->resolved;
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
845
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
846 if (ctx->state) {
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
847 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
848 "%V could not be resolved (%i: %s)",
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
849 &ctx->name, ctx->state,
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
850 ngx_resolver_strerror(ctx->state));
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
851
3169
b1013d768911 fix request counter in resolver handling, the bug was introduced in r3050
Igor Sysoev <igor@sysoev.ru>
parents: 3161
diff changeset
852 ngx_http_upstream_finalize_request(r, u, NGX_HTTP_BAD_GATEWAY);
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
853 return;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
854 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
855
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
856 ur->naddrs = ctx->naddrs;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
857 ur->addrs = ctx->addrs;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
858
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
859 #if (NGX_DEBUG)
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
860 {
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
861 in_addr_t addr;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
862 ngx_uint_t i;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
863
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
864 for (i = 0; i < ctx->naddrs; i++) {
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
865 addr = ntohl(ur->addrs[i]);
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
866
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
867 ngx_log_debug4(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
868 "name was resolved to %ud.%ud.%ud.%ud",
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
869 (addr >> 24) & 0xff, (addr >> 16) & 0xff,
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
870 (addr >> 8) & 0xff, addr & 0xff);
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
871 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
872 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
873 #endif
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
874
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
875 if (ngx_http_upstream_create_round_robin_peer(r, ur) != NGX_OK) {
3169
b1013d768911 fix request counter in resolver handling, the bug was introduced in r3050
Igor Sysoev <igor@sysoev.ru>
parents: 3161
diff changeset
876 ngx_http_upstream_finalize_request(r, u,
b1013d768911 fix request counter in resolver handling, the bug was introduced in r3050
Igor Sysoev <igor@sysoev.ru>
parents: 3161
diff changeset
877 NGX_HTTP_INTERNAL_SERVER_ERROR);
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
878 return;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
879 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
880
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
881 ngx_resolve_name_done(ctx);
3169
b1013d768911 fix request counter in resolver handling, the bug was introduced in r3050
Igor Sysoev <igor@sysoev.ru>
parents: 3161
diff changeset
882 ur->ctx = NULL;
b1013d768911 fix request counter in resolver handling, the bug was introduced in r3050
Igor Sysoev <igor@sysoev.ru>
parents: 3161
diff changeset
883
b1013d768911 fix request counter in resolver handling, the bug was introduced in r3050
Igor Sysoev <igor@sysoev.ru>
parents: 3161
diff changeset
884 ngx_http_upstream_connect(r, u);
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
885 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
886
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
887
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
888 static void
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
889 ngx_http_upstream_handler(ngx_event_t *ev)
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
890 {
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
891 ngx_connection_t *c;
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
892 ngx_http_request_t *r;
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
893 ngx_http_log_ctx_t *ctx;
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
894 ngx_http_upstream_t *u;
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
895
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
896 c = ev->data;
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
897 r = c->data;
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
898
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
899 u = r->upstream;
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
900 c = r->connection;
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
901
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
902 ctx = c->log->data;
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
903 ctx->current_request = r;
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
904
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
905 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, c->log, 0,
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
906 "http upstream request: \"%V?%V\"", &r->uri, &r->args);
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
907
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
908 if (ev->write) {
2386
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
909 u->write_event_handler(r, u);
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
910
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
911 } else {
2386
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
912 u->read_event_handler(r, u);
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
913 }
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
914
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
915 ngx_http_run_posted_requests(c);
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
916 }
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
917
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
918
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
919 static void
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
920 ngx_http_upstream_rd_check_broken_connection(ngx_http_request_t *r)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
921 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
922 ngx_http_upstream_check_broken_connection(r, r->connection->read);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
923 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
924
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
925
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
926 static void
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
927 ngx_http_upstream_wr_check_broken_connection(ngx_http_request_t *r)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
928 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
929 ngx_http_upstream_check_broken_connection(r, r->connection->write);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
930 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
931
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
932
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
933 static void
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
934 ngx_http_upstream_check_broken_connection(ngx_http_request_t *r,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
935 ngx_event_t *ev)
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
936 {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
937 int n;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
938 char buf[1];
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
939 ngx_err_t err;
2807
6ad4bba6313e delete level event of appropriate type, this should fix select()'s EBADF,
Igor Sysoev <igor@sysoev.ru>
parents: 2805
diff changeset
940 ngx_int_t event;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
941 ngx_connection_t *c;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
942 ngx_http_upstream_t *u;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
943
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
944 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, ev->log, 0,
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
945 "http upstream check client, write event:%d, \"%V\"",
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
946 ev->write, &r->uri);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
947
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
948 c = r->connection;
483
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
949 u = r->upstream;
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
950
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
951 if (c->error) {
2807
6ad4bba6313e delete level event of appropriate type, this should fix select()'s EBADF,
Igor Sysoev <igor@sysoev.ru>
parents: 2805
diff changeset
952 if ((ngx_event_flags & NGX_USE_LEVEL_EVENT) && ev->active) {
6ad4bba6313e delete level event of appropriate type, this should fix select()'s EBADF,
Igor Sysoev <igor@sysoev.ru>
parents: 2805
diff changeset
953
6ad4bba6313e delete level event of appropriate type, this should fix select()'s EBADF,
Igor Sysoev <igor@sysoev.ru>
parents: 2805
diff changeset
954 event = ev->write ? NGX_WRITE_EVENT : NGX_READ_EVENT;
6ad4bba6313e delete level event of appropriate type, this should fix select()'s EBADF,
Igor Sysoev <igor@sysoev.ru>
parents: 2805
diff changeset
955
6ad4bba6313e delete level event of appropriate type, this should fix select()'s EBADF,
Igor Sysoev <igor@sysoev.ru>
parents: 2805
diff changeset
956 if (ngx_del_event(ev, event, 0) != NGX_OK) {
6ad4bba6313e delete level event of appropriate type, this should fix select()'s EBADF,
Igor Sysoev <igor@sysoev.ru>
parents: 2805
diff changeset
957 ngx_http_upstream_finalize_request(r, u,
6ad4bba6313e delete level event of appropriate type, this should fix select()'s EBADF,
Igor Sysoev <igor@sysoev.ru>
parents: 2805
diff changeset
958 NGX_HTTP_INTERNAL_SERVER_ERROR);
6ad4bba6313e delete level event of appropriate type, this should fix select()'s EBADF,
Igor Sysoev <igor@sysoev.ru>
parents: 2805
diff changeset
959 return;
6ad4bba6313e delete level event of appropriate type, this should fix select()'s EBADF,
Igor Sysoev <igor@sysoev.ru>
parents: 2805
diff changeset
960 }
6ad4bba6313e delete level event of appropriate type, this should fix select()'s EBADF,
Igor Sysoev <igor@sysoev.ru>
parents: 2805
diff changeset
961 }
6ad4bba6313e delete level event of appropriate type, this should fix select()'s EBADF,
Igor Sysoev <igor@sysoev.ru>
parents: 2805
diff changeset
962
2757
9cc973b46af1 get a full response if the response is cacheable or storable even
Igor Sysoev <igor@sysoev.ru>
parents: 2708
diff changeset
963 if (!u->cacheable) {
9cc973b46af1 get a full response if the response is cacheable or storable even
Igor Sysoev <igor@sysoev.ru>
parents: 2708
diff changeset
964 ngx_http_upstream_finalize_request(r, u,
9cc973b46af1 get a full response if the response is cacheable or storable even
Igor Sysoev <igor@sysoev.ru>
parents: 2708
diff changeset
965 NGX_HTTP_CLIENT_CLOSED_REQUEST);
9cc973b46af1 get a full response if the response is cacheable or storable even
Igor Sysoev <igor@sysoev.ru>
parents: 2708
diff changeset
966 }
2807
6ad4bba6313e delete level event of appropriate type, this should fix select()'s EBADF,
Igor Sysoev <igor@sysoev.ru>
parents: 2805
diff changeset
967
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
968 return;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
969 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
970
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
971 #if (NGX_HAVE_KQUEUE)
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
972
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
973 if (ngx_event_flags & NGX_USE_KQUEUE_EVENT) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
974
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
975 if (!ev->pending_eof) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
976 return;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
977 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
978
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
979 ev->eof = 1;
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
980 c->error = 1;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
981
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
982 if (ev->kq_errno) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
983 ev->error = 1;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
984 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
985
2757
9cc973b46af1 get a full response if the response is cacheable or storable even
Igor Sysoev <igor@sysoev.ru>
parents: 2708
diff changeset
986 if (!u->cacheable && u->peer.connection) {
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
987 ngx_log_error(NGX_LOG_INFO, ev->log, ev->kq_errno,
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
988 "kevent() reported that client closed prematurely "
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
989 "connection, so upstream connection is closed too");
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
990 ngx_http_upstream_finalize_request(r, u,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
991 NGX_HTTP_CLIENT_CLOSED_REQUEST);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
992 return;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
993 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
994
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
995 ngx_log_error(NGX_LOG_INFO, ev->log, ev->kq_errno,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
996 "kevent() reported that client closed "
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
997 "prematurely connection");
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
998
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
999 if (u->peer.connection == NULL) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1000 ngx_http_upstream_finalize_request(r, u,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1001 NGX_HTTP_CLIENT_CLOSED_REQUEST);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1002 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1003
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1004 return;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1005 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1006
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1007 #endif
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1008
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1009 n = recv(c->fd, buf, 1, MSG_PEEK);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1010
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1011 err = ngx_socket_errno;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1012
1109
1402dbb554c4 add debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1013 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, ev->log, err,
1402dbb554c4 add debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1014 "http upstream recv(): %d", n);
1402dbb554c4 add debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1015
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1016 if (ev->write && (n >= 0 || err == NGX_EAGAIN)) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1017 return;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1018 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1019
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1020 if ((ngx_event_flags & NGX_USE_LEVEL_EVENT) && ev->active) {
2807
6ad4bba6313e delete level event of appropriate type, this should fix select()'s EBADF,
Igor Sysoev <igor@sysoev.ru>
parents: 2805
diff changeset
1021
6ad4bba6313e delete level event of appropriate type, this should fix select()'s EBADF,
Igor Sysoev <igor@sysoev.ru>
parents: 2805
diff changeset
1022 event = ev->write ? NGX_WRITE_EVENT : NGX_READ_EVENT;
6ad4bba6313e delete level event of appropriate type, this should fix select()'s EBADF,
Igor Sysoev <igor@sysoev.ru>
parents: 2805
diff changeset
1023
6ad4bba6313e delete level event of appropriate type, this should fix select()'s EBADF,
Igor Sysoev <igor@sysoev.ru>
parents: 2805
diff changeset
1024 if (ngx_del_event(ev, event, 0) != NGX_OK) {
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1025 ngx_http_upstream_finalize_request(r, u,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1026 NGX_HTTP_INTERNAL_SERVER_ERROR);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1027 return;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1028 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1029 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1030
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1031 if (n > 0) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1032 return;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1033 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1034
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1035 if (n == -1) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1036 if (err == NGX_EAGAIN) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1037 return;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1038 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1039
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1040 ev->error = 1;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1041
483
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
1042 } else { /* n == 0 */
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1043 err = 0;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1044 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1045
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
1046 ev->eof = 1;
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
1047 c->error = 1;
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
1048
2757
9cc973b46af1 get a full response if the response is cacheable or storable even
Igor Sysoev <igor@sysoev.ru>
parents: 2708
diff changeset
1049 if (!u->cacheable && u->peer.connection) {
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1050 ngx_log_error(NGX_LOG_INFO, ev->log, err,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1051 "client closed prematurely connection, "
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1052 "so upstream connection is closed too");
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1053 ngx_http_upstream_finalize_request(r, u,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1054 NGX_HTTP_CLIENT_CLOSED_REQUEST);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1055 return;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1056 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1057
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1058 ngx_log_error(NGX_LOG_INFO, ev->log, err,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1059 "client closed prematurely connection");
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1060
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1061 if (u->peer.connection == NULL) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1062 ngx_http_upstream_finalize_request(r, u,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1063 NGX_HTTP_CLIENT_CLOSED_REQUEST);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1064 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1065 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1066
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1067
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
1068 static void
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
1069 ngx_http_upstream_connect(ngx_http_request_t *r, ngx_http_upstream_t *u)
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1070 {
591
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1071 ngx_int_t rc;
665
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
1072 ngx_time_t *tp;
591
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1073 ngx_connection_t *c;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1074
483
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
1075 r->connection->log->action = "connecting to upstream";
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1076
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1077 r->connection->single_connection = 0;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1078
889
a9a7e4b1a72b the previous fix does not actually fix overflow
Igor Sysoev <igor@sysoev.ru>
parents: 888
diff changeset
1079 if (u->state && u->state->response_sec) {
665
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
1080 tp = ngx_timeofday();
889
a9a7e4b1a72b the previous fix does not actually fix overflow
Igor Sysoev <igor@sysoev.ru>
parents: 888
diff changeset
1081 u->state->response_sec = tp->sec - u->state->response_sec;
a9a7e4b1a72b the previous fix does not actually fix overflow
Igor Sysoev <igor@sysoev.ru>
parents: 888
diff changeset
1082 u->state->response_msec = tp->msec - u->state->response_msec;
665
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
1083 }
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
1084
1168
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
1085 u->state = ngx_array_push(r->upstream_states);
665
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
1086 if (u->state == NULL) {
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
1087 ngx_http_upstream_finalize_request(r, u,
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
1088 NGX_HTTP_INTERNAL_SERVER_ERROR);
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
1089 return;
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
1090 }
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
1091
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
1092 ngx_memzero(u->state, sizeof(ngx_http_upstream_state_t));
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
1093
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
1094 tp = ngx_timeofday();
889
a9a7e4b1a72b the previous fix does not actually fix overflow
Igor Sysoev <igor@sysoev.ru>
parents: 888
diff changeset
1095 u->state->response_sec = tp->sec;
a9a7e4b1a72b the previous fix does not actually fix overflow
Igor Sysoev <igor@sysoev.ru>
parents: 888
diff changeset
1096 u->state->response_msec = tp->msec;
665
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
1097
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1098 rc = ngx_event_connect_peer(&u->peer);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1099
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1100 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1101 "http upstream connect: %i", rc);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1102
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1103 if (rc == NGX_ERROR) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1104 ngx_http_upstream_finalize_request(r, u,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1105 NGX_HTTP_INTERNAL_SERVER_ERROR);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1106 return;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1107 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1108
1707
f3188f6eae1f $upstream_addr did not contain last address, the bug was introduced in r1659
Igor Sysoev <igor@sysoev.ru>
parents: 1706
diff changeset
1109 u->state->peer = u->peer.name;
f3188f6eae1f $upstream_addr did not contain last address, the bug was introduced in r1659
Igor Sysoev <igor@sysoev.ru>
parents: 1706
diff changeset
1110
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1111 if (rc == NGX_BUSY) {
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1112 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, "no live upstreams");
1378
0be898896d1a backup upstream servers
Igor Sysoev <igor@sysoev.ru>
parents: 1340
diff changeset
1113 ngx_http_upstream_next(r, u, NGX_HTTP_UPSTREAM_FT_NOLIVE);
0be898896d1a backup upstream servers
Igor Sysoev <igor@sysoev.ru>
parents: 1340
diff changeset
1114 return;
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1115 }
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
1116
1378
0be898896d1a backup upstream servers
Igor Sysoev <igor@sysoev.ru>
parents: 1340
diff changeset
1117 if (rc == NGX_DECLINED) {
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1118 ngx_http_upstream_next(r, u, NGX_HTTP_UPSTREAM_FT_ERROR);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1119 return;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1120 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1121
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1122 /* rc == NGX_OK || rc == NGX_AGAIN */
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1123
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1124 c = u->peer.connection;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1125
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1126 c->data = r;
591
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1127
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
1128 c->write->handler = ngx_http_upstream_handler;
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
1129 c->read->handler = ngx_http_upstream_handler;
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
1130
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
1131 u->write_event_handler = ngx_http_upstream_send_request_handler;
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
1132 u->read_event_handler = ngx_http_upstream_process_header;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1133
1397
6c25a49e548a upstream sendfile bit was overridden by r->connection->sendfile
Igor Sysoev <igor@sysoev.ru>
parents: 1378
diff changeset
1134 c->sendfile &= r->connection->sendfile;
1958
3e9e4581fbba fix peer sendfile capability
Igor Sysoev <igor@sysoev.ru>
parents: 1947
diff changeset
1135 u->output.sendfile = c->sendfile;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1136
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1137 c->pool = r->pool;
2847
3e10674139e4 style fix
Igor Sysoev <igor@sysoev.ru>
parents: 2824
diff changeset
1138 c->log = r->connection->log;
3e10674139e4 style fix
Igor Sysoev <igor@sysoev.ru>
parents: 2824
diff changeset
1139 c->read->log = c->log;
3e10674139e4 style fix
Igor Sysoev <igor@sysoev.ru>
parents: 2824
diff changeset
1140 c->write->log = c->log;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1141
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1142 /* init or reinit the ngx_output_chain() and ngx_chain_writer() contexts */
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1143
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1144 u->writer.out = NULL;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1145 u->writer.last = &u->writer.out;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1146 u->writer.connection = c;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1147 u->writer.limit = 0;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1148
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1149 if (u->request_sent) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1150 if (ngx_http_upstream_reinit(r, u) != NGX_OK) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1151 ngx_http_upstream_finalize_request(r, u,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1152 NGX_HTTP_INTERNAL_SERVER_ERROR);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1153 return;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1154 }
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1155 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1156
1064
7c84c877f2d7 fix segfault when client_body_in_file_only is on, the body is not passed
Igor Sysoev <igor@sysoev.ru>
parents: 1063
diff changeset
1157 if (r->request_body
7c84c877f2d7 fix segfault when client_body_in_file_only is on, the body is not passed
Igor Sysoev <igor@sysoev.ru>
parents: 1063
diff changeset
1158 && r->request_body->buf
7c84c877f2d7 fix segfault when client_body_in_file_only is on, the body is not passed
Igor Sysoev <igor@sysoev.ru>
parents: 1063
diff changeset
1159 && r->request_body->temp_file
7c84c877f2d7 fix segfault when client_body_in_file_only is on, the body is not passed
Igor Sysoev <igor@sysoev.ru>
parents: 1063
diff changeset
1160 && r == r->main)
7c84c877f2d7 fix segfault when client_body_in_file_only is on, the body is not passed
Igor Sysoev <igor@sysoev.ru>
parents: 1063
diff changeset
1161 {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1162 /*
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1163 * the r->request_body->buf can be reused for one request only,
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1164 * the subrequests should allocate their own temporay bufs
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1165 */
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1166
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1167 u->output.free = ngx_alloc_chain_link(r->pool);
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1168 if (u->output.free == NULL) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1169 ngx_http_upstream_finalize_request(r, u,
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1170 NGX_HTTP_INTERNAL_SERVER_ERROR);
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1171 return;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1172 }
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1173
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1174 u->output.free->buf = r->request_body->buf;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1175 u->output.free->next = NULL;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1176 u->output.allocated = 1;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1177
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1178 r->request_body->buf->pos = r->request_body->buf->start;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1179 r->request_body->buf->last = r->request_body->buf->start;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1180 r->request_body->buf->tag = u->output.tag;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1181 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1182
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1183 u->request_sent = 0;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1184
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1185 if (rc == NGX_AGAIN) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1186 ngx_add_timer(c->write, u->conf->connect_timeout);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1187 return;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1188 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1189
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1190 #if (NGX_HTTP_SSL)
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1191
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
1192 if (u->ssl && c->ssl == NULL) {
591
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1193 ngx_http_upstream_ssl_init_connection(r, u, c);
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1194 return;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1195 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1196
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1197 #endif
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1198
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1199 ngx_http_upstream_send_request(r, u);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1200 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1201
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1202
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1203 #if (NGX_HTTP_SSL)
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1204
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1205 static void
591
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1206 ngx_http_upstream_ssl_init_connection(ngx_http_request_t *r,
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1207 ngx_http_upstream_t *u, ngx_connection_t *c)
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1208 {
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
1209 ngx_int_t rc;
591
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1210
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1211 if (ngx_ssl_create_connection(u->conf->ssl, c,
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1212 NGX_SSL_BUFFER|NGX_SSL_CLIENT)
2536
a6d6d762c554 small optimization: " == NGX_ERROR" > " != NGX_OK"
Igor Sysoev <igor@sysoev.ru>
parents: 2463
diff changeset
1213 != NGX_OK)
591
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1214 {
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1215 ngx_http_upstream_finalize_request(r, u,
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1216 NGX_HTTP_INTERNAL_SERVER_ERROR);
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1217 return;
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1218 }
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1219
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1220 c->sendfile = 0;
619
7a16e281c01f nginx-0.3.31-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 615
diff changeset
1221 u->output.sendfile = 0;
591
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1222
2184
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2183
diff changeset
1223 if (u->conf->ssl_session_reuse) {
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2183
diff changeset
1224 if (u->peer.set_session(&u->peer, u->peer.data) != NGX_OK) {
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2183
diff changeset
1225 ngx_http_upstream_finalize_request(r, u,
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2183
diff changeset
1226 NGX_HTTP_INTERNAL_SERVER_ERROR);
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2183
diff changeset
1227 return;
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2183
diff changeset
1228 }
591
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1229 }
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1230
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1231 r->connection->log->action = "SSL handshaking to upstream";
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1232
591
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1233 rc = ngx_ssl_handshake(c);
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1234
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1235 if (rc == NGX_AGAIN) {
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1236 c->ssl->handler = ngx_http_upstream_ssl_handshake;
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1237 return;
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1238 }
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1239
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1240 ngx_http_upstream_ssl_handshake(c);
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1241 }
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1242
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1243
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1244 static void
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1245 ngx_http_upstream_ssl_handshake(ngx_connection_t *c)
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1246 {
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1247 ngx_http_request_t *r;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1248 ngx_http_upstream_t *u;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1249
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1250 r = c->data;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1251 u = r->upstream;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1252
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1253 if (c->ssl->handshaked) {
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1254
2184
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2183
diff changeset
1255 if (u->conf->ssl_session_reuse) {
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2183
diff changeset
1256 u->peer.save_session(&u->peer, u->peer.data);
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2183
diff changeset
1257 }
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
1258
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
1259 c->write->handler = ngx_http_upstream_handler;
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
1260 c->read->handler = ngx_http_upstream_handler;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1261
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1262 ngx_http_upstream_send_request(r, u);
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1263
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1264 return;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1265 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1266
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1267 ngx_http_upstream_next(r, u, NGX_HTTP_UPSTREAM_FT_ERROR);
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1268
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1269 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1270
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1271 #endif
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1272
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1273
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1274 static ngx_int_t
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
1275 ngx_http_upstream_reinit(ngx_http_request_t *r, ngx_http_upstream_t *u)
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1276 {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1277 ngx_chain_t *cl;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1278
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1279 if (u->reinit_request(r) != NGX_OK) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1280 return NGX_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1281 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1282
1705
d22095839d86 optimize r->upstream usage
Igor Sysoev <igor@sysoev.ru>
parents: 1701
diff changeset
1283 ngx_memzero(&u->headers_in, sizeof(ngx_http_upstream_headers_in_t));
d22095839d86 optimize r->upstream usage
Igor Sysoev <igor@sysoev.ru>
parents: 1701
diff changeset
1284
d22095839d86 optimize r->upstream usage
Igor Sysoev <igor@sysoev.ru>
parents: 1701
diff changeset
1285 if (ngx_list_init(&u->headers_in.headers, r->pool, 8,
591
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1286 sizeof(ngx_table_elt_t))
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1287 != NGX_OK)
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1288 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1289 return NGX_ERROR;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1290 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1291
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1292 /* reinit the request chain */
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1293
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1294 for (cl = u->request_bufs; cl; cl = cl->next) {
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1295 cl->buf->pos = cl->buf->start;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1296 cl->buf->file_pos = 0;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1297 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1298
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1299 /* reinit the subrequest's ngx_output_chain() context */
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1300
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1301 if (r->request_body && r->request_body->temp_file
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 593
diff changeset
1302 && r != r->main && u->output.buf)
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1303 {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1304 u->output.free = ngx_alloc_chain_link(r->pool);
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1305 if (u->output.free == NULL) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1306 return NGX_ERROR;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1307 }
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1308
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1309 u->output.free->buf = u->output.buf;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1310 u->output.free->next = NULL;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1311
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1312 u->output.buf->pos = u->output.buf->start;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1313 u->output.buf->last = u->output.buf->start;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1314 }
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1315
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1316 u->output.buf = NULL;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1317 u->output.in = NULL;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1318 u->output.busy = NULL;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1319
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1320 /* reinit u->buffer */
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1321
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1322 u->buffer.pos = u->buffer.start;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1323
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1324 #if (NGX_HTTP_CACHE)
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1325
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1326 if (r->cache) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1327 u->buffer.pos += r->cache->header_start;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1328 }
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1329
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1330 #endif
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1331
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1332 u->buffer.last = u->buffer.pos;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1333
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1334 return NGX_OK;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1335 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1336
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1337
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
1338 static void
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
1339 ngx_http_upstream_send_request(ngx_http_request_t *r, ngx_http_upstream_t *u)
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1340 {
1153
c843f3df3b85 separate ngx_http_upstream_test_connect() and
Igor Sysoev <igor@sysoev.ru>
parents: 1143
diff changeset
1341 ngx_int_t rc;
483
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
1342 ngx_connection_t *c;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1343
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1344 c = u->peer.connection;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1345
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1346 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1347 "http upstream send request");
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1348
1153
c843f3df3b85 separate ngx_http_upstream_test_connect() and
Igor Sysoev <igor@sysoev.ru>
parents: 1143
diff changeset
1349 if (!u->request_sent && ngx_http_upstream_test_connect(c) != NGX_OK) {
1166
bde5e4134759 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 1162
diff changeset
1350 ngx_http_upstream_next(r, u, NGX_HTTP_UPSTREAM_FT_ERROR);
1153
c843f3df3b85 separate ngx_http_upstream_test_connect() and
Igor Sysoev <igor@sysoev.ru>
parents: 1143
diff changeset
1351 return;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1352 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1353
483
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
1354 c->log->action = "sending request to upstream";
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1355
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1356 rc = ngx_output_chain(&u->output, u->request_sent ? NULL : u->request_bufs);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1357
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1358 u->request_sent = 1;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1359
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1360 if (rc == NGX_ERROR) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1361 ngx_http_upstream_next(r, u, NGX_HTTP_UPSTREAM_FT_ERROR);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1362 return;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1363 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1364
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1365 if (c->write->timer_set) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1366 ngx_del_timer(c->write);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1367 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1368
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1369 if (rc == NGX_AGAIN) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1370 ngx_add_timer(c->write, u->conf->send_timeout);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1371
2386
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
1372 if (ngx_handle_write_event(c->write, u->conf->send_lowat) != NGX_OK) {
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1373 ngx_http_upstream_finalize_request(r, u,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1374 NGX_HTTP_INTERNAL_SERVER_ERROR);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1375 return;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1376 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1377
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1378 return;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1379 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1380
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1381 /* rc == NGX_OK */
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1382
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1383 if (c->tcp_nopush == NGX_TCP_NOPUSH_SET) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1384 if (ngx_tcp_push(c->fd) == NGX_ERROR) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1385 ngx_log_error(NGX_LOG_CRIT, c->log, ngx_socket_errno,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1386 ngx_tcp_push_n " failed");
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1387 ngx_http_upstream_finalize_request(r, u,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1388 NGX_HTTP_INTERNAL_SERVER_ERROR);
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1389 return;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1390 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1391
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1392 c->tcp_nopush = NGX_TCP_NOPUSH_UNSET;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1393 }
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1394
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1395 ngx_add_timer(c->read, u->conf->read_timeout);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1396
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1397 #if 1
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1398 if (c->read->ready) {
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1399
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1400 /* post aio operation */
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1401
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1402 /*
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1403 * TODO comment
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1404 * although we can post aio operation just in the end
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1405 * of ngx_http_upstream_connect() CHECK IT !!!
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1406 * it's better to do here because we postpone header buffer allocation
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1407 */
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1408
2386
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
1409 ngx_http_upstream_process_header(r, u);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1410 return;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1411 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1412 #endif
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1413
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
1414 u->write_event_handler = ngx_http_upstream_dummy_handler;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1415
2386
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
1416 if (ngx_handle_write_event(c->write, 0) != NGX_OK) {
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1417 ngx_http_upstream_finalize_request(r, u,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1418 NGX_HTTP_INTERNAL_SERVER_ERROR);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1419 return;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1420 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1421 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1422
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1423
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
1424 static void
2386
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
1425 ngx_http_upstream_send_request_handler(ngx_http_request_t *r,
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
1426 ngx_http_upstream_t *u)
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1427 {
2386
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
1428 ngx_connection_t *c;
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
1429
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
1430 c = u->peer.connection;
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
1431
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
1432 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1433 "http upstream send request handler");
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1434
2386
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
1435 if (c->write->timedout) {
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1436 ngx_http_upstream_next(r, u, NGX_HTTP_UPSTREAM_FT_TIMEOUT);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1437 return;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1438 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1439
591
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1440 #if (NGX_HTTP_SSL)
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1441
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
1442 if (u->ssl && c->ssl == NULL) {
591
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1443 ngx_http_upstream_ssl_init_connection(r, u, c);
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1444 return;
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1445 }
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1446
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1447 #endif
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1448
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
1449 if (u->header_sent) {
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
1450 u->write_event_handler = ngx_http_upstream_dummy_handler;
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
1451
2386
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
1452 (void) ngx_handle_write_event(c->write, 0);
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
1453
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
1454 return;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
1455 }
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
1456
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1457 ngx_http_upstream_send_request(r, u);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1458 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1459
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1460
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
1461 static void
2386
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
1462 ngx_http_upstream_process_header(ngx_http_request_t *r, ngx_http_upstream_t *u)
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1463 {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1464 ssize_t n;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1465 ngx_int_t rc;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1466 ngx_connection_t *c;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1467
2386
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
1468 c = u->peer.connection;
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
1469
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
1470 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0,
483
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
1471 "http upstream process header");
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1472
483
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
1473 c->log->action = "reading response header from upstream";
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1474
2386
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
1475 if (c->read->timedout) {
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1476 ngx_http_upstream_next(r, u, NGX_HTTP_UPSTREAM_FT_TIMEOUT);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1477 return;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1478 }
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1479
1153
c843f3df3b85 separate ngx_http_upstream_test_connect() and
Igor Sysoev <igor@sysoev.ru>
parents: 1143
diff changeset
1480 if (!u->request_sent && ngx_http_upstream_test_connect(c) != NGX_OK) {
1166
bde5e4134759 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 1162
diff changeset
1481 ngx_http_upstream_next(r, u, NGX_HTTP_UPSTREAM_FT_ERROR);
1153
c843f3df3b85 separate ngx_http_upstream_test_connect() and
Igor Sysoev <igor@sysoev.ru>
parents: 1143
diff changeset
1482 return;
c843f3df3b85 separate ngx_http_upstream_test_connect() and
Igor Sysoev <igor@sysoev.ru>
parents: 1143
diff changeset
1483 }
c843f3df3b85 separate ngx_http_upstream_test_connect() and
Igor Sysoev <igor@sysoev.ru>
parents: 1143
diff changeset
1484
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1485 if (u->buffer.start == NULL) {
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1486 u->buffer.start = ngx_palloc(r->pool, u->conf->buffer_size);
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1487 if (u->buffer.start == NULL) {
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1488 ngx_http_upstream_finalize_request(r, u,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1489 NGX_HTTP_INTERNAL_SERVER_ERROR);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1490 return;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1491 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1492
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1493 u->buffer.pos = u->buffer.start;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1494 u->buffer.last = u->buffer.start;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1495 u->buffer.end = u->buffer.start + u->conf->buffer_size;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1496 u->buffer.temporary = 1;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1497
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1498 u->buffer.tag = u->output.tag;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1499
1705
d22095839d86 optimize r->upstream usage
Igor Sysoev <igor@sysoev.ru>
parents: 1701
diff changeset
1500 if (ngx_list_init(&u->headers_in.headers, r->pool, 8,
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1501 sizeof(ngx_table_elt_t))
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1502 != NGX_OK)
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1503 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1504 ngx_http_upstream_finalize_request(r, u,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1505 NGX_HTTP_INTERNAL_SERVER_ERROR);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1506 return;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1507 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1508
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1509 #if (NGX_HTTP_CACHE)
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1510
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1511 if (r->cache) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1512 u->buffer.pos += r->cache->header_start;
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1513 u->buffer.last = u->buffer.pos;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1514 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1515 #endif
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1516 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1517
2360
64854406b1f9 read and process upstream header in cycle,
Igor Sysoev <igor@sysoev.ru>
parents: 2308
diff changeset
1518 for ( ;; ) {
64854406b1f9 read and process upstream header in cycle,
Igor Sysoev <igor@sysoev.ru>
parents: 2308
diff changeset
1519
64854406b1f9 read and process upstream header in cycle,
Igor Sysoev <igor@sysoev.ru>
parents: 2308
diff changeset
1520 n = c->recv(c, u->buffer.last, u->buffer.end - u->buffer.last);
64854406b1f9 read and process upstream header in cycle,
Igor Sysoev <igor@sysoev.ru>
parents: 2308
diff changeset
1521
64854406b1f9 read and process upstream header in cycle,
Igor Sysoev <igor@sysoev.ru>
parents: 2308
diff changeset
1522 if (n == NGX_AGAIN) {
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1523 #if 0
2360
64854406b1f9 read and process upstream header in cycle,
Igor Sysoev <igor@sysoev.ru>
parents: 2308
diff changeset
1524 ngx_add_timer(rev, u->read_timeout);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1525 #endif
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1526
2386
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
1527 if (ngx_handle_read_event(c->read, 0) != NGX_OK) {
2360
64854406b1f9 read and process upstream header in cycle,
Igor Sysoev <igor@sysoev.ru>
parents: 2308
diff changeset
1528 ngx_http_upstream_finalize_request(r, u,
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1529 NGX_HTTP_INTERNAL_SERVER_ERROR);
2360
64854406b1f9 read and process upstream header in cycle,
Igor Sysoev <igor@sysoev.ru>
parents: 2308
diff changeset
1530 return;
64854406b1f9 read and process upstream header in cycle,
Igor Sysoev <igor@sysoev.ru>
parents: 2308
diff changeset
1531 }
64854406b1f9 read and process upstream header in cycle,
Igor Sysoev <igor@sysoev.ru>
parents: 2308
diff changeset
1532
64854406b1f9 read and process upstream header in cycle,
Igor Sysoev <igor@sysoev.ru>
parents: 2308
diff changeset
1533 return;
64854406b1f9 read and process upstream header in cycle,
Igor Sysoev <igor@sysoev.ru>
parents: 2308
diff changeset
1534 }
64854406b1f9 read and process upstream header in cycle,
Igor Sysoev <igor@sysoev.ru>
parents: 2308
diff changeset
1535
64854406b1f9 read and process upstream header in cycle,
Igor Sysoev <igor@sysoev.ru>
parents: 2308
diff changeset
1536 if (n == 0) {
2386
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
1537 ngx_log_error(NGX_LOG_ERR, c->log, 0,
2360
64854406b1f9 read and process upstream header in cycle,
Igor Sysoev <igor@sysoev.ru>
parents: 2308
diff changeset
1538 "upstream prematurely closed connection");
64854406b1f9 read and process upstream header in cycle,
Igor Sysoev <igor@sysoev.ru>
parents: 2308
diff changeset
1539 }
64854406b1f9 read and process upstream header in cycle,
Igor Sysoev <igor@sysoev.ru>
parents: 2308
diff changeset
1540
64854406b1f9 read and process upstream header in cycle,
Igor Sysoev <igor@sysoev.ru>
parents: 2308
diff changeset
1541 if (n == NGX_ERROR || n == 0) {
64854406b1f9 read and process upstream header in cycle,
Igor Sysoev <igor@sysoev.ru>
parents: 2308
diff changeset
1542 ngx_http_upstream_next(r, u, NGX_HTTP_UPSTREAM_FT_ERROR);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1543 return;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1544 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1545
2360
64854406b1f9 read and process upstream header in cycle,
Igor Sysoev <igor@sysoev.ru>
parents: 2308
diff changeset
1546 u->buffer.last += n;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1547
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1548 #if 0
2360
64854406b1f9 read and process upstream header in cycle,
Igor Sysoev <igor@sysoev.ru>
parents: 2308
diff changeset
1549 u->valid_header_in = 0;
64854406b1f9 read and process upstream header in cycle,
Igor Sysoev <igor@sysoev.ru>
parents: 2308
diff changeset
1550
64854406b1f9 read and process upstream header in cycle,
Igor Sysoev <igor@sysoev.ru>
parents: 2308
diff changeset
1551 u->peer.cached = 0;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1552 #endif
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1553
2360
64854406b1f9 read and process upstream header in cycle,
Igor Sysoev <igor@sysoev.ru>
parents: 2308
diff changeset
1554 rc = u->process_header(r);
64854406b1f9 read and process upstream header in cycle,
Igor Sysoev <igor@sysoev.ru>
parents: 2308
diff changeset
1555
64854406b1f9 read and process upstream header in cycle,
Igor Sysoev <igor@sysoev.ru>
parents: 2308
diff changeset
1556 if (rc == NGX_AGAIN) {
64854406b1f9 read and process upstream header in cycle,
Igor Sysoev <igor@sysoev.ru>
parents: 2308
diff changeset
1557
64854406b1f9 read and process upstream header in cycle,
Igor Sysoev <igor@sysoev.ru>
parents: 2308
diff changeset
1558 if (u->buffer.pos == u->buffer.end) {
2386
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
1559 ngx_log_error(NGX_LOG_ERR, c->log, 0,
2360
64854406b1f9 read and process upstream header in cycle,
Igor Sysoev <igor@sysoev.ru>
parents: 2308
diff changeset
1560 "upstream sent too big header");
64854406b1f9 read and process upstream header in cycle,
Igor Sysoev <igor@sysoev.ru>
parents: 2308
diff changeset
1561
64854406b1f9 read and process upstream header in cycle,
Igor Sysoev <igor@sysoev.ru>
parents: 2308
diff changeset
1562 ngx_http_upstream_next(r, u,
64854406b1f9 read and process upstream header in cycle,
Igor Sysoev <igor@sysoev.ru>
parents: 2308
diff changeset
1563 NGX_HTTP_UPSTREAM_FT_INVALID_HEADER);
64854406b1f9 read and process upstream header in cycle,
Igor Sysoev <igor@sysoev.ru>
parents: 2308
diff changeset
1564 return;
64854406b1f9 read and process upstream header in cycle,
Igor Sysoev <igor@sysoev.ru>
parents: 2308
diff changeset
1565 }
64854406b1f9 read and process upstream header in cycle,
Igor Sysoev <igor@sysoev.ru>
parents: 2308
diff changeset
1566
64854406b1f9 read and process upstream header in cycle,
Igor Sysoev <igor@sysoev.ru>
parents: 2308
diff changeset
1567 continue;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1568 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1569
2360
64854406b1f9 read and process upstream header in cycle,
Igor Sysoev <igor@sysoev.ru>
parents: 2308
diff changeset
1570 break;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1571 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1572
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1573 if (rc == NGX_HTTP_UPSTREAM_INVALID_HEADER) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1574 ngx_http_upstream_next(r, u, NGX_HTTP_UPSTREAM_FT_INVALID_HEADER);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1575 return;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1576 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1577
1699
976db8c6fb64 return NGX_ERROR instead of NGX_HTTP_INTERNAL_SERVER_ERROR in u->parse_header()
Igor Sysoev <igor@sysoev.ru>
parents: 1693
diff changeset
1578 if (rc == NGX_ERROR) {
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1579 ngx_http_upstream_finalize_request(r, u,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1580 NGX_HTTP_INTERNAL_SERVER_ERROR);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1581 return;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1582 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1583
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1584 /* rc == NGX_OK */
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1585
3401
9e7926763f87 allow to handle 301/302 in error_page
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1586 if (u->headers_in.status_n > NGX_HTTP_SPECIAL_RESPONSE) {
2268
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
1587
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
1588 if (r->subrequest_in_memory) {
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
1589 u->buffer.last = u->buffer.pos;
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
1590 }
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
1591
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
1592 if (ngx_http_upstream_test_next(r, u) == NGX_OK) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1593 return;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1594 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1595
2267
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1596 if (ngx_http_upstream_intercept_errors(r, u) == NGX_OK) {
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1597 return;
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
1598 }
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
1599 }
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
1600
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1601 if (ngx_http_upstream_process_headers(r, u) != NGX_OK) {
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
1602 return;
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
1603 }
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
1604
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1605 if (!r->subrequest_in_memory) {
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1606 ngx_http_upstream_send_response(r, u);
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1607 return;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1608 }
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1609
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1610 /* subrequest content in memory */
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1611
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1612 if (u->input_filter == NULL) {
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1613 u->input_filter_init = ngx_http_upstream_non_buffered_filter_init;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1614 u->input_filter = ngx_http_upstream_non_buffered_filter;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1615 u->input_filter_ctx = r;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1616 }
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1617
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1618 if (u->input_filter_init(u->input_filter_ctx) == NGX_ERROR) {
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1619 ngx_http_upstream_finalize_request(r, u,
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1620 NGX_HTTP_INTERNAL_SERVER_ERROR);
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1621 return;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1622 }
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1623
2308
3f98400e31e9 memcached response was stored in variable with END
Igor Sysoev <igor@sysoev.ru>
parents: 2285
diff changeset
1624 n = u->buffer.last - u->buffer.pos;
3f98400e31e9 memcached response was stored in variable with END
Igor Sysoev <igor@sysoev.ru>
parents: 2285
diff changeset
1625
3f98400e31e9 memcached response was stored in variable with END
Igor Sysoev <igor@sysoev.ru>
parents: 2285
diff changeset
1626 if (n) {
3f98400e31e9 memcached response was stored in variable with END
Igor Sysoev <igor@sysoev.ru>
parents: 2285
diff changeset
1627 u->buffer.last -= n;
3f98400e31e9 memcached response was stored in variable with END
Igor Sysoev <igor@sysoev.ru>
parents: 2285
diff changeset
1628
2402
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
1629 u->state->response_length += n;
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
1630
2308
3f98400e31e9 memcached response was stored in variable with END
Igor Sysoev <igor@sysoev.ru>
parents: 2285
diff changeset
1631 if (u->input_filter(u->input_filter_ctx, n) == NGX_ERROR) {
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1632 ngx_http_upstream_finalize_request(r, u, NGX_ERROR);
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1633 return;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1634 }
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1635
2308
3f98400e31e9 memcached response was stored in variable with END
Igor Sysoev <igor@sysoev.ru>
parents: 2285
diff changeset
1636 if (u->length == 0) {
3f98400e31e9 memcached response was stored in variable with END
Igor Sysoev <igor@sysoev.ru>
parents: 2285
diff changeset
1637 ngx_http_upstream_finalize_request(r, u, 0);
3f98400e31e9 memcached response was stored in variable with END
Igor Sysoev <igor@sysoev.ru>
parents: 2285
diff changeset
1638 return;
3f98400e31e9 memcached response was stored in variable with END
Igor Sysoev <igor@sysoev.ru>
parents: 2285
diff changeset
1639 }
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1640 }
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1641
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
1642 u->read_event_handler = ngx_http_upstream_process_body_in_memory;
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1643
2386
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
1644 ngx_http_upstream_process_body_in_memory(r, u);
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1645 }
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1646
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1647
1153
c843f3df3b85 separate ngx_http_upstream_test_connect() and
Igor Sysoev <igor@sysoev.ru>
parents: 1143
diff changeset
1648 static ngx_int_t
2268
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
1649 ngx_http_upstream_test_next(ngx_http_request_t *r, ngx_http_upstream_t *u)
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
1650 {
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
1651 ngx_uint_t status;
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
1652 ngx_http_upstream_next_t *un;
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
1653
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
1654 status = u->headers_in.status_n;
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
1655
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
1656 for (un = ngx_http_upstream_next_errors; un->status; un++) {
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
1657
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
1658 if (status != un->status) {
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
1659 continue;
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
1660 }
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
1661
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
1662 if (u->peer.tries > 1 && (u->conf->next_upstream & un->mask)) {
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
1663 ngx_http_upstream_next(r, u, un->mask);
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
1664 return NGX_OK;
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
1665 }
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
1666
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
1667 #if (NGX_HTTP_CACHE)
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
1668
2952
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
1669 if (u->cache_status == NGX_HTTP_CACHE_EXPIRED
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
1670 && (u->conf->cache_use_stale & un->mask))
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
1671 {
2824
d106509491b5 fix building --without-http-cache
Igor Sysoev <igor@sysoev.ru>
parents: 2807
diff changeset
1672 ngx_int_t rc;
2805
60551422e150 reinit proxy/fastcgi header parser before ngx_http_upstream_cache_send()
Igor Sysoev <igor@sysoev.ru>
parents: 2804
diff changeset
1673
60551422e150 reinit proxy/fastcgi header parser before ngx_http_upstream_cache_send()
Igor Sysoev <igor@sysoev.ru>
parents: 2804
diff changeset
1674 rc = u->reinit_request(r);
60551422e150 reinit proxy/fastcgi header parser before ngx_http_upstream_cache_send()
Igor Sysoev <igor@sysoev.ru>
parents: 2804
diff changeset
1675
60551422e150 reinit proxy/fastcgi header parser before ngx_http_upstream_cache_send()
Igor Sysoev <igor@sysoev.ru>
parents: 2804
diff changeset
1676 if (rc == NGX_OK) {
2952
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
1677 u->cache_status = NGX_HTTP_CACHE_STALE;
2805
60551422e150 reinit proxy/fastcgi header parser before ngx_http_upstream_cache_send()
Igor Sysoev <igor@sysoev.ru>
parents: 2804
diff changeset
1678 rc = ngx_http_upstream_cache_send(r, u);
60551422e150 reinit proxy/fastcgi header parser before ngx_http_upstream_cache_send()
Igor Sysoev <igor@sysoev.ru>
parents: 2804
diff changeset
1679 }
60551422e150 reinit proxy/fastcgi header parser before ngx_http_upstream_cache_send()
Igor Sysoev <igor@sysoev.ru>
parents: 2804
diff changeset
1680
60551422e150 reinit proxy/fastcgi header parser before ngx_http_upstream_cache_send()
Igor Sysoev <igor@sysoev.ru>
parents: 2804
diff changeset
1681 ngx_http_upstream_finalize_request(r, u, rc);
2268
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
1682 return NGX_OK;
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
1683 }
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
1684
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
1685 #endif
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
1686 }
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
1687
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
1688 return NGX_DECLINED;
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
1689 }
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
1690
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
1691
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2267
diff changeset
1692 static ngx_int_t
2267
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1693 ngx_http_upstream_intercept_errors(ngx_http_request_t *r,
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1694 ngx_http_upstream_t *u)
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1695 {
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1696 ngx_int_t status;
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1697 ngx_uint_t i;
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1698 ngx_table_elt_t *h;
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1699 ngx_http_err_page_t *err_page;
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1700 ngx_http_core_loc_conf_t *clcf;
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1701
2441
0c117a89f399 in miss case memcached module returned END instead of default 404 page body
Igor Sysoev <igor@sysoev.ru>
parents: 2422
diff changeset
1702 status = u->headers_in.status_n;
0c117a89f399 in miss case memcached module returned END instead of default 404 page body
Igor Sysoev <igor@sysoev.ru>
parents: 2422
diff changeset
1703
0c117a89f399 in miss case memcached module returned END instead of default 404 page body
Igor Sysoev <igor@sysoev.ru>
parents: 2422
diff changeset
1704 if (status == NGX_HTTP_NOT_FOUND && u->conf->intercept_404) {
0c117a89f399 in miss case memcached module returned END instead of default 404 page body
Igor Sysoev <igor@sysoev.ru>
parents: 2422
diff changeset
1705 ngx_http_upstream_finalize_request(r, u, NGX_HTTP_NOT_FOUND);
0c117a89f399 in miss case memcached module returned END instead of default 404 page body
Igor Sysoev <igor@sysoev.ru>
parents: 2422
diff changeset
1706 return NGX_OK;
0c117a89f399 in miss case memcached module returned END instead of default 404 page body
Igor Sysoev <igor@sysoev.ru>
parents: 2422
diff changeset
1707 }
0c117a89f399 in miss case memcached module returned END instead of default 404 page body
Igor Sysoev <igor@sysoev.ru>
parents: 2422
diff changeset
1708
2267
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1709 if (!u->conf->intercept_errors) {
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1710 return NGX_DECLINED;
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1711 }
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1712
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1713 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1714
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1715 if (clcf->error_pages == NULL) {
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1716 return NGX_DECLINED;
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1717 }
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1718
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1719 err_page = clcf->error_pages->elts;
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1720 for (i = 0; i < clcf->error_pages->nelts; i++) {
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1721
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1722 if (err_page[i].status == status) {
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1723
2953
aa12525236da fix segfault if there is error_page 401, proxy_intercept_errors is on
Igor Sysoev <igor@sysoev.ru>
parents: 2952
diff changeset
1724 if (status == NGX_HTTP_UNAUTHORIZED
aa12525236da fix segfault if there is error_page 401, proxy_intercept_errors is on
Igor Sysoev <igor@sysoev.ru>
parents: 2952
diff changeset
1725 && u->headers_in.www_authenticate)
aa12525236da fix segfault if there is error_page 401, proxy_intercept_errors is on
Igor Sysoev <igor@sysoev.ru>
parents: 2952
diff changeset
1726 {
2267
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1727 h = ngx_list_push(&r->headers_out.headers);
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1728
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1729 if (h == NULL) {
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1730 ngx_http_upstream_finalize_request(r, u,
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1731 NGX_HTTP_INTERNAL_SERVER_ERROR);
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1732 return NGX_OK;
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1733 }
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1734
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1735 *h = *u->headers_in.www_authenticate;
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1736
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1737 r->headers_out.www_authenticate = h;
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1738 }
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1739
3706
ea908f6ae499 an intercepted error code was not cached
Igor Sysoev <igor@sysoev.ru>
parents: 3705
diff changeset
1740 #if (NGX_HTTP_CACHE)
ea908f6ae499 an intercepted error code was not cached
Igor Sysoev <igor@sysoev.ru>
parents: 3705
diff changeset
1741
3709
64777690c697 fix r3707: cache node should be freed be a response is not cached
Igor Sysoev <igor@sysoev.ru>
parents: 3708
diff changeset
1742 if (r->cache) {
3706
ea908f6ae499 an intercepted error code was not cached
Igor Sysoev <igor@sysoev.ru>
parents: 3705
diff changeset
1743 time_t valid;
ea908f6ae499 an intercepted error code was not cached
Igor Sysoev <igor@sysoev.ru>
parents: 3705
diff changeset
1744
ea908f6ae499 an intercepted error code was not cached
Igor Sysoev <igor@sysoev.ru>
parents: 3705
diff changeset
1745 valid = ngx_http_file_cache_valid(u->conf->cache_valid, status);
ea908f6ae499 an intercepted error code was not cached
Igor Sysoev <igor@sysoev.ru>
parents: 3705
diff changeset
1746
ea908f6ae499 an intercepted error code was not cached
Igor Sysoev <igor@sysoev.ru>
parents: 3705
diff changeset
1747 if (valid) {
ea908f6ae499 an intercepted error code was not cached
Igor Sysoev <igor@sysoev.ru>
parents: 3705
diff changeset
1748 r->cache->valid_sec = ngx_time() + valid;
ea908f6ae499 an intercepted error code was not cached
Igor Sysoev <igor@sysoev.ru>
parents: 3705
diff changeset
1749 r->cache->error = status;
ea908f6ae499 an intercepted error code was not cached
Igor Sysoev <igor@sysoev.ru>
parents: 3705
diff changeset
1750 }
ea908f6ae499 an intercepted error code was not cached
Igor Sysoev <igor@sysoev.ru>
parents: 3705
diff changeset
1751
3711
ce6ba077c270 several changes in cache cleanup handling:
Igor Sysoev <igor@sysoev.ru>
parents: 3709
diff changeset
1752 ngx_http_file_cache_free(r->cache, u->pipe->temp_file);
3706
ea908f6ae499 an intercepted error code was not cached
Igor Sysoev <igor@sysoev.ru>
parents: 3705
diff changeset
1753 }
ea908f6ae499 an intercepted error code was not cached
Igor Sysoev <igor@sysoev.ru>
parents: 3705
diff changeset
1754 #endif
2267
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1755 ngx_http_upstream_finalize_request(r, u, status);
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1756
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1757 return NGX_OK;
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1758 }
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1759 }
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1760
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1761 return NGX_DECLINED;
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1762 }
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1763
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1764
920be89a3d2d ngx_http_upstream_intercept_errors()
Igor Sysoev <igor@sysoev.ru>
parents: 2244
diff changeset
1765 static ngx_int_t
1153
c843f3df3b85 separate ngx_http_upstream_test_connect() and
Igor Sysoev <igor@sysoev.ru>
parents: 1143
diff changeset
1766 ngx_http_upstream_test_connect(ngx_connection_t *c)
c843f3df3b85 separate ngx_http_upstream_test_connect() and
Igor Sysoev <igor@sysoev.ru>
parents: 1143
diff changeset
1767 {
c843f3df3b85 separate ngx_http_upstream_test_connect() and
Igor Sysoev <igor@sysoev.ru>
parents: 1143
diff changeset
1768 int err;
c843f3df3b85 separate ngx_http_upstream_test_connect() and
Igor Sysoev <igor@sysoev.ru>
parents: 1143
diff changeset
1769 socklen_t len;
c843f3df3b85 separate ngx_http_upstream_test_connect() and
Igor Sysoev <igor@sysoev.ru>
parents: 1143
diff changeset
1770
c843f3df3b85 separate ngx_http_upstream_test_connect() and
Igor Sysoev <igor@sysoev.ru>
parents: 1143
diff changeset
1771 #if (NGX_HAVE_KQUEUE)
c843f3df3b85 separate ngx_http_upstream_test_connect() and
Igor Sysoev <igor@sysoev.ru>
parents: 1143
diff changeset
1772
c843f3df3b85 separate ngx_http_upstream_test_connect() and
Igor Sysoev <igor@sysoev.ru>
parents: 1143
diff changeset
1773 if (ngx_event_flags & NGX_USE_KQUEUE_EVENT) {
1166
bde5e4134759 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 1162
diff changeset
1774 if (c->write->pending_eof) {
1469
0a269c464eaf connection error should be logged with "connecting to upstream" action,
Igor Sysoev <igor@sysoev.ru>
parents: 1468
diff changeset
1775 c->log->action = "connecting to upstream";
1166
bde5e4134759 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 1162
diff changeset
1776 (void) ngx_connection_error(c, c->write->kq_errno,
bde5e4134759 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 1162
diff changeset
1777 "kevent() reported that connect() failed");
bde5e4134759 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 1162
diff changeset
1778 return NGX_ERROR;
bde5e4134759 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 1162
diff changeset
1779 }
1153
c843f3df3b85 separate ngx_http_upstream_test_connect() and
Igor Sysoev <igor@sysoev.ru>
parents: 1143
diff changeset
1780
c843f3df3b85 separate ngx_http_upstream_test_connect() and
Igor Sysoev <igor@sysoev.ru>
parents: 1143
diff changeset
1781 } else
c843f3df3b85 separate ngx_http_upstream_test_connect() and
Igor Sysoev <igor@sysoev.ru>
parents: 1143
diff changeset
1782 #endif
c843f3df3b85 separate ngx_http_upstream_test_connect() and
Igor Sysoev <igor@sysoev.ru>
parents: 1143
diff changeset
1783 {
1166
bde5e4134759 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 1162
diff changeset
1784 err = 0;
bde5e4134759 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 1162
diff changeset
1785 len = sizeof(int);
bde5e4134759 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 1162
diff changeset
1786
bde5e4134759 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 1162
diff changeset
1787 /*
bde5e4134759 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 1162
diff changeset
1788 * BSDs and Linux return 0 and set a pending error in err
bde5e4134759 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 1162
diff changeset
1789 * Solaris returns -1 and sets errno
bde5e4134759 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 1162
diff changeset
1790 */
bde5e4134759 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 1162
diff changeset
1791
bde5e4134759 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 1162
diff changeset
1792 if (getsockopt(c->fd, SOL_SOCKET, SO_ERROR, (void *) &err, &len)
bde5e4134759 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 1162
diff changeset
1793 == -1)
bde5e4134759 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 1162
diff changeset
1794 {
bde5e4134759 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 1162
diff changeset
1795 err = ngx_errno;
bde5e4134759 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 1162
diff changeset
1796 }
bde5e4134759 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 1162
diff changeset
1797
bde5e4134759 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 1162
diff changeset
1798 if (err) {
1469
0a269c464eaf connection error should be logged with "connecting to upstream" action,
Igor Sysoev <igor@sysoev.ru>
parents: 1468
diff changeset
1799 c->log->action = "connecting to upstream";
1166
bde5e4134759 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 1162
diff changeset
1800 (void) ngx_connection_error(c, err, "connect() failed");
bde5e4134759 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 1162
diff changeset
1801 return NGX_ERROR;
bde5e4134759 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 1162
diff changeset
1802 }
1153
c843f3df3b85 separate ngx_http_upstream_test_connect() and
Igor Sysoev <igor@sysoev.ru>
parents: 1143
diff changeset
1803 }
c843f3df3b85 separate ngx_http_upstream_test_connect() and
Igor Sysoev <igor@sysoev.ru>
parents: 1143
diff changeset
1804
c843f3df3b85 separate ngx_http_upstream_test_connect() and
Igor Sysoev <igor@sysoev.ru>
parents: 1143
diff changeset
1805 return NGX_OK;
c843f3df3b85 separate ngx_http_upstream_test_connect() and
Igor Sysoev <igor@sysoev.ru>
parents: 1143
diff changeset
1806 }
c843f3df3b85 separate ngx_http_upstream_test_connect() and
Igor Sysoev <igor@sysoev.ru>
parents: 1143
diff changeset
1807
c843f3df3b85 separate ngx_http_upstream_test_connect() and
Igor Sysoev <igor@sysoev.ru>
parents: 1143
diff changeset
1808
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1809 static ngx_int_t
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1810 ngx_http_upstream_process_headers(ngx_http_request_t *r, ngx_http_upstream_t *u)
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1811 {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1812 ngx_str_t *uri, args;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1813 ngx_uint_t i, flags;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1814 ngx_list_part_t *part;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1815 ngx_table_elt_t *h;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1816 ngx_http_upstream_header_t *hh;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1817 ngx_http_upstream_main_conf_t *umcf;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1818
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1819 umcf = ngx_http_get_module_main_conf(r, ngx_http_upstream_module);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1820
2786
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2757
diff changeset
1821 if (u->headers_in.x_accel_redirect
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2757
diff changeset
1822 && !(u->conf->ignore_headers & NGX_HTTP_UPSTREAM_IGN_XA_REDIRECT))
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2757
diff changeset
1823 {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1824 ngx_http_upstream_finalize_request(r, u, NGX_DECLINED);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1825
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1826 part = &u->headers_in.headers.part;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1827 h = part->elts;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1828
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1829 for (i = 0; /* void */; i++) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1830
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1831 if (i >= part->nelts) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1832 if (part->next == NULL) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1833 break;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1834 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1835
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1836 part = part->next;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1837 h = part->elts;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1838 i = 0;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1839 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1840
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1841 hh = ngx_hash_find(&umcf->headers_in_hash, h[i].hash,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1842 h[i].lowcase_key, h[i].key.len);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1843
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1844 if (hh && hh->redirect) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1845 if (hh->copy_handler(r, &h[i], hh->conf) != NGX_OK) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1846 ngx_http_finalize_request(r,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1847 NGX_HTTP_INTERNAL_SERVER_ERROR);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1848 return NGX_DONE;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1849 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1850 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1851 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1852
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1853 uri = &u->headers_in.x_accel_redirect->value;
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
1854 ngx_str_null(&args);
3161
d430c6ab1c99 check unsafe Destination
Igor Sysoev <igor@sysoev.ru>
parents: 3120
diff changeset
1855 flags = NGX_HTTP_LOG_UNSAFE;
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1856
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1857 if (ngx_http_parse_unsafe_uri(r, uri, &args, &flags) != NGX_OK) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1858 ngx_http_finalize_request(r, NGX_HTTP_NOT_FOUND);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1859 return NGX_DONE;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1860 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1861
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1862 if (r->method != NGX_HTTP_HEAD) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1863 r->method = NGX_HTTP_GET;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1864 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1865
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1866 r->valid_unparsed_uri = 0;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1867
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1868 ngx_http_internal_redirect(r, uri, &args);
3120
40b8b398dbbc fix request counter for X-Accel-Redirect, the bug was introduced in r3050
Igor Sysoev <igor@sysoev.ru>
parents: 3112
diff changeset
1869 ngx_http_finalize_request(r, NGX_DONE);
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1870 return NGX_DONE;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1871 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1872
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1873 part = &u->headers_in.headers.part;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1874 h = part->elts;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1875
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1876 for (i = 0; /* void */; i++) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1877
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1878 if (i >= part->nelts) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1879 if (part->next == NULL) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1880 break;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1881 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1882
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1883 part = part->next;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1884 h = part->elts;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1885 i = 0;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1886 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1887
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1888 if (ngx_hash_find(&u->conf->hide_headers_hash, h[i].hash,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1889 h[i].lowcase_key, h[i].key.len))
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1890 {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1891 continue;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1892 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1893
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1894 hh = ngx_hash_find(&umcf->headers_in_hash, h[i].hash,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1895 h[i].lowcase_key, h[i].key.len);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1896
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1897 if (hh) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1898 if (hh->copy_handler(r, &h[i], hh->conf) != NGX_OK) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1899 ngx_http_upstream_finalize_request(r, u,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1900 NGX_HTTP_INTERNAL_SERVER_ERROR);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1901 return NGX_DONE;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1902 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1903
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1904 continue;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1905 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1906
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1907 if (ngx_http_upstream_copy_header_line(r, &h[i], 0) != NGX_OK) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1908 ngx_http_upstream_finalize_request(r, u,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1909 NGX_HTTP_INTERNAL_SERVER_ERROR);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1910 return NGX_DONE;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1911 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1912 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1913
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1914 if (r->headers_out.server && r->headers_out.server->value.data == NULL) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1915 r->headers_out.server->hash = 0;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1916 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1917
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1918 if (r->headers_out.date && r->headers_out.date->value.data == NULL) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1919 r->headers_out.date->hash = 0;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1920 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1921
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1922 r->headers_out.status = u->headers_in.status_n;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1923 r->headers_out.status_line = u->headers_in.status_line;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1924
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1925 u->headers_in.content_length_n = r->headers_out.content_length_n;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1926
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1927 if (r->headers_out.content_length_n != -1) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1928 u->length = (size_t) r->headers_out.content_length_n;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1929
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1930 } else {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1931 u->length = NGX_MAX_SIZE_T_VALUE;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1932 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1933
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1934 return NGX_OK;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1935 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1936
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1937
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1938 static void
2386
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
1939 ngx_http_upstream_process_body_in_memory(ngx_http_request_t *r,
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
1940 ngx_http_upstream_t *u)
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1941 {
2386
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
1942 size_t size;
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
1943 ssize_t n;
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
1944 ngx_buf_t *b;
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
1945 ngx_event_t *rev;
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
1946 ngx_connection_t *c;
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
1947
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
1948 c = u->peer.connection;
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
1949 rev = c->read;
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1950
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1951 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0,
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1952 "http upstream process body on memory");
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1953
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1954 if (rev->timedout) {
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1955 ngx_connection_error(c, NGX_ETIMEDOUT, "upstream timed out");
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1956 ngx_http_upstream_finalize_request(r, u, NGX_ETIMEDOUT);
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1957 return;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1958 }
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1959
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1960 b = &u->buffer;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1961
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1962 for ( ;; ) {
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1963
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1964 size = b->end - b->last;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1965
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1966 if (size == 0) {
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1967 ngx_log_error(NGX_LOG_ALERT, c->log, 0,
3708
c1385a3b8093 fix typo
Igor Sysoev <igor@sysoev.ru>
parents: 3706
diff changeset
1968 "upstream buffer is too small to read response");
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1969 ngx_http_upstream_finalize_request(r, u, NGX_ERROR);
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1970 return;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1971 }
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1972
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1973 n = c->recv(c, b->last, size);
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1974
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1975 if (n == NGX_AGAIN) {
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1976 break;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1977 }
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1978
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1979 if (n == 0 || n == NGX_ERROR) {
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1980 ngx_http_upstream_finalize_request(r, u, n);
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1981 return;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1982 }
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1983
2402
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
1984 u->state->response_length += n;
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
1985
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1986 if (u->input_filter(u->input_filter_ctx, n) == NGX_ERROR) {
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1987 ngx_http_upstream_finalize_request(r, u, NGX_ERROR);
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1988 return;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1989 }
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1990
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1991 if (!rev->ready) {
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1992 break;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1993 }
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1994 }
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1995
2386
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
1996 if (ngx_handle_read_event(rev, 0) != NGX_OK) {
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1997 ngx_http_upstream_finalize_request(r, u, NGX_ERROR);
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1998 return;
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
1999 }
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
2000
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
2001 if (rev->active) {
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
2002 ngx_add_timer(rev, u->conf->read_timeout);
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
2003
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
2004 } else if (rev->timer_set) {
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
2005 ngx_del_timer(rev);
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 757
diff changeset
2006 }
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 675
diff changeset
2007 }
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 675
diff changeset
2008
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 675
diff changeset
2009
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 675
diff changeset
2010 static void
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 675
diff changeset
2011 ngx_http_upstream_send_response(ngx_http_request_t *r, ngx_http_upstream_t *u)
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 675
diff changeset
2012 {
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 675
diff changeset
2013 int tcp_nodelay;
2402
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
2014 ssize_t n;
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 675
diff changeset
2015 ngx_int_t rc;
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 675
diff changeset
2016 ngx_event_pipe_t *p;
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 675
diff changeset
2017 ngx_connection_t *c;
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 675
diff changeset
2018 ngx_http_core_loc_conf_t *clcf;
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 675
diff changeset
2019
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2020 rc = ngx_http_send_header(r);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2021
2701
756f73ca1e39 support HEAD in proxy cache
Igor Sysoev <igor@sysoev.ru>
parents: 2692
diff changeset
2022 if (rc == NGX_ERROR || rc > NGX_OK || r->post_action) {
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 483
diff changeset
2023 ngx_http_upstream_finalize_request(r, u, rc);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2024 return;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2025 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2026
2704
ac1e2e199c9f shutdown client connection for cacheable header only responses
Igor Sysoev <igor@sysoev.ru>
parents: 2703
diff changeset
2027 c = r->connection;
ac1e2e199c9f shutdown client connection for cacheable header only responses
Igor Sysoev <igor@sysoev.ru>
parents: 2703
diff changeset
2028
2701
756f73ca1e39 support HEAD in proxy cache
Igor Sysoev <igor@sysoev.ru>
parents: 2692
diff changeset
2029 if (r->header_only) {
2704
ac1e2e199c9f shutdown client connection for cacheable header only responses
Igor Sysoev <igor@sysoev.ru>
parents: 2703
diff changeset
2030
2701
756f73ca1e39 support HEAD in proxy cache
Igor Sysoev <igor@sysoev.ru>
parents: 2692
diff changeset
2031 if (u->cacheable || u->store) {
2704
ac1e2e199c9f shutdown client connection for cacheable header only responses
Igor Sysoev <igor@sysoev.ru>
parents: 2703
diff changeset
2032
ac1e2e199c9f shutdown client connection for cacheable header only responses
Igor Sysoev <igor@sysoev.ru>
parents: 2703
diff changeset
2033 if (ngx_shutdown_socket(c->fd, NGX_WRITE_SHUTDOWN) == -1) {
ac1e2e199c9f shutdown client connection for cacheable header only responses
Igor Sysoev <igor@sysoev.ru>
parents: 2703
diff changeset
2034 ngx_connection_error(c, ngx_socket_errno,
ac1e2e199c9f shutdown client connection for cacheable header only responses
Igor Sysoev <igor@sysoev.ru>
parents: 2703
diff changeset
2035 ngx_shutdown_socket_n " failed");
ac1e2e199c9f shutdown client connection for cacheable header only responses
Igor Sysoev <igor@sysoev.ru>
parents: 2703
diff changeset
2036 }
ac1e2e199c9f shutdown client connection for cacheable header only responses
Igor Sysoev <igor@sysoev.ru>
parents: 2703
diff changeset
2037
2701
756f73ca1e39 support HEAD in proxy cache
Igor Sysoev <igor@sysoev.ru>
parents: 2692
diff changeset
2038 r->read_event_handler = ngx_http_request_empty_handler;
756f73ca1e39 support HEAD in proxy cache
Igor Sysoev <igor@sysoev.ru>
parents: 2692
diff changeset
2039 r->write_event_handler = ngx_http_request_empty_handler;
2704
ac1e2e199c9f shutdown client connection for cacheable header only responses
Igor Sysoev <igor@sysoev.ru>
parents: 2703
diff changeset
2040 c->error = 1;
2701
756f73ca1e39 support HEAD in proxy cache
Igor Sysoev <igor@sysoev.ru>
parents: 2692
diff changeset
2041
756f73ca1e39 support HEAD in proxy cache
Igor Sysoev <igor@sysoev.ru>
parents: 2692
diff changeset
2042 } else {
756f73ca1e39 support HEAD in proxy cache
Igor Sysoev <igor@sysoev.ru>
parents: 2692
diff changeset
2043 ngx_http_upstream_finalize_request(r, u, rc);
756f73ca1e39 support HEAD in proxy cache
Igor Sysoev <igor@sysoev.ru>
parents: 2692
diff changeset
2044 return;
756f73ca1e39 support HEAD in proxy cache
Igor Sysoev <igor@sysoev.ru>
parents: 2692
diff changeset
2045 }
756f73ca1e39 support HEAD in proxy cache
Igor Sysoev <igor@sysoev.ru>
parents: 2692
diff changeset
2046 }
756f73ca1e39 support HEAD in proxy cache
Igor Sysoev <igor@sysoev.ru>
parents: 2692
diff changeset
2047
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2048 u->header_sent = 1;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2049
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
2050 if (r->request_body && r->request_body->temp_file) {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
2051 ngx_pool_run_cleanup_file(r->pool, r->request_body->temp_file->file.fd);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
2052 r->request_body->temp_file->file.fd = NGX_INVALID_FILE;
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
2053 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
2054
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2055 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2056
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
2057 if (!u->buffering) {
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2058
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2059 if (u->input_filter == NULL) {
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2060 u->input_filter_init = ngx_http_upstream_non_buffered_filter_init;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2061 u->input_filter = ngx_http_upstream_non_buffered_filter;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2062 u->input_filter_ctx = r;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2063 }
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2064
2381
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2065 u->read_event_handler = ngx_http_upstream_process_non_buffered_upstream;
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2066 r->write_event_handler =
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2067 ngx_http_upstream_process_non_buffered_downstream;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2068
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2069 r->limit_rate = 0;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2070
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2071 if (u->input_filter_init(u->input_filter_ctx) == NGX_ERROR) {
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2072 ngx_http_upstream_finalize_request(r, u, 0);
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2073 return;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2074 }
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2075
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
2076 if (clcf->tcp_nodelay && c->tcp_nodelay == NGX_TCP_NODELAY_UNSET) {
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
2077 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0, "tcp_nodelay");
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
2078
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
2079 tcp_nodelay = 1;
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
2080
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
2081 if (setsockopt(c->fd, IPPROTO_TCP, TCP_NODELAY,
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
2082 (const void *) &tcp_nodelay, sizeof(int)) == -1)
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
2083 {
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
2084 ngx_connection_error(c, ngx_socket_errno,
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
2085 "setsockopt(TCP_NODELAY) failed");
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
2086 ngx_http_upstream_finalize_request(r, u, 0);
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
2087 return;
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
2088 }
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
2089
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
2090 c->tcp_nodelay = NGX_TCP_NODELAY_SET;
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
2091 }
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
2092
2402
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
2093 n = u->buffer.last - u->buffer.pos;
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
2094
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
2095 if (n) {
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2096 u->buffer.last = u->buffer.pos;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2097
2402
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
2098 u->state->response_length += n;
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
2099
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
2100 if (u->input_filter(u->input_filter_ctx, n) == NGX_ERROR) {
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2101 ngx_http_upstream_finalize_request(r, u, 0);
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2102 return;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2103 }
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2104
2381
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2105 ngx_http_upstream_process_non_buffered_downstream(r);
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2106
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2107 } else {
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2108 u->buffer.pos = u->buffer.start;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2109 u->buffer.last = u->buffer.start;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2110
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2111 if (ngx_http_send_special(r, NGX_HTTP_FLUSH) == NGX_ERROR) {
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2112 ngx_http_upstream_finalize_request(r, u, 0);
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2113 return;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2114 }
1468
491e5059ea19 read EOF of header only responses in non-buffered proxying
Igor Sysoev <igor@sysoev.ru>
parents: 1397
diff changeset
2115
491e5059ea19 read EOF of header only responses in non-buffered proxying
Igor Sysoev <igor@sysoev.ru>
parents: 1397
diff changeset
2116 if (u->peer.connection->read->ready) {
2386
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
2117 ngx_http_upstream_process_non_buffered_upstream(r, u);
1468
491e5059ea19 read EOF of header only responses in non-buffered proxying
Igor Sysoev <igor@sysoev.ru>
parents: 1397
diff changeset
2118 }
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2119 }
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2120
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2121 return;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2122 }
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2123
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2124 /* TODO: preallocate event_pipe bufs, look "Content-Length" */
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2125
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
2126 #if (NGX_HTTP_CACHE)
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
2127
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
2128 if (r->cache && r->cache->file.fd != NGX_INVALID_FILE) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
2129 ngx_pool_run_cleanup_file(r->pool, r->cache->file.fd);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
2130 r->cache->file.fd = NGX_INVALID_FILE;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2131 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2132
3699
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3698
diff changeset
2133 switch (ngx_http_test_predicates(r, u->conf->no_cache)) {
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3698
diff changeset
2134
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3698
diff changeset
2135 case NGX_ERROR:
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3698
diff changeset
2136 ngx_http_upstream_finalize_request(r, u, 0);
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3698
diff changeset
2137 return;
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3698
diff changeset
2138
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3698
diff changeset
2139 case NGX_DECLINED:
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3698
diff changeset
2140 u->cacheable = 0;
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3698
diff changeset
2141 break;
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3698
diff changeset
2142
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3698
diff changeset
2143 default: /* NGX_OK */
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3698
diff changeset
2144
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3698
diff changeset
2145 if (u->cache_status == NGX_HTTP_CACHE_BYPASS) {
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3698
diff changeset
2146
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3698
diff changeset
2147 r->cache->min_uses = u->conf->cache_min_uses;
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3698
diff changeset
2148 r->cache->body_start = u->conf->buffer_size;
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3698
diff changeset
2149 r->cache->file_cache = u->conf->cache->data;
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3698
diff changeset
2150
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3698
diff changeset
2151 if (ngx_http_file_cache_create(r) != NGX_OK) {
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3698
diff changeset
2152 ngx_http_upstream_finalize_request(r, u, 0);
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3698
diff changeset
2153 return;
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3698
diff changeset
2154 }
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3698
diff changeset
2155
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3698
diff changeset
2156 u->cacheable = 1;
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3698
diff changeset
2157 }
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3698
diff changeset
2158
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3698
diff changeset
2159 break;
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3698
diff changeset
2160 }
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3698
diff changeset
2161
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
2162 if (u->cacheable) {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
2163 time_t now, valid;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
2164
2663
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
2165 now = ngx_time();
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
2166
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
2167 valid = r->cache->valid_sec;
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
2168
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
2169 if (valid == 0) {
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
2170 valid = ngx_http_file_cache_valid(u->conf->cache_valid,
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
2171 u->headers_in.status_n);
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
2172 if (valid) {
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
2173 r->cache->valid_sec = now + valid;
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
2174 }
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
2175 }
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
2176
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
2177 if (valid) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
2178 r->cache->last_modified = r->headers_out.last_modified_time;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
2179 r->cache->date = now;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
2180 r->cache->body_start = (u_short) (u->buffer.pos - u->buffer.start);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
2181
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
2182 ngx_http_file_cache_set_header(r, u->buffer.start);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
2183
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
2184 } else {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
2185 u->cacheable = 0;
2703
3b6afa999c2f support 304 for cacheable responses
Igor Sysoev <igor@sysoev.ru>
parents: 2701
diff changeset
2186 r->headers_out.last_modified_time = -1;
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
2187 }
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2188 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2189
2690
d3cffe32b930 add debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 2669
diff changeset
2190 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0,
d3cffe32b930 add debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 2669
diff changeset
2191 "http cacheable: %d", u->cacheable);
d3cffe32b930 add debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 2669
diff changeset
2192
3083
ffe8bfb38184 clean cache updating state if a response has uncacheable code or
Igor Sysoev <igor@sysoev.ru>
parents: 3056
diff changeset
2193 if (u->cacheable == 0 && r->cache) {
3711
ce6ba077c270 several changes in cache cleanup handling:
Igor Sysoev <igor@sysoev.ru>
parents: 3709
diff changeset
2194 ngx_http_file_cache_free(r->cache, u->pipe->temp_file);
3083
ffe8bfb38184 clean cache updating state if a response has uncacheable code or
Igor Sysoev <igor@sysoev.ru>
parents: 3056
diff changeset
2195 }
ffe8bfb38184 clean cache updating state if a response has uncacheable code or
Igor Sysoev <igor@sysoev.ru>
parents: 3056
diff changeset
2196
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2197 #endif
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2198
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2199 p = u->pipe;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2200
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2201 p->output_filter = (ngx_event_pipe_output_filter_pt) ngx_http_output_filter;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2202 p->output_ctx = r;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2203 p->tag = u->output.tag;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2204 p->bufs = u->conf->bufs;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2205 p->busy_size = u->conf->busy_buffers_size;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2206 p->upstream = u->peer.connection;
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
2207 p->downstream = c;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2208 p->pool = r->pool;
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
2209 p->log = c->log;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2210
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
2211 p->cacheable = u->cacheable || u->store;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2212
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
2213 p->temp_file = ngx_pcalloc(r->pool, sizeof(ngx_temp_file_t));
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
2214 if (p->temp_file == NULL) {
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2215 ngx_http_upstream_finalize_request(r, u, 0);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2216 return;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2217 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2218
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2219 p->temp_file->file.fd = NGX_INVALID_FILE;
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
2220 p->temp_file->file.log = c->log;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2221 p->temp_file->path = u->conf->temp_path;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2222 p->temp_file->pool = r->pool;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2223
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
2224 if (p->cacheable) {
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2225 p->temp_file->persistent = 1;
1291
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2226
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2227 } else {
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 665
diff changeset
2228 p->temp_file->log_level = NGX_LOG_WARN;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2229 p->temp_file->warn = "an upstream response is buffered "
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2230 "to a temporary file";
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2231 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2232
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2233 p->max_temp_file_size = u->conf->max_temp_file_size;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2234 p->temp_file_write_size = u->conf->temp_file_write_size;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2235
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
2236 p->preread_bufs = ngx_alloc_chain_link(r->pool);
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
2237 if (p->preread_bufs == NULL) {
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2238 ngx_http_upstream_finalize_request(r, u, 0);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2239 return;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2240 }
1291
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2241
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2242 p->preread_bufs->buf = &u->buffer;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2243 p->preread_bufs->next = NULL;
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2244 u->buffer.recycled = 1;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2245
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2246 p->preread_size = u->buffer.last - u->buffer.pos;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2247
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
2248 if (u->cacheable) {
1291
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2249
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2250 p->buf_to_file = ngx_calloc_buf(r->pool);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2251 if (p->buf_to_file == NULL) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2252 ngx_http_upstream_finalize_request(r, u, 0);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2253 return;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2254 }
1291
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2255
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2256 p->buf_to_file->pos = u->buffer.start;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2257 p->buf_to_file->last = u->buffer.pos;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2258 p->buf_to_file->temporary = 1;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2259 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2260
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2261 if (ngx_event_flags & NGX_USE_AIO_EVENT) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2262 /* the posted aio operation may currupt a shadow buffer */
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2263 p->single_buf = 1;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2264 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2265
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2266 /* TODO: p->free_bufs = 0 if use ngx_create_chain_of_bufs() */
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2267 p->free_bufs = 1;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2268
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2269 /*
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2270 * event_pipe would do u->buffer.last += p->preread_size
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2271 * as though these bytes were read
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2272 */
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2273 u->buffer.last = u->buffer.pos;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2274
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2275 if (u->conf->cyclic_temp_file) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2276
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2277 /*
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2278 * we need to disable the use of sendfile() if we use cyclic temp file
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2279 * because the writing a new data may interfere with sendfile()
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2280 * that uses the same kernel file pages (at least on FreeBSD)
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2281 */
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2282
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2283 p->cyclic_temp_file = 1;
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
2284 c->sendfile = 0;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2285
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2286 } else {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2287 p->cyclic_temp_file = 0;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2288 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2289
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2290 p->read_timeout = u->conf->read_timeout;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2291 p->send_timeout = clcf->send_timeout;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2292 p->send_lowat = clcf->send_lowat;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2293
2381
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2294 u->read_event_handler = ngx_http_upstream_process_upstream;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2295 r->write_event_handler = ngx_http_upstream_process_downstream;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2296
2386
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
2297 ngx_http_upstream_process_upstream(r, u);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2298 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2299
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2300
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
2301 static void
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2302 ngx_http_upstream_process_non_buffered_downstream(ngx_http_request_t *r)
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2303 {
2381
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2304 ngx_event_t *wev;
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2305 ngx_connection_t *c;
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2306 ngx_http_upstream_t *u;
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2307
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2308 c = r->connection;
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2309 u = r->upstream;
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2310 wev = c->write;
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2311
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2312 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0,
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2313 "http upstream process non buffered downstream");
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2314
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2315 c->log->action = "sending to client";
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2316
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2317 if (wev->timedout) {
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2318 c->timedout = 1;
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2319 ngx_connection_error(c, NGX_ETIMEDOUT, "client timed out");
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2320 ngx_http_upstream_finalize_request(r, u, 0);
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2321 return;
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2322 }
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2323
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2324 ngx_http_upstream_process_non_buffered_request(r, 1);
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2325 }
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2326
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2327
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2328 static void
2386
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
2329 ngx_http_upstream_process_non_buffered_upstream(ngx_http_request_t *r,
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
2330 ngx_http_upstream_t *u)
2381
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2331 {
2386
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
2332 ngx_connection_t *c;
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
2333
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
2334 c = u->peer.connection;
2381
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2335
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2336 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0,
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2337 "http upstream process non buffered upstream");
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2338
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2339 c->log->action = "reading upstream";
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2340
2386
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
2341 if (c->read->timedout) {
2381
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2342 ngx_connection_error(c, NGX_ETIMEDOUT, "upstream timed out");
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2343 ngx_http_upstream_finalize_request(r, u, 0);
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2344 return;
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2345 }
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2346
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2347 ngx_http_upstream_process_non_buffered_request(r, 0);
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2348 }
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2349
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2350
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2351 static void
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2352 ngx_http_upstream_process_non_buffered_request(ngx_http_request_t *r,
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2353 ngx_uint_t do_write)
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2354 {
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2355 size_t size;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2356 ssize_t n;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2357 ngx_buf_t *b;
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
2358 ngx_int_t rc;
2381
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2359 ngx_connection_t *downstream, *upstream;
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2360 ngx_http_upstream_t *u;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2361 ngx_http_core_loc_conf_t *clcf;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2362
756
d904b5cb3bba fix building introduced by previous commit
Igor Sysoev <igor@sysoev.ru>
parents: 755
diff changeset
2363 u = r->upstream;
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2364 downstream = r->connection;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2365 upstream = u->peer.connection;
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2366
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2367 b = &u->buffer;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2368
2381
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2369 do_write = do_write || u->length == 0;
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2370
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2371 for ( ;; ) {
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2372
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2373 if (do_write) {
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2374
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2375 if (u->out_bufs || u->busy_bufs) {
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
2376 rc = ngx_http_output_filter(r, u->out_bufs);
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
2377
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
2378 if (rc == NGX_ERROR) {
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2379 ngx_http_upstream_finalize_request(r, u, 0);
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2380 return;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2381 }
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2382
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2383 ngx_chain_update_chains(&u->free_bufs, &u->busy_bufs,
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2384 &u->out_bufs, u->output.tag);
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2385 }
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2386
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2387 if (u->busy_bufs == NULL) {
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2388
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2389 if (u->length == 0
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2390 || upstream->read->eof
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2391 || upstream->read->error)
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2392 {
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2393 ngx_http_upstream_finalize_request(r, u, 0);
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2394 return;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2395 }
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2396
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2397 b->pos = b->start;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2398 b->last = b->start;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2399 }
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2400 }
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2401
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2402 size = b->end - b->last;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2403
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2404 if (size > u->length) {
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2405 size = u->length;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2406 }
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2407
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2408 if (size && upstream->read->ready) {
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2409
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2410 n = upstream->recv(upstream, b->last, size);
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2411
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2412 if (n == NGX_AGAIN) {
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2413 break;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2414 }
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2415
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2416 if (n > 0) {
2402
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
2417 u->state->response_length += n;
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
2418
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2419 if (u->input_filter(u->input_filter_ctx, n) == NGX_ERROR) {
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2420 ngx_http_upstream_finalize_request(r, u, 0);
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2421 return;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2422 }
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2423 }
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2424
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2425 do_write = 1;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2426
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2427 continue;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2428 }
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2429
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2430 break;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2431 }
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2432
2381
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2433 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2434
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2435 if (downstream->data == r) {
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2436 if (ngx_handle_write_event(downstream->write, clcf->send_lowat)
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
2437 != NGX_OK)
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
2438 {
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
2439 ngx_http_upstream_finalize_request(r, u, 0);
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
2440 return;
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
2441 }
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2442 }
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2443
1063
e2a6ecc5a3ae a non-active client connection must not closed after send timeout
Igor Sysoev <igor@sysoev.ru>
parents: 1031
diff changeset
2444 if (downstream->write->active && !downstream->write->ready) {
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2445 ngx_add_timer(downstream->write, clcf->send_timeout);
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2446
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2447 } else if (downstream->write->timer_set) {
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2448 ngx_del_timer(downstream->write);
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2449 }
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2450
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
2451 if (ngx_handle_read_event(upstream->read, 0) != NGX_OK) {
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2452 ngx_http_upstream_finalize_request(r, u, 0);
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2453 return;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2454 }
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2455
1063
e2a6ecc5a3ae a non-active client connection must not closed after send timeout
Igor Sysoev <igor@sysoev.ru>
parents: 1031
diff changeset
2456 if (upstream->read->active && !upstream->read->ready) {
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2457 ngx_add_timer(upstream->read, u->conf->read_timeout);
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2458
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2459 } else if (upstream->read->timer_set) {
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2460 ngx_del_timer(upstream->read);
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2461 }
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2462 }
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2463
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2464
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2465 static ngx_int_t
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2466 ngx_http_upstream_non_buffered_filter_init(void *data)
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2467 {
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2468 return NGX_OK;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2469 }
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2470
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2471
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2472 static ngx_int_t
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2473 ngx_http_upstream_non_buffered_filter(void *data, ssize_t bytes)
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2474 {
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2475 ngx_http_request_t *r = data;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2476
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2477 ngx_buf_t *b;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2478 ngx_chain_t *cl, **ll;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2479 ngx_http_upstream_t *u;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2480
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2481 u = r->upstream;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2482
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2483 for (cl = u->out_bufs, ll = &u->out_bufs; cl; cl = cl->next) {
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2484 ll = &cl->next;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2485 }
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2486
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2487 cl = ngx_chain_get_free_buf(r->pool, &u->free_bufs);
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2488 if (cl == NULL) {
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2489 return NGX_ERROR;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2490 }
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2491
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2492 *ll = cl;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2493
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2494 cl->buf->flush = 1;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2495 cl->buf->memory = 1;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2496
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2497 b = &u->buffer;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2498
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2499 cl->buf->pos = b->last;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2500 b->last += bytes;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2501 cl->buf->last = b->last;
1908
f2953601ed3c fix memory leak in long-lived non buffered connections
Igor Sysoev <igor@sysoev.ru>
parents: 1902
diff changeset
2502 cl->buf->tag = u->output.tag;
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2503
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2504 if (u->length == NGX_MAX_SIZE_T_VALUE) {
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2505 return NGX_OK;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2506 }
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2507
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2508 u->length -= bytes;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2509
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2510 return NGX_OK;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2511 }
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2512
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2513
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2514 static void
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2515 ngx_http_upstream_process_downstream(ngx_http_request_t *r)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2516 {
2381
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2517 ngx_event_t *wev;
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2518 ngx_connection_t *c;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2519 ngx_event_pipe_t *p;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2520 ngx_http_upstream_t *u;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2521
2381
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2522 c = r->connection;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2523 u = r->upstream;
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2524 p = u->pipe;
2381
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2525 wev = c->write;
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2526
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2527 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0,
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2528 "http upstream process downstream");
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2529
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2530 c->log->action = "sending to client";
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2531
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2532 if (wev->timedout) {
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2533
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2534 if (wev->delayed) {
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2535
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2536 wev->timedout = 0;
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2537 wev->delayed = 0;
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2538
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2539 if (!wev->ready) {
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2540 ngx_add_timer(wev, p->send_timeout);
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2541
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2542 if (ngx_handle_write_event(wev, p->send_lowat) != NGX_OK) {
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2543 ngx_http_upstream_finalize_request(r, u, 0);
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2544 }
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2545
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2546 return;
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2547 }
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2548
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2549 if (ngx_event_pipe(p, wev->write) == NGX_ABORT) {
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2550 ngx_http_upstream_finalize_request(r, u, 0);
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2551 return;
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
2552 }
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2553
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2554 } else {
2381
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2555 p->downstream_error = 1;
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2556 c->timedout = 1;
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2557 ngx_connection_error(c, NGX_ETIMEDOUT, "client timed out");
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2558 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2559
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2560 } else {
2381
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2561
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2562 if (wev->delayed) {
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2563
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
2564 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0,
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
2565 "http downstream delayed");
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
2566
2381
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2567 if (ngx_handle_write_event(wev, p->send_lowat) != NGX_OK) {
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
2568 ngx_http_upstream_finalize_request(r, u, 0);
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
2569 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
2570
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
2571 return;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
2572 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
2573
2381
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2574 if (ngx_event_pipe(p, 1) == NGX_ABORT) {
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2575 ngx_http_upstream_finalize_request(r, u, 0);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2576 return;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2577 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2578 }
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2579
2381
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2580 ngx_http_upstream_process_request(r);
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2581 }
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2582
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2583
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2584 static void
2386
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
2585 ngx_http_upstream_process_upstream(ngx_http_request_t *r,
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
2586 ngx_http_upstream_t *u)
2381
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2587 {
2386
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
2588 ngx_connection_t *c;
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
2589
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
2590 c = u->peer.connection;
2381
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2591
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2592 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0,
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2593 "http upstream process upstream");
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2594
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2595 c->log->action = "reading upstream";
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2596
2386
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
2597 if (c->read->timedout) {
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
2598 u->pipe->upstream_error = 1;
2381
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2599 ngx_connection_error(c, NGX_ETIMEDOUT, "upstream timed out");
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2600
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2601 } else {
2386
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
2602 if (ngx_event_pipe(u->pipe, 0) == NGX_ABORT) {
2381
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2603 ngx_http_upstream_finalize_request(r, u, 0);
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2604 return;
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2605 }
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2606 }
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2607
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2608 ngx_http_upstream_process_request(r);
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2609 }
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2610
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2611
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2612 static void
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2613 ngx_http_upstream_process_request(ngx_http_request_t *r)
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2614 {
2445
3c6af1fb7586 proxy/fastcgi_store did not delete incomplete files
Igor Sysoev <igor@sysoev.ru>
parents: 2441
diff changeset
2615 ngx_uint_t del;
2381
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2616 ngx_temp_file_t *tf;
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2617 ngx_event_pipe_t *p;
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2618 ngx_http_upstream_t *u;
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2619
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2620 u = r->upstream;
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2621 p = u->pipe;
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2622
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2623 if (u->peer.connection) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2624
1291
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2625 if (u->store) {
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2626
2445
3c6af1fb7586 proxy/fastcgi_store did not delete incomplete files
Igor Sysoev <igor@sysoev.ru>
parents: 2441
diff changeset
2627 del = p->upstream_error;
3c6af1fb7586 proxy/fastcgi_store did not delete incomplete files
Igor Sysoev <igor@sysoev.ru>
parents: 2441
diff changeset
2628
1885
e5897822515f test response length in proxy/fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1777
diff changeset
2629 tf = u->pipe->temp_file;
e5897822515f test response length in proxy/fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1777
diff changeset
2630
2463
4bc8ea10d62b fix fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 2445
diff changeset
2631 if (p->upstream_eof || p->upstream_done) {
2445
3c6af1fb7586 proxy/fastcgi_store did not delete incomplete files
Igor Sysoev <igor@sysoev.ru>
parents: 2441
diff changeset
2632
3c6af1fb7586 proxy/fastcgi_store did not delete incomplete files
Igor Sysoev <igor@sysoev.ru>
parents: 2441
diff changeset
2633 if (u->headers_in.status_n == NGX_HTTP_OK
3c6af1fb7586 proxy/fastcgi_store did not delete incomplete files
Igor Sysoev <igor@sysoev.ru>
parents: 2441
diff changeset
2634 && (u->headers_in.content_length_n == -1
3c6af1fb7586 proxy/fastcgi_store did not delete incomplete files
Igor Sysoev <igor@sysoev.ru>
parents: 2441
diff changeset
2635 || (u->headers_in.content_length_n == tf->offset)))
3c6af1fb7586 proxy/fastcgi_store did not delete incomplete files
Igor Sysoev <igor@sysoev.ru>
parents: 2441
diff changeset
2636 {
3c6af1fb7586 proxy/fastcgi_store did not delete incomplete files
Igor Sysoev <igor@sysoev.ru>
parents: 2441
diff changeset
2637 ngx_http_upstream_store(r, u);
3c6af1fb7586 proxy/fastcgi_store did not delete incomplete files
Igor Sysoev <igor@sysoev.ru>
parents: 2441
diff changeset
2638
3c6af1fb7586 proxy/fastcgi_store did not delete incomplete files
Igor Sysoev <igor@sysoev.ru>
parents: 2441
diff changeset
2639 } else {
3c6af1fb7586 proxy/fastcgi_store did not delete incomplete files
Igor Sysoev <igor@sysoev.ru>
parents: 2441
diff changeset
2640 del = 1;
3c6af1fb7586 proxy/fastcgi_store did not delete incomplete files
Igor Sysoev <igor@sysoev.ru>
parents: 2441
diff changeset
2641 }
3c6af1fb7586 proxy/fastcgi_store did not delete incomplete files
Igor Sysoev <igor@sysoev.ru>
parents: 2441
diff changeset
2642 }
3c6af1fb7586 proxy/fastcgi_store did not delete incomplete files
Igor Sysoev <igor@sysoev.ru>
parents: 2441
diff changeset
2643
3c6af1fb7586 proxy/fastcgi_store did not delete incomplete files
Igor Sysoev <igor@sysoev.ru>
parents: 2441
diff changeset
2644 if (del && tf->file.fd != NGX_INVALID_FILE) {
3c6af1fb7586 proxy/fastcgi_store did not delete incomplete files
Igor Sysoev <igor@sysoev.ru>
parents: 2441
diff changeset
2645
1885
e5897822515f test response length in proxy/fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1777
diff changeset
2646 if (ngx_delete_file(tf->file.name.data) == NGX_FILE_ERROR) {
e5897822515f test response length in proxy/fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1777
diff changeset
2647
1291
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2648 ngx_log_error(NGX_LOG_CRIT, r->connection->log, ngx_errno,
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2649 ngx_delete_file_n " \"%s\" failed",
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2650 u->pipe->temp_file->file.name.data);
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2651 }
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2652 }
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2653 }
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2654
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
2655 #if (NGX_HTTP_CACHE)
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
2656
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
2657 if (u->cacheable) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
2658
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
2659 if (p->upstream_done) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
2660 ngx_http_file_cache_update(r, u->pipe->temp_file);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
2661
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
2662 } else if (p->upstream_eof) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
2663
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
2664 /* TODO: check length & update cache */
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
2665
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
2666 ngx_http_file_cache_update(r, u->pipe->temp_file);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
2667
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
2668 } else if (p->upstream_error) {
3711
ce6ba077c270 several changes in cache cleanup handling:
Igor Sysoev <igor@sysoev.ru>
parents: 3709
diff changeset
2669 ngx_http_file_cache_free(r->cache, u->pipe->temp_file);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2670 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2671 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2672
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2673 #endif
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2674
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2675 if (p->upstream_done || p->upstream_eof || p->upstream_error) {
2381
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2676 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
483
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
2677 "http upstream exit: %p", p->out);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2678 #if 0
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2679 ngx_http_busy_unlock(u->conf->busy_lock, &u->busy_lock);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2680 #endif
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2681 ngx_http_upstream_finalize_request(r, u, 0);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2682 return;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2683 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2684 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2685
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2686 if (p->downstream_error) {
2381
3d7a70173d77 fix r2378, run posted requests after upstream event handling
Igor Sysoev <igor@sysoev.ru>
parents: 2377
diff changeset
2687 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
483
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
2688 "http upstream downstream error");
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2689
2757
9cc973b46af1 get a full response if the response is cacheable or storable even
Igor Sysoev <igor@sysoev.ru>
parents: 2708
diff changeset
2690 if (!u->cacheable && !u->store && u->peer.connection) {
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2691 ngx_http_upstream_finalize_request(r, u, 0);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2692 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2693 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2694 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2695
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2696
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
2697 static void
1291
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2698 ngx_http_upstream_store(ngx_http_request_t *r, ngx_http_upstream_t *u)
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2699 {
1947
94b03bbd328e use ngx_ext_rename_file() in proxy/fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1916
diff changeset
2700 size_t root;
94b03bbd328e use ngx_ext_rename_file() in proxy/fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1916
diff changeset
2701 time_t lm;
94b03bbd328e use ngx_ext_rename_file() in proxy/fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1916
diff changeset
2702 ngx_str_t path;
94b03bbd328e use ngx_ext_rename_file() in proxy/fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1916
diff changeset
2703 ngx_temp_file_t *tf;
94b03bbd328e use ngx_ext_rename_file() in proxy/fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1916
diff changeset
2704 ngx_ext_rename_file_t ext;
1291
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2705
1777
edaea30d83be optimization
Igor Sysoev <igor@sysoev.ru>
parents: 1707
diff changeset
2706 tf = u->pipe->temp_file;
edaea30d83be optimization
Igor Sysoev <igor@sysoev.ru>
parents: 1707
diff changeset
2707
edaea30d83be optimization
Igor Sysoev <igor@sysoev.ru>
parents: 1707
diff changeset
2708 if (tf->file.fd == NGX_INVALID_FILE) {
1291
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2709
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2710 /* create file for empty 200 response */
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2711
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2712 tf = ngx_pcalloc(r->pool, sizeof(ngx_temp_file_t));
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2713 if (tf == NULL) {
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2714 return;
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2715 }
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2716
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2717 tf->file.fd = NGX_INVALID_FILE;
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2718 tf->file.log = r->connection->log;
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2719 tf->path = u->conf->temp_path;
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2720 tf->pool = r->pool;
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2721 tf->persistent = 1;
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2722
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2723 if (ngx_create_temp_file(&tf->file, tf->path, tf->pool,
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2724 tf->persistent, tf->clean, tf->access)
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2725 != NGX_OK)
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2726 {
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2727 return;
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2728 }
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2729
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2730 u->pipe->temp_file = tf;
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2731 }
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2732
1947
94b03bbd328e use ngx_ext_rename_file() in proxy/fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1916
diff changeset
2733 ext.access = u->conf->store_access;
2394
dbe746851b31 use ngx_ext_rename_file() for single file MOVE
Igor Sysoev <igor@sysoev.ru>
parents: 2386
diff changeset
2734 ext.path_access = u->conf->store_access;
1947
94b03bbd328e use ngx_ext_rename_file() in proxy/fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1916
diff changeset
2735 ext.time = -1;
94b03bbd328e use ngx_ext_rename_file() in proxy/fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1916
diff changeset
2736 ext.create_path = 1;
94b03bbd328e use ngx_ext_rename_file() in proxy/fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1916
diff changeset
2737 ext.delete_file = 1;
94b03bbd328e use ngx_ext_rename_file() in proxy/fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1916
diff changeset
2738 ext.log = r->connection->log;
1291
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2739
1705
d22095839d86 optimize r->upstream usage
Igor Sysoev <igor@sysoev.ru>
parents: 1701
diff changeset
2740 if (u->headers_in.last_modified) {
d22095839d86 optimize r->upstream usage
Igor Sysoev <igor@sysoev.ru>
parents: 1701
diff changeset
2741
1947
94b03bbd328e use ngx_ext_rename_file() in proxy/fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1916
diff changeset
2742 lm = ngx_http_parse_time(u->headers_in.last_modified->value.data,
94b03bbd328e use ngx_ext_rename_file() in proxy/fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1916
diff changeset
2743 u->headers_in.last_modified->value.len);
1291
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2744
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2745 if (lm != NGX_ERROR) {
1947
94b03bbd328e use ngx_ext_rename_file() in proxy/fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1916
diff changeset
2746 ext.time = lm;
94b03bbd328e use ngx_ext_rename_file() in proxy/fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1916
diff changeset
2747 ext.fd = tf->file.fd;
1291
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2748 }
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2749 }
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2750
1295
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
2751 if (u->conf->store_lengths == NULL) {
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
2752
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
2753 ngx_http_map_uri_to_path(r, &path, &root, 0);
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
2754
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
2755 } else {
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
2756 if (ngx_http_script_run(r, &path, u->conf->store_lengths->elts, 0,
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
2757 u->conf->store_values->elts)
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
2758 == NULL)
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
2759 {
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
2760 return;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
2761 }
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
2762 }
1291
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2763
3032
524ba56ba9f7 fix copy destination name length, introduced in r3025
Igor Sysoev <igor@sysoev.ru>
parents: 3024
diff changeset
2764 path.len--;
524ba56ba9f7 fix copy destination name length, introduced in r3025
Igor Sysoev <igor@sysoev.ru>
parents: 3024
diff changeset
2765
1291
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2766 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
1947
94b03bbd328e use ngx_ext_rename_file() in proxy/fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1916
diff changeset
2767 "upstream stores \"%s\" to \"%s\"",
94b03bbd328e use ngx_ext_rename_file() in proxy/fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1916
diff changeset
2768 tf->file.name.data, path.data);
94b03bbd328e use ngx_ext_rename_file() in proxy/fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1916
diff changeset
2769
94b03bbd328e use ngx_ext_rename_file() in proxy/fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1916
diff changeset
2770 (void) ngx_ext_rename_file(&tf->file.name, &path, &ext);
1291
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2771 }
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2772
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2773
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
2774 static void
2386
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
2775 ngx_http_upstream_dummy_handler(ngx_http_request_t *r, ngx_http_upstream_t *u)
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2776 {
2386
4ccaa42de633 use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents: 2381
diff changeset
2777 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2778 "http upstream dummy handler");
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2779 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2780
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2781
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
2782 static void
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
2783 ngx_http_upstream_next(ngx_http_request_t *r, ngx_http_upstream_t *u,
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
2784 ngx_uint_t ft_type)
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2785 {
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2786 ngx_uint_t status, state;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2787
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2788 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2789 "http next upstream, %xi", ft_type);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2790
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2791 #if 0
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2792 ngx_http_busy_unlock(u->conf->busy_lock, &u->busy_lock);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2793 #endif
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2794
525
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
2795 if (ft_type == NGX_HTTP_UPSTREAM_FT_HTTP_404) {
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2796 state = NGX_PEER_NEXT;
525
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
2797 } else {
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2798 state = NGX_PEER_FAILED;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2799 }
525
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
2800
1378
0be898896d1a backup upstream servers
Igor Sysoev <igor@sysoev.ru>
parents: 1340
diff changeset
2801 if (ft_type != NGX_HTTP_UPSTREAM_FT_NOLIVE) {
0be898896d1a backup upstream servers
Igor Sysoev <igor@sysoev.ru>
parents: 1340
diff changeset
2802 u->peer.free(&u->peer, u->peer.data, state);
0be898896d1a backup upstream servers
Igor Sysoev <igor@sysoev.ru>
parents: 1340
diff changeset
2803 }
525
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
2804
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2805 if (ft_type == NGX_HTTP_UPSTREAM_FT_TIMEOUT) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2806 ngx_log_error(NGX_LOG_ERR, r->connection->log, NGX_ETIMEDOUT,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2807 "upstream timed out");
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2808 }
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2809
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2810 if (u->peer.cached && ft_type == NGX_HTTP_UPSTREAM_FT_ERROR) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2811 status = 0;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2812
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2813 } else {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2814 switch(ft_type) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2815
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2816 case NGX_HTTP_UPSTREAM_FT_TIMEOUT:
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2817 status = NGX_HTTP_GATEWAY_TIME_OUT;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2818 break;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2819
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2820 case NGX_HTTP_UPSTREAM_FT_HTTP_500:
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2821 status = NGX_HTTP_INTERNAL_SERVER_ERROR;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2822 break;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2823
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2824 case NGX_HTTP_UPSTREAM_FT_HTTP_404:
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2825 status = NGX_HTTP_NOT_FOUND;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2826 break;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2827
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2828 /*
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2829 * NGX_HTTP_UPSTREAM_FT_BUSY_LOCK and NGX_HTTP_UPSTREAM_FT_MAX_WAITING
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2830 * never reach here
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2831 */
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2832
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2833 default:
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2834 status = NGX_HTTP_BAD_GATEWAY;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2835 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2836 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2837
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
2838 if (r->connection->error) {
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2839 ngx_http_upstream_finalize_request(r, u,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2840 NGX_HTTP_CLIENT_CLOSED_REQUEST);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2841 return;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2842 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2843
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2844 if (status) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2845 u->state->status = status;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2846
525
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
2847 if (u->peer.tries == 0 || !(u->conf->next_upstream & ft_type)) {
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2848
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2849 #if (NGX_HTTP_CACHE)
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2850
2952
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
2851 if (u->cache_status == NGX_HTTP_CACHE_EXPIRED
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
2852 && (u->conf->cache_use_stale & ft_type))
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
2853 {
2805
60551422e150 reinit proxy/fastcgi header parser before ngx_http_upstream_cache_send()
Igor Sysoev <igor@sysoev.ru>
parents: 2804
diff changeset
2854 ngx_int_t rc;
60551422e150 reinit proxy/fastcgi header parser before ngx_http_upstream_cache_send()
Igor Sysoev <igor@sysoev.ru>
parents: 2804
diff changeset
2855
60551422e150 reinit proxy/fastcgi header parser before ngx_http_upstream_cache_send()
Igor Sysoev <igor@sysoev.ru>
parents: 2804
diff changeset
2856 rc = u->reinit_request(r);
60551422e150 reinit proxy/fastcgi header parser before ngx_http_upstream_cache_send()
Igor Sysoev <igor@sysoev.ru>
parents: 2804
diff changeset
2857
60551422e150 reinit proxy/fastcgi header parser before ngx_http_upstream_cache_send()
Igor Sysoev <igor@sysoev.ru>
parents: 2804
diff changeset
2858 if (rc == NGX_OK) {
2952
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
2859 u->cache_status = NGX_HTTP_CACHE_STALE;
2805
60551422e150 reinit proxy/fastcgi header parser before ngx_http_upstream_cache_send()
Igor Sysoev <igor@sysoev.ru>
parents: 2804
diff changeset
2860 rc = ngx_http_upstream_cache_send(r, u);
60551422e150 reinit proxy/fastcgi header parser before ngx_http_upstream_cache_send()
Igor Sysoev <igor@sysoev.ru>
parents: 2804
diff changeset
2861 }
60551422e150 reinit proxy/fastcgi header parser before ngx_http_upstream_cache_send()
Igor Sysoev <igor@sysoev.ru>
parents: 2804
diff changeset
2862
60551422e150 reinit proxy/fastcgi header parser before ngx_http_upstream_cache_send()
Igor Sysoev <igor@sysoev.ru>
parents: 2804
diff changeset
2863 ngx_http_upstream_finalize_request(r, u, rc);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2864 return;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2865 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2866 #endif
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2867
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2868 ngx_http_upstream_finalize_request(r, u, status);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2869 return;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2870 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2871 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2872
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2873 if (u->peer.connection) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2874 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2875 "close http upstream connection: %d",
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2876 u->peer.connection->fd);
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2877 #if (NGX_HTTP_SSL)
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2878
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2879 if (u->peer.connection->ssl) {
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2880 u->peer.connection->ssl->no_wait_shutdown = 1;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2881 u->peer.connection->ssl->no_send_shutdown = 1;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2882
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2883 (void) ngx_ssl_shutdown(u->peer.connection);
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2884 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2885 #endif
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2886
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2887 ngx_close_connection(u->peer.connection);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2888 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2889
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2890 #if 0
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2891 if (u->conf->busy_lock && !u->busy_locked) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2892 ngx_http_upstream_busy_lock(p);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2893 return;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2894 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2895 #endif
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2896
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2897 ngx_http_upstream_connect(r, u);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2898 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2899
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2900
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
2901 static void
569
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
2902 ngx_http_upstream_cleanup(void *data)
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
2903 {
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
2904 ngx_http_request_t *r = data;
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
2905
1705
d22095839d86 optimize r->upstream usage
Igor Sysoev <igor@sysoev.ru>
parents: 1701
diff changeset
2906 ngx_http_upstream_t *u;
d22095839d86 optimize r->upstream usage
Igor Sysoev <igor@sysoev.ru>
parents: 1701
diff changeset
2907
569
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
2908 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
2909 "cleanup http upstream request: \"%V\"", &r->uri);
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
2910
1705
d22095839d86 optimize r->upstream usage
Igor Sysoev <igor@sysoev.ru>
parents: 1701
diff changeset
2911 u = r->upstream;
d22095839d86 optimize r->upstream usage
Igor Sysoev <igor@sysoev.ru>
parents: 1701
diff changeset
2912
d22095839d86 optimize r->upstream usage
Igor Sysoev <igor@sysoev.ru>
parents: 1701
diff changeset
2913 if (u->resolved && u->resolved->ctx) {
d22095839d86 optimize r->upstream usage
Igor Sysoev <igor@sysoev.ru>
parents: 1701
diff changeset
2914 ngx_resolve_name_done(u->resolved->ctx);
3169
b1013d768911 fix request counter in resolver handling, the bug was introduced in r3050
Igor Sysoev <igor@sysoev.ru>
parents: 3161
diff changeset
2915 u->resolved->ctx = NULL;
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
2916 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
2917
1705
d22095839d86 optimize r->upstream usage
Igor Sysoev <igor@sysoev.ru>
parents: 1701
diff changeset
2918 ngx_http_upstream_finalize_request(r, u, NGX_DONE);
569
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
2919 }
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
2920
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
2921
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
2922 static void
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
2923 ngx_http_upstream_finalize_request(ngx_http_request_t *r,
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
2924 ngx_http_upstream_t *u, ngx_int_t rc)
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2925 {
889
a9a7e4b1a72b the previous fix does not actually fix overflow
Igor Sysoev <igor@sysoev.ru>
parents: 888
diff changeset
2926 ngx_time_t *tp;
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
2927
483
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
2928 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
2929 "finalize http upstream request: %i", rc);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2930
2413
89ac47d91fc1 fix segfault
Igor Sysoev <igor@sysoev.ru>
parents: 2402
diff changeset
2931 if (u->cleanup) {
89ac47d91fc1 fix segfault
Igor Sysoev <igor@sysoev.ru>
parents: 2402
diff changeset
2932 *u->cleanup = NULL;
3418
a076e1823737 delete u->cleanup mark, this fixes large values in $upstream_response_time,
Igor Sysoev <igor@sysoev.ru>
parents: 3401
diff changeset
2933 u->cleanup = NULL;
2413
89ac47d91fc1 fix segfault
Igor Sysoev <igor@sysoev.ru>
parents: 2402
diff changeset
2934 }
569
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
2935
3169
b1013d768911 fix request counter in resolver handling, the bug was introduced in r3050
Igor Sysoev <igor@sysoev.ru>
parents: 3161
diff changeset
2936 if (u->resolved && u->resolved->ctx) {
b1013d768911 fix request counter in resolver handling, the bug was introduced in r3050
Igor Sysoev <igor@sysoev.ru>
parents: 3161
diff changeset
2937 ngx_resolve_name_done(u->resolved->ctx);
b1013d768911 fix request counter in resolver handling, the bug was introduced in r3050
Igor Sysoev <igor@sysoev.ru>
parents: 3161
diff changeset
2938 u->resolved->ctx = NULL;
b1013d768911 fix request counter in resolver handling, the bug was introduced in r3050
Igor Sysoev <igor@sysoev.ru>
parents: 3161
diff changeset
2939 }
b1013d768911 fix request counter in resolver handling, the bug was introduced in r3050
Igor Sysoev <igor@sysoev.ru>
parents: 3161
diff changeset
2940
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
2941 if (u->state && u->state->response_sec) {
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
2942 tp = ngx_timeofday();
889
a9a7e4b1a72b the previous fix does not actually fix overflow
Igor Sysoev <igor@sysoev.ru>
parents: 888
diff changeset
2943 u->state->response_sec = tp->sec - u->state->response_sec;
a9a7e4b1a72b the previous fix does not actually fix overflow
Igor Sysoev <igor@sysoev.ru>
parents: 888
diff changeset
2944 u->state->response_msec = tp->msec - u->state->response_msec;
2402
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
2945
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
2946 if (u->pipe) {
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
2947 u->state->response_length = u->pipe->read_length;
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
2948 }
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
2949 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
2950
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2951 u->finalize_request(r, rc);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2952
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
2953 if (u->peer.free) {
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
2954 u->peer.free(&u->peer, u->peer.data, 0);
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1654
diff changeset
2955 }
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2956
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2957 if (u->peer.connection) {
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2958
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2959 #if (NGX_HTTP_SSL)
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2960
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2961 /* TODO: do not shutdown persistent connection */
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2962
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2963 if (u->peer.connection->ssl) {
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2964
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2965 /*
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2966 * We send the "close notify" shutdown alert to the upstream only
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2967 * and do not wait its "close notify" shutdown alert.
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2968 * It is acceptable according to the TLS standard.
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2969 */
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2970
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2971 u->peer.connection->ssl->no_wait_shutdown = 1;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2972
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2973 (void) ngx_ssl_shutdown(u->peer.connection);
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2974 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2975 #endif
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2976
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2977 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2978 "close http upstream connection: %d",
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2979 u->peer.connection->fd);
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
2980
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2981 ngx_close_connection(u->peer.connection);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2982 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2983
483
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
2984 u->peer.connection = NULL;
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
2985
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2986 if (u->pipe && u->pipe->temp_file) {
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2987 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2988 "http upstream temp fd: %d",
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2989 u->pipe->temp_file->file.fd);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2990 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2991
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
2992 #if (NGX_HTTP_CACHE)
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
2993
3940
22f3e9197096 revert r3935 and fix "stalled cache updating" alert
Igor Sysoev <igor@sysoev.ru>
parents: 3934
diff changeset
2994 if (r->cache) {
22f3e9197096 revert r3935 and fix "stalled cache updating" alert
Igor Sysoev <igor@sysoev.ru>
parents: 3934
diff changeset
2995
22f3e9197096 revert r3935 and fix "stalled cache updating" alert
Igor Sysoev <igor@sysoev.ru>
parents: 3934
diff changeset
2996 if (u->cacheable) {
22f3e9197096 revert r3935 and fix "stalled cache updating" alert
Igor Sysoev <igor@sysoev.ru>
parents: 3934
diff changeset
2997
22f3e9197096 revert r3935 and fix "stalled cache updating" alert
Igor Sysoev <igor@sysoev.ru>
parents: 3934
diff changeset
2998 if (rc == NGX_HTTP_BAD_GATEWAY || rc == NGX_HTTP_GATEWAY_TIME_OUT) {
22f3e9197096 revert r3935 and fix "stalled cache updating" alert
Igor Sysoev <igor@sysoev.ru>
parents: 3934
diff changeset
2999 time_t valid;
22f3e9197096 revert r3935 and fix "stalled cache updating" alert
Igor Sysoev <igor@sysoev.ru>
parents: 3934
diff changeset
3000
22f3e9197096 revert r3935 and fix "stalled cache updating" alert
Igor Sysoev <igor@sysoev.ru>
parents: 3934
diff changeset
3001 valid = ngx_http_file_cache_valid(u->conf->cache_valid, rc);
22f3e9197096 revert r3935 and fix "stalled cache updating" alert
Igor Sysoev <igor@sysoev.ru>
parents: 3934
diff changeset
3002
22f3e9197096 revert r3935 and fix "stalled cache updating" alert
Igor Sysoev <igor@sysoev.ru>
parents: 3934
diff changeset
3003 if (valid) {
22f3e9197096 revert r3935 and fix "stalled cache updating" alert
Igor Sysoev <igor@sysoev.ru>
parents: 3934
diff changeset
3004 r->cache->valid_sec = ngx_time() + valid;
22f3e9197096 revert r3935 and fix "stalled cache updating" alert
Igor Sysoev <igor@sysoev.ru>
parents: 3934
diff changeset
3005 r->cache->error = rc;
22f3e9197096 revert r3935 and fix "stalled cache updating" alert
Igor Sysoev <igor@sysoev.ru>
parents: 3934
diff changeset
3006 }
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3007 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3008 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3009
3711
ce6ba077c270 several changes in cache cleanup handling:
Igor Sysoev <igor@sysoev.ru>
parents: 3709
diff changeset
3010 ngx_http_file_cache_free(r->cache, u->pipe->temp_file);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3011 }
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3012
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3013 #endif
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3014
2692
111e6e62af32 style fix
Igor Sysoev <igor@sysoev.ru>
parents: 2691
diff changeset
3015 if (u->header_sent
111e6e62af32 style fix
Igor Sysoev <igor@sysoev.ru>
parents: 2691
diff changeset
3016 && (rc == NGX_ERROR || rc >= NGX_HTTP_SPECIAL_RESPONSE))
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3017 {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3018 rc = 0;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3019 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3020
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
3021 if (rc == NGX_DECLINED) {
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
3022 return;
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
3023 }
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
3024
483
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
3025 r->connection->log->action = "sending to client";
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
3026
2971
87ddbe960172 fix ngx_http_send_special() for subrequests handled by perl
Igor Sysoev <igor@sysoev.ru>
parents: 2957
diff changeset
3027 if (rc == 0) {
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2360
diff changeset
3028 rc = ngx_http_send_special(r, NGX_HTTP_LAST);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3029 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3030
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3031 ngx_http_finalize_request(r, rc);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3032 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3033
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3034
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3035 static ngx_int_t
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3036 ngx_http_upstream_process_header_line(ngx_http_request_t *r, ngx_table_elt_t *h,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3037 ngx_uint_t offset)
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3038 {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3039 ngx_table_elt_t **ph;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3040
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3041 ph = (ngx_table_elt_t **) ((char *) &r->upstream->headers_in + offset);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3042
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3043 if (*ph == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3044 *ph = h;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3045 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3046
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3047 return NGX_OK;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3048 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3049
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3050
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3051 static ngx_int_t
2669
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3052 ngx_http_upstream_ignore_header_line(ngx_http_request_t *r, ngx_table_elt_t *h,
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3053 ngx_uint_t offset)
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3054 {
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3055 return NGX_OK;
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3056 }
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3057
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3058
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3059 static ngx_int_t
3669
1f5841b1fcd7 treat Set-Cookie as a header that forbids caching
Igor Sysoev <igor@sysoev.ru>
parents: 3667
diff changeset
3060 ngx_http_upstream_process_set_cookie(ngx_http_request_t *r, ngx_table_elt_t *h,
1f5841b1fcd7 treat Set-Cookie as a header that forbids caching
Igor Sysoev <igor@sysoev.ru>
parents: 3667
diff changeset
3061 ngx_uint_t offset)
1f5841b1fcd7 treat Set-Cookie as a header that forbids caching
Igor Sysoev <igor@sysoev.ru>
parents: 3667
diff changeset
3062 {
1f5841b1fcd7 treat Set-Cookie as a header that forbids caching
Igor Sysoev <igor@sysoev.ru>
parents: 3667
diff changeset
3063 #if (NGX_HTTP_CACHE)
1f5841b1fcd7 treat Set-Cookie as a header that forbids caching
Igor Sysoev <igor@sysoev.ru>
parents: 3667
diff changeset
3064 ngx_http_upstream_t *u;
1f5841b1fcd7 treat Set-Cookie as a header that forbids caching
Igor Sysoev <igor@sysoev.ru>
parents: 3667
diff changeset
3065
1f5841b1fcd7 treat Set-Cookie as a header that forbids caching
Igor Sysoev <igor@sysoev.ru>
parents: 3667
diff changeset
3066 u = r->upstream;
1f5841b1fcd7 treat Set-Cookie as a header that forbids caching
Igor Sysoev <igor@sysoev.ru>
parents: 3667
diff changeset
3067
1f5841b1fcd7 treat Set-Cookie as a header that forbids caching
Igor Sysoev <igor@sysoev.ru>
parents: 3667
diff changeset
3068 if (!(u->conf->ignore_headers & NGX_HTTP_UPSTREAM_IGN_SET_COOKIE)) {
1f5841b1fcd7 treat Set-Cookie as a header that forbids caching
Igor Sysoev <igor@sysoev.ru>
parents: 3667
diff changeset
3069 u->cacheable = 0;
1f5841b1fcd7 treat Set-Cookie as a header that forbids caching
Igor Sysoev <igor@sysoev.ru>
parents: 3667
diff changeset
3070 }
1f5841b1fcd7 treat Set-Cookie as a header that forbids caching
Igor Sysoev <igor@sysoev.ru>
parents: 3667
diff changeset
3071 #endif
1f5841b1fcd7 treat Set-Cookie as a header that forbids caching
Igor Sysoev <igor@sysoev.ru>
parents: 3667
diff changeset
3072
1f5841b1fcd7 treat Set-Cookie as a header that forbids caching
Igor Sysoev <igor@sysoev.ru>
parents: 3667
diff changeset
3073 return NGX_OK;
1f5841b1fcd7 treat Set-Cookie as a header that forbids caching
Igor Sysoev <igor@sysoev.ru>
parents: 3667
diff changeset
3074 }
1f5841b1fcd7 treat Set-Cookie as a header that forbids caching
Igor Sysoev <igor@sysoev.ru>
parents: 3667
diff changeset
3075
1f5841b1fcd7 treat Set-Cookie as a header that forbids caching
Igor Sysoev <igor@sysoev.ru>
parents: 3667
diff changeset
3076
1f5841b1fcd7 treat Set-Cookie as a header that forbids caching
Igor Sysoev <igor@sysoev.ru>
parents: 3667
diff changeset
3077 static ngx_int_t
2669
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3078 ngx_http_upstream_process_cache_control(ngx_http_request_t *r,
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3079 ngx_table_elt_t *h, ngx_uint_t offset)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3080 {
2786
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2757
diff changeset
3081 ngx_array_t *pa;
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2757
diff changeset
3082 ngx_table_elt_t **ph;
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2757
diff changeset
3083 ngx_http_upstream_t *u;
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2757
diff changeset
3084
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2757
diff changeset
3085 u = r->upstream;
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2757
diff changeset
3086 pa = &u->headers_in.cache_control;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3087
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3088 if (pa->elts == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3089 if (ngx_array_init(pa, r->pool, 2, sizeof(ngx_table_elt_t *)) != NGX_OK)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3090 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3091 return NGX_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3092 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3093 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3094
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3095 ph = ngx_array_push(pa);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3096 if (ph == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3097 return NGX_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3098 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3099
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3100 *ph = h;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3101
2708
4c658be4ab63 fix building --without-http-cache, introduced in r2664 and later
Igor Sysoev <igor@sysoev.ru>
parents: 2704
diff changeset
3102 #if (NGX_HTTP_CACHE)
4c658be4ab63 fix building --without-http-cache, introduced in r2664 and later
Igor Sysoev <igor@sysoev.ru>
parents: 2704
diff changeset
3103 {
4c658be4ab63 fix building --without-http-cache, introduced in r2664 and later
Igor Sysoev <igor@sysoev.ru>
parents: 2704
diff changeset
3104 u_char *p, *last;
4c658be4ab63 fix building --without-http-cache, introduced in r2664 and later
Igor Sysoev <igor@sysoev.ru>
parents: 2704
diff changeset
3105 ngx_int_t n;
4c658be4ab63 fix building --without-http-cache, introduced in r2664 and later
Igor Sysoev <igor@sysoev.ru>
parents: 2704
diff changeset
3106
2786
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2757
diff changeset
3107 if (u->conf->ignore_headers & NGX_HTTP_UPSTREAM_IGN_CACHE_CONTROL) {
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2757
diff changeset
3108 return NGX_OK;
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2757
diff changeset
3109 }
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2757
diff changeset
3110
2669
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3111 if (r->cache == NULL) {
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3112 return NGX_OK;
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3113 }
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3114
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3115 if (r->cache->valid_sec != 0) {
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3116 return NGX_OK;
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3117 }
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3118
3517
a4ee4a075ac5 do not cache response if it has "no-store" or "private"
Igor Sysoev <igor@sysoev.ru>
parents: 3516
diff changeset
3119 p = h->value.data;
a4ee4a075ac5 do not cache response if it has "no-store" or "private"
Igor Sysoev <igor@sysoev.ru>
parents: 3516
diff changeset
3120 last = p + h->value.len;
a4ee4a075ac5 do not cache response if it has "no-store" or "private"
Igor Sysoev <igor@sysoev.ru>
parents: 3516
diff changeset
3121
a4ee4a075ac5 do not cache response if it has "no-store" or "private"
Igor Sysoev <igor@sysoev.ru>
parents: 3516
diff changeset
3122 if (ngx_strlcasestrn(p, last, (u_char *) "no-cache", 8 - 1) != NULL
a4ee4a075ac5 do not cache response if it has "no-store" or "private"
Igor Sysoev <igor@sysoev.ru>
parents: 3516
diff changeset
3123 || ngx_strlcasestrn(p, last, (u_char *) "no-store", 8 - 1) != NULL
a4ee4a075ac5 do not cache response if it has "no-store" or "private"
Igor Sysoev <igor@sysoev.ru>
parents: 3516
diff changeset
3124 || ngx_strlcasestrn(p, last, (u_char *) "private", 7 - 1) != NULL)
2669
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3125 {
2786
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2757
diff changeset
3126 u->cacheable = 0;
2669
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3127 return NGX_OK;
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3128 }
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3129
3517
a4ee4a075ac5 do not cache response if it has "no-store" or "private"
Igor Sysoev <igor@sysoev.ru>
parents: 3516
diff changeset
3130 p = ngx_strlcasestrn(p, last, (u_char *) "max-age=", 8 - 1);
2669
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3131
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3132 if (p == NULL) {
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3133 return NGX_OK;
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3134 }
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3135
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3136 n = 0;
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3137
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3138 for (p += 8; p < last; p++) {
3198
48bfb7dc981b test comma separator in "Cache-Control"
Igor Sysoev <igor@sysoev.ru>
parents: 3195
diff changeset
3139 if (*p == ',' || *p == ';' || *p == ' ') {
2669
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3140 break;
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3141 }
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3142
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3143 if (*p >= '0' && *p <= '9') {
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3144 n = n * 10 + *p - '0';
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3145 continue;
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3146 }
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3147
2786
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2757
diff changeset
3148 u->cacheable = 0;
2669
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3149 return NGX_OK;
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3150 }
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3151
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3152 if (n == 0) {
2786
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2757
diff changeset
3153 u->cacheable = 0;
2669
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3154 return NGX_OK;
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3155 }
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3156
5e4d8bd4486c support Cache-Control no-cache and max-age in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2667
diff changeset
3157 r->cache->valid_sec = ngx_time() + n;
2708
4c658be4ab63 fix building --without-http-cache, introduced in r2664 and later
Igor Sysoev <igor@sysoev.ru>
parents: 2704
diff changeset
3158 }
4c658be4ab63 fix building --without-http-cache, introduced in r2664 and later
Igor Sysoev <igor@sysoev.ru>
parents: 2704
diff changeset
3159 #endif
4c658be4ab63 fix building --without-http-cache, introduced in r2664 and later
Igor Sysoev <igor@sysoev.ru>
parents: 2704
diff changeset
3160
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3161 return NGX_OK;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3162 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3163
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3164
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3165 static ngx_int_t
2666
81556a9b6488 support Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2665
diff changeset
3166 ngx_http_upstream_process_expires(ngx_http_request_t *r, ngx_table_elt_t *h,
81556a9b6488 support Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2665
diff changeset
3167 ngx_uint_t offset)
81556a9b6488 support Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2665
diff changeset
3168 {
2786
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2757
diff changeset
3169 ngx_http_upstream_t *u;
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2757
diff changeset
3170
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2757
diff changeset
3171 u = r->upstream;
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2757
diff changeset
3172 u->headers_in.expires = h;
2708
4c658be4ab63 fix building --without-http-cache, introduced in r2664 and later
Igor Sysoev <igor@sysoev.ru>
parents: 2704
diff changeset
3173
4c658be4ab63 fix building --without-http-cache, introduced in r2664 and later
Igor Sysoev <igor@sysoev.ru>
parents: 2704
diff changeset
3174 #if (NGX_HTTP_CACHE)
4c658be4ab63 fix building --without-http-cache, introduced in r2664 and later
Igor Sysoev <igor@sysoev.ru>
parents: 2704
diff changeset
3175 {
2666
81556a9b6488 support Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2665
diff changeset
3176 time_t expires;
81556a9b6488 support Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2665
diff changeset
3177
2786
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2757
diff changeset
3178 if (u->conf->ignore_headers & NGX_HTTP_UPSTREAM_IGN_EXPIRES) {
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2757
diff changeset
3179 return NGX_OK;
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2757
diff changeset
3180 }
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2757
diff changeset
3181
2666
81556a9b6488 support Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2665
diff changeset
3182 if (r->cache == NULL) {
81556a9b6488 support Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2665
diff changeset
3183 return NGX_OK;
81556a9b6488 support Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2665
diff changeset
3184 }
81556a9b6488 support Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2665
diff changeset
3185
81556a9b6488 support Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2665
diff changeset
3186 if (r->cache->valid_sec != 0) {
81556a9b6488 support Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2665
diff changeset
3187 return NGX_OK;
81556a9b6488 support Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2665
diff changeset
3188 }
81556a9b6488 support Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2665
diff changeset
3189
81556a9b6488 support Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2665
diff changeset
3190 expires = ngx_http_parse_time(h->value.data, h->value.len);
81556a9b6488 support Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2665
diff changeset
3191
81556a9b6488 support Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2665
diff changeset
3192 if (expires == NGX_ERROR || expires < ngx_time()) {
2786
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2757
diff changeset
3193 u->cacheable = 0;
2666
81556a9b6488 support Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2665
diff changeset
3194 return NGX_OK;
81556a9b6488 support Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2665
diff changeset
3195 }
81556a9b6488 support Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2665
diff changeset
3196
81556a9b6488 support Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2665
diff changeset
3197 r->cache->valid_sec = expires;
2708
4c658be4ab63 fix building --without-http-cache, introduced in r2664 and later
Igor Sysoev <igor@sysoev.ru>
parents: 2704
diff changeset
3198 }
4c658be4ab63 fix building --without-http-cache, introduced in r2664 and later
Igor Sysoev <igor@sysoev.ru>
parents: 2704
diff changeset
3199 #endif
2666
81556a9b6488 support Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2665
diff changeset
3200
81556a9b6488 support Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2665
diff changeset
3201 return NGX_OK;
81556a9b6488 support Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2665
diff changeset
3202 }
81556a9b6488 support Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2665
diff changeset
3203
81556a9b6488 support Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2665
diff changeset
3204
81556a9b6488 support Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2665
diff changeset
3205 static ngx_int_t
2663
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
3206 ngx_http_upstream_process_accel_expires(ngx_http_request_t *r,
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
3207 ngx_table_elt_t *h, ngx_uint_t offset)
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
3208 {
2786
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2757
diff changeset
3209 ngx_http_upstream_t *u;
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2757
diff changeset
3210
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2757
diff changeset
3211 u = r->upstream;
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2757
diff changeset
3212 u->headers_in.x_accel_expires = h;
2708
4c658be4ab63 fix building --without-http-cache, introduced in r2664 and later
Igor Sysoev <igor@sysoev.ru>
parents: 2704
diff changeset
3213
4c658be4ab63 fix building --without-http-cache, introduced in r2664 and later
Igor Sysoev <igor@sysoev.ru>
parents: 2704
diff changeset
3214 #if (NGX_HTTP_CACHE)
4c658be4ab63 fix building --without-http-cache, introduced in r2664 and later
Igor Sysoev <igor@sysoev.ru>
parents: 2704
diff changeset
3215 {
2663
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
3216 u_char *p;
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
3217 size_t len;
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
3218 ngx_int_t n;
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
3219
2786
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2757
diff changeset
3220 if (u->conf->ignore_headers & NGX_HTTP_UPSTREAM_IGN_XA_EXPIRES) {
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2757
diff changeset
3221 return NGX_OK;
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2757
diff changeset
3222 }
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2757
diff changeset
3223
2663
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
3224 if (r->cache == NULL) {
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
3225 return NGX_OK;
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
3226 }
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
3227
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
3228 len = h->value.len;
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
3229 p = h->value.data;
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
3230
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
3231 if (p[0] != '@') {
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
3232 n = ngx_atoi(p, len);
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
3233
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
3234 switch (n) {
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
3235 case 0:
2786
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2757
diff changeset
3236 u->cacheable = 0;
2663
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
3237 case NGX_ERROR:
2667
c1ac00c2bc75 update r2664
Igor Sysoev <igor@sysoev.ru>
parents: 2666
diff changeset
3238 return NGX_OK;
2663
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
3239
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
3240 default:
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
3241 r->cache->valid_sec = ngx_time() + n;
2667
c1ac00c2bc75 update r2664
Igor Sysoev <igor@sysoev.ru>
parents: 2666
diff changeset
3242 return NGX_OK;
2663
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
3243 }
2667
c1ac00c2bc75 update r2664
Igor Sysoev <igor@sysoev.ru>
parents: 2666
diff changeset
3244 }
c1ac00c2bc75 update r2664
Igor Sysoev <igor@sysoev.ru>
parents: 2666
diff changeset
3245
c1ac00c2bc75 update r2664
Igor Sysoev <igor@sysoev.ru>
parents: 2666
diff changeset
3246 p++;
c1ac00c2bc75 update r2664
Igor Sysoev <igor@sysoev.ru>
parents: 2666
diff changeset
3247 len--;
c1ac00c2bc75 update r2664
Igor Sysoev <igor@sysoev.ru>
parents: 2666
diff changeset
3248
c1ac00c2bc75 update r2664
Igor Sysoev <igor@sysoev.ru>
parents: 2666
diff changeset
3249 n = ngx_atoi(p, len);
c1ac00c2bc75 update r2664
Igor Sysoev <igor@sysoev.ru>
parents: 2666
diff changeset
3250
c1ac00c2bc75 update r2664
Igor Sysoev <igor@sysoev.ru>
parents: 2666
diff changeset
3251 if (n != NGX_ERROR) {
c1ac00c2bc75 update r2664
Igor Sysoev <igor@sysoev.ru>
parents: 2666
diff changeset
3252 r->cache->valid_sec = n;
2663
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
3253 }
2708
4c658be4ab63 fix building --without-http-cache, introduced in r2664 and later
Igor Sysoev <igor@sysoev.ru>
parents: 2704
diff changeset
3254 }
4c658be4ab63 fix building --without-http-cache, introduced in r2664 and later
Igor Sysoev <igor@sysoev.ru>
parents: 2704
diff changeset
3255 #endif
2663
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
3256
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
3257 return NGX_OK;
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
3258 }
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
3259
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
3260
09725d69cb25 support X-Accel-Expires in cache
Igor Sysoev <igor@sysoev.ru>
parents: 2662
diff changeset
3261 static ngx_int_t
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
3262 ngx_http_upstream_process_limit_rate(ngx_http_request_t *r, ngx_table_elt_t *h,
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
3263 ngx_uint_t offset)
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3264 {
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
3265 ngx_int_t n;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
3266
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
3267 r->upstream->headers_in.x_accel_limit_rate = h;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
3268
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
3269 n = ngx_atoi(h->value.data, h->value.len);
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
3270
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
3271 if (n != NGX_ERROR) {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
3272 r->limit_rate = (size_t) n;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
3273 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
3274
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
3275 return NGX_OK;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
3276 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
3277
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
3278
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
3279 static ngx_int_t
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
3280 ngx_http_upstream_process_buffering(ngx_http_request_t *r, ngx_table_elt_t *h,
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
3281 ngx_uint_t offset)
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
3282 {
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
3283 u_char c0, c1, c2;
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
3284
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
3285 if (r->upstream->conf->change_buffering) {
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
3286
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
3287 if (h->value.len == 2) {
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
3288 c0 = ngx_tolower(h->value.data[0]);
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
3289 c1 = ngx_tolower(h->value.data[1]);
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
3290
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
3291 if (c0 == 'n' && c1 == 'o') {
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
3292 r->upstream->buffering = 0;
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
3293 }
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
3294
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
3295 } else if (h->value.len == 3) {
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
3296 c0 = ngx_tolower(h->value.data[0]);
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
3297 c1 = ngx_tolower(h->value.data[1]);
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
3298 c2 = ngx_tolower(h->value.data[2]);
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
3299
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
3300 if (c0 == 'y' && c1 == 'e' && c2 == 's') {
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
3301 r->upstream->buffering = 1;
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
3302 }
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
3303 }
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
3304 }
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
3305
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
3306 return NGX_OK;
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
3307 }
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
3308
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
3309
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
3310 static ngx_int_t
657
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
3311 ngx_http_upstream_process_charset(ngx_http_request_t *r, ngx_table_elt_t *h,
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
3312 ngx_uint_t offset)
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
3313 {
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
3314 r->headers_out.override_charset = &h->value;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
3315
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
3316 return NGX_OK;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
3317 }
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
3318
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
3319
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
3320 static ngx_int_t
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3321 ngx_http_upstream_copy_header_line(ngx_http_request_t *r, ngx_table_elt_t *h,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3322 ngx_uint_t offset)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3323 {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3324 ngx_table_elt_t *ho, **ph;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3325
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3326 ho = ngx_list_push(&r->headers_out.headers);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3327 if (ho == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3328 return NGX_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3329 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3330
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3331 *ho = *h;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3332
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3333 if (offset) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3334 ph = (ngx_table_elt_t **) ((char *) &r->headers_out + offset);
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3335 *ph = ho;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3336 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3337
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3338 return NGX_OK;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3339 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3340
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3341
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3342 static ngx_int_t
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3343 ngx_http_upstream_copy_multi_header_lines(ngx_http_request_t *r,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3344 ngx_table_elt_t *h, ngx_uint_t offset)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3345 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3346 ngx_array_t *pa;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3347 ngx_table_elt_t *ho, **ph;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3348
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3349 pa = (ngx_array_t *) ((char *) &r->headers_out + offset);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3350
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3351 if (pa->elts == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3352 if (ngx_array_init(pa, r->pool, 2, sizeof(ngx_table_elt_t *)) != NGX_OK)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3353 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3354 return NGX_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3355 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3356 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3357
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3358 ph = ngx_array_push(pa);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3359 if (ph == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3360 return NGX_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3361 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3362
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3363 ho = ngx_list_push(&r->headers_out.headers);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3364 if (ho == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3365 return NGX_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3366 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3367
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3368 *ho = *h;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3369 *ph = ho;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3370
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3371 return NGX_OK;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3372 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3373
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3374
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3375 static ngx_int_t
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3376 ngx_http_upstream_copy_content_type(ngx_http_request_t *r, ngx_table_elt_t *h,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3377 ngx_uint_t offset)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3378 {
657
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
3379 u_char *p, *last;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
3380
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
3381 r->headers_out.content_type_len = h->value.len;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3382 r->headers_out.content_type = h->value;
2882
896db5a09bd2 reset content_type hash value, this fixes a bug when XSLT responses
Igor Sysoev <igor@sysoev.ru>
parents: 2875
diff changeset
3383 r->headers_out.content_type_lowcase = NULL;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3384
657
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
3385 for (p = h->value.data; *p; p++) {
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
3386
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
3387 if (*p != ';') {
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
3388 continue;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
3389 }
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
3390
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
3391 last = p;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
3392
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
3393 while (*++p == ' ') { /* void */ }
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
3394
1968
3c540ad3021f fix segfault
Igor Sysoev <igor@sysoev.ru>
parents: 1959
diff changeset
3395 if (*p == '\0') {
3c540ad3021f fix segfault
Igor Sysoev <igor@sysoev.ru>
parents: 1959
diff changeset
3396 return NGX_OK;
3c540ad3021f fix segfault
Igor Sysoev <igor@sysoev.ru>
parents: 1959
diff changeset
3397 }
3c540ad3021f fix segfault
Igor Sysoev <igor@sysoev.ru>
parents: 1959
diff changeset
3398
1107
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1098
diff changeset
3399 if (ngx_strncasecmp(p, (u_char *) "charset=", 8) != 0) {
657
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
3400 continue;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
3401 }
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
3402
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
3403 p += 8;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
3404
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
3405 r->headers_out.content_type_len = last - h->value.data;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
3406
2244
f5a9f35e8344 strip charset name quotes
Igor Sysoev <igor@sysoev.ru>
parents: 2184
diff changeset
3407 if (*p == '"') {
f5a9f35e8344 strip charset name quotes
Igor Sysoev <igor@sysoev.ru>
parents: 2184
diff changeset
3408 p++;
f5a9f35e8344 strip charset name quotes
Igor Sysoev <igor@sysoev.ru>
parents: 2184
diff changeset
3409 }
f5a9f35e8344 strip charset name quotes
Igor Sysoev <igor@sysoev.ru>
parents: 2184
diff changeset
3410
f5a9f35e8344 strip charset name quotes
Igor Sysoev <igor@sysoev.ru>
parents: 2184
diff changeset
3411 last = h->value.data + h->value.len;
f5a9f35e8344 strip charset name quotes
Igor Sysoev <igor@sysoev.ru>
parents: 2184
diff changeset
3412
f5a9f35e8344 strip charset name quotes
Igor Sysoev <igor@sysoev.ru>
parents: 2184
diff changeset
3413 if (*(last - 1) == '"') {
f5a9f35e8344 strip charset name quotes
Igor Sysoev <igor@sysoev.ru>
parents: 2184
diff changeset
3414 last--;
f5a9f35e8344 strip charset name quotes
Igor Sysoev <igor@sysoev.ru>
parents: 2184
diff changeset
3415 }
f5a9f35e8344 strip charset name quotes
Igor Sysoev <igor@sysoev.ru>
parents: 2184
diff changeset
3416
f5a9f35e8344 strip charset name quotes
Igor Sysoev <igor@sysoev.ru>
parents: 2184
diff changeset
3417 r->headers_out.charset.len = last - p;
657
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
3418 r->headers_out.charset.data = p;
1143
c6c42497106c fix segfault if upstream sends trailing ";" in "charset="
Igor Sysoev <igor@sysoev.ru>
parents: 1109
diff changeset
3419
c6c42497106c fix segfault if upstream sends trailing ";" in "charset="
Igor Sysoev <igor@sysoev.ru>
parents: 1109
diff changeset
3420 return NGX_OK;
657
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
3421 }
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
3422
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3423 return NGX_OK;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3424 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3425
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3426
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3427 static ngx_int_t
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3428 ngx_http_upstream_copy_content_length(ngx_http_request_t *r, ngx_table_elt_t *h,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3429 ngx_uint_t offset)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3430 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3431 ngx_table_elt_t *ho;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3432
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3433 ho = ngx_list_push(&r->headers_out.headers);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3434 if (ho == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3435 return NGX_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3436 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3437
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3438 *ho = *h;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3439
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3440 r->headers_out.content_length = ho;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3441 r->headers_out.content_length_n = ngx_atoof(h->value.data, h->value.len);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3442
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3443 return NGX_OK;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3444 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3445
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3446
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3447 static ngx_int_t
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3448 ngx_http_upstream_copy_last_modified(ngx_http_request_t *r, ngx_table_elt_t *h,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3449 ngx_uint_t offset)
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3450 {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3451 ngx_table_elt_t *ho;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3452
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3453 ho = ngx_list_push(&r->headers_out.headers);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3454 if (ho == NULL) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3455 return NGX_ERROR;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3456 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3457
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3458 *ho = *h;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3459
3004
4121acaf7a04 fix handling "Last-Modified" and "Accept-Ranges" for upstream responses
Igor Sysoev <igor@sysoev.ru>
parents: 3003
diff changeset
3460 r->headers_out.last_modified = ho;
4121acaf7a04 fix handling "Last-Modified" and "Accept-Ranges" for upstream responses
Igor Sysoev <igor@sysoev.ru>
parents: 3003
diff changeset
3461
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3462 #if (NGX_HTTP_CACHE)
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3463
2952
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
3464 if (r->upstream->cacheable) {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3465 r->headers_out.last_modified_time = ngx_http_parse_time(h->value.data,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3466 h->value.len);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3467 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3468
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3469 #endif
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3470
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3471 return NGX_OK;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3472 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3473
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3474
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3475 static ngx_int_t
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3476 ngx_http_upstream_rewrite_location(ngx_http_request_t *r, ngx_table_elt_t *h,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3477 ngx_uint_t offset)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3478 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3479 ngx_int_t rc;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3480 ngx_table_elt_t *ho;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3481
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3482 ho = ngx_list_push(&r->headers_out.headers);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3483 if (ho == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3484 return NGX_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3485 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3486
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3487 *ho = *h;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3488
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3489 if (r->upstream->rewrite_redirect) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3490 rc = r->upstream->rewrite_redirect(r, ho, 0);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3491
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3492 if (rc == NGX_DECLINED) {
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3493 return NGX_OK;
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3494 }
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3495
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3496 if (rc == NGX_OK) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3497 r->headers_out.location = ho;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3498
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3499 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3500 "rewritten location: \"%V\"", &ho->value);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3501 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3502
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3503 return rc;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3504 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3505
1653
ea681a6a0c61 set r->headers_out.location for non-local redirects
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
3506 if (ho->value.data[0] != '/') {
ea681a6a0c61 set r->headers_out.location for non-local redirects
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
3507 r->headers_out.location = ho;
ea681a6a0c61 set r->headers_out.location for non-local redirects
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
3508 }
ea681a6a0c61 set r->headers_out.location for non-local redirects
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
3509
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3510 /*
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3511 * we do not set r->headers_out.location here to avoid the handling
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3512 * the local redirects without a host name by ngx_http_header_filter()
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3513 */
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3514
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3515 return NGX_OK;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3516 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3517
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3518
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3519 static ngx_int_t
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3520 ngx_http_upstream_rewrite_refresh(ngx_http_request_t *r, ngx_table_elt_t *h,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3521 ngx_uint_t offset)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3522 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3523 u_char *p;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3524 ngx_int_t rc;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3525 ngx_table_elt_t *ho;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3526
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3527 ho = ngx_list_push(&r->headers_out.headers);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3528 if (ho == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3529 return NGX_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3530 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3531
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3532 *ho = *h;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3533
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3534 if (r->upstream->rewrite_redirect) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3535
1549
099d8470e6c3 pass length clearly
Igor Sysoev <igor@sysoev.ru>
parents: 1543
diff changeset
3536 p = ngx_strcasestrn(ho->value.data, "url=", 4 - 1);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3537
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3538 if (p) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3539 rc = r->upstream->rewrite_redirect(r, ho, p + 4 - ho->value.data);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3540
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3541 } else {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3542 return NGX_OK;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3543 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3544
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3545 if (rc == NGX_DECLINED) {
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3546 return NGX_OK;
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3547 }
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3548
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3549 if (rc == NGX_OK) {
1654
e5c547a225bd r->headers_out.refresh
Igor Sysoev <igor@sysoev.ru>
parents: 1653
diff changeset
3550 r->headers_out.refresh = ho;
e5c547a225bd r->headers_out.refresh
Igor Sysoev <igor@sysoev.ru>
parents: 1653
diff changeset
3551
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3552 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3553 "rewritten refresh: \"%V\"", &ho->value);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3554 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3555
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3556 return rc;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3557 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3558
1654
e5c547a225bd r->headers_out.refresh
Igor Sysoev <igor@sysoev.ru>
parents: 1653
diff changeset
3559 r->headers_out.refresh = ho;
e5c547a225bd r->headers_out.refresh
Igor Sysoev <igor@sysoev.ru>
parents: 1653
diff changeset
3560
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3561 return NGX_OK;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3562 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3563
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3564
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3565 static ngx_int_t
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3566 ngx_http_upstream_copy_allow_ranges(ngx_http_request_t *r,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3567 ngx_table_elt_t *h, ngx_uint_t offset)
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3568 {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3569 ngx_table_elt_t *ho;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3570
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3571 #if (NGX_HTTP_CACHE)
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3572
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3573 if (r->cached) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3574 r->allow_ranges = 1;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3575 return NGX_OK;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3576
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3577 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3578
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3579 #endif
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3580
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3581 ho = ngx_list_push(&r->headers_out.headers);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3582 if (ho == NULL) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3583 return NGX_ERROR;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3584 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3585
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3586 *ho = *h;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3587
3004
4121acaf7a04 fix handling "Last-Modified" and "Accept-Ranges" for upstream responses
Igor Sysoev <igor@sysoev.ru>
parents: 3003
diff changeset
3588 r->headers_out.accept_ranges = ho;
4121acaf7a04 fix handling "Last-Modified" and "Accept-Ranges" for upstream responses
Igor Sysoev <igor@sysoev.ru>
parents: 3003
diff changeset
3589
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3590 return NGX_OK;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3591 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
3593
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3594 #if (NGX_HTTP_GZIP)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3595
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3596 static ngx_int_t
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3597 ngx_http_upstream_copy_content_encoding(ngx_http_request_t *r,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3598 ngx_table_elt_t *h, ngx_uint_t offset)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3599 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3600 ngx_table_elt_t *ho;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3601
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3602 ho = ngx_list_push(&r->headers_out.headers);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3603 if (ho == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3604 return NGX_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3605 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3606
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3607 *ho = *h;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3608
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3609 r->headers_out.content_encoding = ho;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3610
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3611 return NGX_OK;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3612 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3613
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3614 #endif
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3615
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3616
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
3617 static ngx_int_t
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3618 ngx_http_upstream_add_variables(ngx_conf_t *cf)
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3619 {
880
3b763d36e055 axe old % log format
Igor Sysoev <igor@sysoev.ru>
parents: 850
diff changeset
3620 ngx_http_variable_t *var, *v;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3621
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3622 for (v = ngx_http_upstream_vars; v->name.len; v++) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3623 var = ngx_http_add_variable(cf, &v->name, v->flags);
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3624 if (var == NULL) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3625 return NGX_ERROR;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3626 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3627
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 629
diff changeset
3628 var->get_handler = v->get_handler;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3629 var->data = v->data;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3630 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3631
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3632 return NGX_OK;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3633 }
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3634
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3635
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3636 static ngx_int_t
1181
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3637 ngx_http_upstream_addr_variable(ngx_http_request_t *r,
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3638 ngx_http_variable_value_t *v, uintptr_t data)
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3639 {
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3640 u_char *p;
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3641 size_t len;
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3642 ngx_uint_t i;
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3643 ngx_http_upstream_state_t *state;
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3644
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3645 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
3646 v->no_cacheable = 0;
1181
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3647 v->not_found = 0;
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3648
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3649 if (r->upstream_states == NULL || r->upstream_states->nelts == 0) {
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3650 v->not_found = 1;
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3651 return NGX_OK;
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3652 }
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3653
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3654 len = 0;
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3655 state = r->upstream_states->elts;
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3656
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3657 for (i = 0; i < r->upstream_states->nelts; i++) {
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3658 if (state[i].peer) {
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3659 len += state[i].peer->len + 2;
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3660
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3661 } else {
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3662 len += 3;
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3663 }
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3664 }
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3665
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 1973
diff changeset
3666 p = ngx_pnalloc(r->pool, len);
1181
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3667 if (p == NULL) {
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3668 return NGX_ERROR;
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3669 }
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3670
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3671 v->data = p;
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3672
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3673 i = 0;
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3674
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3675 for ( ;; ) {
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3676 if (state[i].peer) {
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3677 p = ngx_cpymem(p, state[i].peer->data, state[i].peer->len);
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3678 }
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3679
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3680 if (++i == r->upstream_states->nelts) {
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3681 break;
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3682 }
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3683
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3684 if (state[i].peer) {
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3685 *p++ = ',';
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3686 *p++ = ' ';
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3687
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3688 } else {
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3689 *p++ = ' ';
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3690 *p++ = ':';
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3691 *p++ = ' ';
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3692
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3693 if (++i == r->upstream_states->nelts) {
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3694 break;
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3695 }
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3696
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3697 continue;
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3698 }
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3699 }
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3700
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3701 v->len = p - v->data;
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3702
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3703 return NGX_OK;
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3704 }
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3705
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3706
ea5ecb1aae88 $upstream_addr
Igor Sysoev <igor@sysoev.ru>
parents: 1168
diff changeset
3707 static ngx_int_t
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3708 ngx_http_upstream_status_variable(ngx_http_request_t *r,
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3709 ngx_http_variable_value_t *v, uintptr_t data)
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3710 {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3711 u_char *p;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3712 size_t len;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3713 ngx_uint_t i;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3714 ngx_http_upstream_state_t *state;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3715
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3716 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
3717 v->no_cacheable = 0;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3718 v->not_found = 0;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3719
1168
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3720 if (r->upstream_states == NULL || r->upstream_states->nelts == 0) {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3721 v->not_found = 1;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3722 return NGX_OK;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3723 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3724
1168
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3725 len = r->upstream_states->nelts * (3 + 2);
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3726
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 1973
diff changeset
3727 p = ngx_pnalloc(r->pool, len);
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3728 if (p == NULL) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3729 return NGX_ERROR;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3730 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3731
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3732 v->data = p;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3733
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3734 i = 0;
1168
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3735 state = r->upstream_states->elts;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3736
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3737 for ( ;; ) {
1168
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3738 if (state[i].status) {
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3739 p = ngx_sprintf(p, "%ui", state[i].status);
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3740
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3741 } else {
1168
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3742 *p++ = '-';
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3743 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3744
1168
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3745 if (++i == r->upstream_states->nelts) {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3746 break;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3747 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3748
1168
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3749 if (state[i].peer) {
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3750 *p++ = ',';
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3751 *p++ = ' ';
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3752
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3753 } else {
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3754 *p++ = ' ';
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3755 *p++ = ':';
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3756 *p++ = ' ';
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3757
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3758 if (++i == r->upstream_states->nelts) {
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3759 break;
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3760 }
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3761
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3762 continue;
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3763 }
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3764 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3765
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3766 v->len = p - v->data;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3767
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3768 return NGX_OK;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3769 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3770
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3771
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3772 static ngx_int_t
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3773 ngx_http_upstream_response_time_variable(ngx_http_request_t *r,
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3774 ngx_http_variable_value_t *v, uintptr_t data)
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3775 {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3776 u_char *p;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3777 size_t len;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3778 ngx_uint_t i;
889
a9a7e4b1a72b the previous fix does not actually fix overflow
Igor Sysoev <igor@sysoev.ru>
parents: 888
diff changeset
3779 ngx_msec_int_t ms;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3780 ngx_http_upstream_state_t *state;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3781
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3782 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
3783 v->no_cacheable = 0;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3784 v->not_found = 0;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3785
1168
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3786 if (r->upstream_states == NULL || r->upstream_states->nelts == 0) {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3787 v->not_found = 1;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3788 return NGX_OK;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3789 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3790
1168
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3791 len = r->upstream_states->nelts * (NGX_TIME_T_LEN + 4 + 2);
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3792
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 1973
diff changeset
3793 p = ngx_pnalloc(r->pool, len);
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3794 if (p == NULL) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3795 return NGX_ERROR;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3796 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3797
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3798 v->data = p;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3799
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3800 i = 0;
1168
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3801 state = r->upstream_states->elts;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3802
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3803 for ( ;; ) {
1168
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3804 if (state[i].status) {
1640
02a22cd5282a 64-bit time_t compatibility
Igor Sysoev <igor@sysoev.ru>
parents: 1565
diff changeset
3805 ms = (ngx_msec_int_t)
02a22cd5282a 64-bit time_t compatibility
Igor Sysoev <igor@sysoev.ru>
parents: 1565
diff changeset
3806 (state[i].response_sec * 1000 + state[i].response_msec);
3515
76d252724db5 use ngx_min() and ngx_max()
Igor Sysoev <igor@sysoev.ru>
parents: 3514
diff changeset
3807 ms = ngx_max(ms, 0);
889
a9a7e4b1a72b the previous fix does not actually fix overflow
Igor Sysoev <igor@sysoev.ru>
parents: 888
diff changeset
3808 p = ngx_sprintf(p, "%d.%03d", ms / 1000, ms % 1000);
1168
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3809
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3810 } else {
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3811 *p++ = '-';
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3812 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3813
1168
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3814 if (++i == r->upstream_states->nelts) {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3815 break;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3816 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3817
1168
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3818 if (state[i].peer) {
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3819 *p++ = ',';
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3820 *p++ = ' ';
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3821
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3822 } else {
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3823 *p++ = ' ';
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3824 *p++ = ':';
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3825 *p++ = ' ';
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3826
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3827 if (++i == r->upstream_states->nelts) {
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3828 break;
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3829 }
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3830
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3831 continue;
4d0d12446c3b store the upstream states before X-Accel-Redirect to a next upstream
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
3832 }
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3833 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3834
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3835 v->len = p - v->data;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3836
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3837 return NGX_OK;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3838 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3839
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
3840
2402
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3841 static ngx_int_t
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3842 ngx_http_upstream_response_length_variable(ngx_http_request_t *r,
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3843 ngx_http_variable_value_t *v, uintptr_t data)
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3844 {
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3845 u_char *p;
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3846 size_t len;
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3847 ngx_uint_t i;
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3848 ngx_http_upstream_state_t *state;
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3849
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3850 v->valid = 1;
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3851 v->no_cacheable = 0;
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3852 v->not_found = 0;
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3853
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3854 if (r->upstream_states == NULL || r->upstream_states->nelts == 0) {
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3855 v->not_found = 1;
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3856 return NGX_OK;
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3857 }
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3858
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3859 len = r->upstream_states->nelts * (NGX_OFF_T_LEN + 2);
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3860
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3861 p = ngx_pnalloc(r->pool, len);
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3862 if (p == NULL) {
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3863 return NGX_ERROR;
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3864 }
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3865
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3866 v->data = p;
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3867
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3868 i = 0;
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3869 state = r->upstream_states->elts;
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3870
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3871 for ( ;; ) {
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3872 p = ngx_sprintf(p, "%O", state[i].response_length);
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3873
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3874 if (++i == r->upstream_states->nelts) {
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3875 break;
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3876 }
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3877
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3878 if (state[i].peer) {
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3879 *p++ = ',';
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3880 *p++ = ' ';
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3881
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3882 } else {
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3883 *p++ = ' ';
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3884 *p++ = ':';
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3885 *p++ = ' ';
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3886
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3887 if (++i == r->upstream_states->nelts) {
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3888 break;
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3889 }
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3890
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3891 continue;
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3892 }
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3893 }
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3894
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3895 v->len = p - v->data;
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3896
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3897 return NGX_OK;
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3898 }
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3899
cd6a1abe11a7 $upstream_response_length
Igor Sysoev <igor@sysoev.ru>
parents: 2394
diff changeset
3900
1162
f59d15404269 $upstream_http_... variables
Igor Sysoev <igor@sysoev.ru>
parents: 1153
diff changeset
3901 ngx_int_t
f59d15404269 $upstream_http_... variables
Igor Sysoev <igor@sysoev.ru>
parents: 1153
diff changeset
3902 ngx_http_upstream_header_variable(ngx_http_request_t *r,
f59d15404269 $upstream_http_... variables
Igor Sysoev <igor@sysoev.ru>
parents: 1153
diff changeset
3903 ngx_http_variable_value_t *v, uintptr_t data)
f59d15404269 $upstream_http_... variables
Igor Sysoev <igor@sysoev.ru>
parents: 1153
diff changeset
3904 {
f59d15404269 $upstream_http_... variables
Igor Sysoev <igor@sysoev.ru>
parents: 1153
diff changeset
3905 if (r->upstream == NULL) {
f59d15404269 $upstream_http_... variables
Igor Sysoev <igor@sysoev.ru>
parents: 1153
diff changeset
3906 v->not_found = 1;
f59d15404269 $upstream_http_... variables
Igor Sysoev <igor@sysoev.ru>
parents: 1153
diff changeset
3907 return NGX_OK;
f59d15404269 $upstream_http_... variables
Igor Sysoev <igor@sysoev.ru>
parents: 1153
diff changeset
3908 }
f59d15404269 $upstream_http_... variables
Igor Sysoev <igor@sysoev.ru>
parents: 1153
diff changeset
3909
f59d15404269 $upstream_http_... variables
Igor Sysoev <igor@sysoev.ru>
parents: 1153
diff changeset
3910 return ngx_http_variable_unknown_header(v, (ngx_str_t *) data,
f59d15404269 $upstream_http_... variables
Igor Sysoev <igor@sysoev.ru>
parents: 1153
diff changeset
3911 &r->upstream->headers_in.headers.part,
f59d15404269 $upstream_http_... variables
Igor Sysoev <igor@sysoev.ru>
parents: 1153
diff changeset
3912 sizeof("upstream_http_") - 1);
f59d15404269 $upstream_http_... variables
Igor Sysoev <igor@sysoev.ru>
parents: 1153
diff changeset
3913 }
f59d15404269 $upstream_http_... variables
Igor Sysoev <igor@sysoev.ru>
parents: 1153
diff changeset
3914
f59d15404269 $upstream_http_... variables
Igor Sysoev <igor@sysoev.ru>
parents: 1153
diff changeset
3915
2952
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
3916 #if (NGX_HTTP_CACHE)
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
3917
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
3918 ngx_int_t
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
3919 ngx_http_upstream_cache_status(ngx_http_request_t *r,
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
3920 ngx_http_variable_value_t *v, uintptr_t data)
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
3921 {
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
3922 ngx_uint_t n;
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
3923
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
3924 if (r->upstream == NULL || r->upstream->cache_status == 0) {
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
3925 v->not_found = 1;
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
3926 return NGX_OK;
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
3927 }
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
3928
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
3929 n = r->upstream->cache_status - 1;
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
3930
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
3931 v->valid = 1;
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
3932 v->no_cacheable = 0;
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
3933 v->not_found = 0;
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
3934 v->len = ngx_http_cache_status[n].len;
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
3935 v->data = ngx_http_cache_status[n].data;
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
3936
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
3937 return NGX_OK;
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
3938 }
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
3939
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
3940 #endif
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
3941
0998606fbfd4 $upstream_cache_status
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
3942
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
3943 static char *
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
3944 ngx_http_upstream(ngx_conf_t *cf, ngx_command_t *cmd, void *dummy)
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
3945 {
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
3946 char *rv;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
3947 void *mconf;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
3948 ngx_str_t *value;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
3949 ngx_url_t u;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
3950 ngx_uint_t m;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
3951 ngx_conf_t pcf;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
3952 ngx_http_module_t *module;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
3953 ngx_http_conf_ctx_t *ctx, *http_ctx;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
3954 ngx_http_upstream_srv_conf_t *uscf;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
3955
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
3956 ngx_memzero(&u, sizeof(ngx_url_t));
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
3957
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
3958 value = cf->args->elts;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
3959 u.host = value[1];
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
3960 u.no_resolve = 1;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
3961
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
3962 uscf = ngx_http_upstream_add(cf, &u, NGX_HTTP_UPSTREAM_CREATE
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
3963 |NGX_HTTP_UPSTREAM_WEIGHT
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
3964 |NGX_HTTP_UPSTREAM_MAX_FAILS
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
3965 |NGX_HTTP_UPSTREAM_FAIL_TIMEOUT
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
3966 |NGX_HTTP_UPSTREAM_DOWN
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
3967 |NGX_HTTP_UPSTREAM_BACKUP);
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
3968 if (uscf == NULL) {
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
3969 return NGX_CONF_ERROR;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
3970 }
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
3971
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
3972
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
3973 ctx = ngx_pcalloc(cf->pool, sizeof(ngx_http_conf_ctx_t));
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
3974 if (ctx == NULL) {
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
3975 return NGX_CONF_ERROR;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
3976 }
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
3977
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
3978 http_ctx = cf->ctx;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
3979 ctx->main_conf = http_ctx->main_conf;
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
3980
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
3981 /* the upstream{}'s srv_conf */
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
3982
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
3983 ctx->srv_conf = ngx_pcalloc(cf->pool, sizeof(void *) * ngx_http_max_module);
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
3984 if (ctx->srv_conf == NULL) {
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
3985 return NGX_CONF_ERROR;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
3986 }
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
3987
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
3988 ctx->srv_conf[ngx_http_upstream_module.ctx_index] = uscf;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
3989
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
3990 uscf->srv_conf = ctx->srv_conf;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
3991
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
3992
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
3993 /* the upstream{}'s loc_conf */
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
3994
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
3995 ctx->loc_conf = ngx_pcalloc(cf->pool, sizeof(void *) * ngx_http_max_module);
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
3996 if (ctx->loc_conf == NULL) {
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
3997 return NGX_CONF_ERROR;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
3998 }
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
3999
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4000 for (m = 0; ngx_modules[m]; m++) {
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4001 if (ngx_modules[m]->type != NGX_HTTP_MODULE) {
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4002 continue;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4003 }
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4004
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4005 module = ngx_modules[m]->ctx;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4006
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4007 if (module->create_srv_conf) {
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4008 mconf = module->create_srv_conf(cf);
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4009 if (mconf == NULL) {
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4010 return NGX_CONF_ERROR;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4011 }
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4012
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4013 ctx->srv_conf[ngx_modules[m]->ctx_index] = mconf;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4014 }
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4015
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4016 if (module->create_loc_conf) {
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4017 mconf = module->create_loc_conf(cf);
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4018 if (mconf == NULL) {
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4019 return NGX_CONF_ERROR;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4020 }
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4021
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4022 ctx->loc_conf[ngx_modules[m]->ctx_index] = mconf;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4023 }
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4024 }
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4025
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4026
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4027 /* parse inside upstream{} */
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4028
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4029 pcf = *cf;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4030 cf->ctx = ctx;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4031 cf->cmd_type = NGX_HTTP_UPS_CONF;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4032
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4033 rv = ngx_conf_parse(cf, NULL);
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4034
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4035 *cf = pcf;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4036
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4037 if (rv != NGX_CONF_OK) {
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4038 return rv;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4039 }
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4040
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4041 if (uscf->servers == NULL) {
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4042 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4043 "no servers are inside upstream");
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4044 return NGX_CONF_ERROR;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4045 }
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4046
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4047 return rv;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4048 }
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4049
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4050
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4051 static char *
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4052 ngx_http_upstream_server(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4053 {
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4054 ngx_http_upstream_srv_conf_t *uscf = conf;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4055
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4056 time_t fail_timeout;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4057 ngx_str_t *value, s;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4058 ngx_url_t u;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4059 ngx_int_t weight, max_fails;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4060 ngx_uint_t i;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4061 ngx_http_upstream_server_t *us;
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4062
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4063 if (uscf->servers == NULL) {
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4064 uscf->servers = ngx_array_create(cf->pool, 4,
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4065 sizeof(ngx_http_upstream_server_t));
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4066 if (uscf->servers == NULL) {
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4067 return NGX_CONF_ERROR;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4068 }
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4069 }
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4070
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4071 us = ngx_array_push(uscf->servers);
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4072 if (us == NULL) {
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4073 return NGX_CONF_ERROR;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4074 }
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4075
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4076 ngx_memzero(us, sizeof(ngx_http_upstream_server_t));
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4077
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4078 value = cf->args->elts;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4079
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4080 ngx_memzero(&u, sizeof(ngx_url_t));
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4081
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4082 u.url = value[1];
906
a0310ac2814f rewritten upstream
Igor Sysoev <igor@sysoev.ru>
parents: 901
diff changeset
4083 u.default_port = 80;
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4084
1559
fe11e2a3946d use pool instead of ngx_conf_t
Igor Sysoev <igor@sysoev.ru>
parents: 1558
diff changeset
4085 if (ngx_parse_url(cf->pool, &u) != NGX_OK) {
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4086 if (u.err) {
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4087 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4088 "%s in upstream \"%V\"", u.err, &u.url);
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4089 }
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4090
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4091 return NGX_CONF_ERROR;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4092 }
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4093
663
6d5c1535bb9d nginx-0.3.53-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
4094 weight = 1;
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4095 max_fails = 1;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4096 fail_timeout = 10;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4097
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4098 for (i = 2; i < cf->args->nelts; i++) {
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4099
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4100 if (ngx_strncmp(value[i].data, "weight=", 7) == 0) {
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4101
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4102 if (!(uscf->flags & NGX_HTTP_UPSTREAM_WEIGHT)) {
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4103 goto invalid;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4104 }
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4105
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4106 weight = ngx_atoi(&value[i].data[7], value[i].len - 7);
663
6d5c1535bb9d nginx-0.3.53-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
4107
6d5c1535bb9d nginx-0.3.53-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
4108 if (weight == NGX_ERROR || weight == 0) {
6d5c1535bb9d nginx-0.3.53-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
4109 goto invalid;
6d5c1535bb9d nginx-0.3.53-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
4110 }
6d5c1535bb9d nginx-0.3.53-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
4111
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4112 continue;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4113 }
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4114
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4115 if (ngx_strncmp(value[i].data, "max_fails=", 10) == 0) {
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4116
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4117 if (!(uscf->flags & NGX_HTTP_UPSTREAM_MAX_FAILS)) {
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4118 goto invalid;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4119 }
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4120
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4121 max_fails = ngx_atoi(&value[i].data[10], value[i].len - 10);
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4122
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4123 if (max_fails == NGX_ERROR) {
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4124 goto invalid;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4125 }
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4126
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4127 continue;
663
6d5c1535bb9d nginx-0.3.53-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
4128 }
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4129
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4130 if (ngx_strncmp(value[i].data, "fail_timeout=", 13) == 0) {
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4131
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4132 if (!(uscf->flags & NGX_HTTP_UPSTREAM_FAIL_TIMEOUT)) {
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4133 goto invalid;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4134 }
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4135
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4136 s.len = value[i].len - 13;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4137 s.data = &value[i].data[13];
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4138
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4139 fail_timeout = ngx_parse_time(&s, 1);
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4140
1973
54e4d1b6c183 small fix
Igor Sysoev <igor@sysoev.ru>
parents: 1968
diff changeset
4141 if (fail_timeout == NGX_ERROR) {
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4142 goto invalid;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4143 }
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4144
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4145 continue;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4146 }
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4147
1378
0be898896d1a backup upstream servers
Igor Sysoev <igor@sysoev.ru>
parents: 1340
diff changeset
4148 if (ngx_strncmp(value[i].data, "backup", 6) == 0) {
0be898896d1a backup upstream servers
Igor Sysoev <igor@sysoev.ru>
parents: 1340
diff changeset
4149
0be898896d1a backup upstream servers
Igor Sysoev <igor@sysoev.ru>
parents: 1340
diff changeset
4150 if (!(uscf->flags & NGX_HTTP_UPSTREAM_BACKUP)) {
0be898896d1a backup upstream servers
Igor Sysoev <igor@sysoev.ru>
parents: 1340
diff changeset
4151 goto invalid;
0be898896d1a backup upstream servers
Igor Sysoev <igor@sysoev.ru>
parents: 1340
diff changeset
4152 }
0be898896d1a backup upstream servers
Igor Sysoev <igor@sysoev.ru>
parents: 1340
diff changeset
4153
0be898896d1a backup upstream servers
Igor Sysoev <igor@sysoev.ru>
parents: 1340
diff changeset
4154 us->backup = 1;
0be898896d1a backup upstream servers
Igor Sysoev <igor@sysoev.ru>
parents: 1340
diff changeset
4155
0be898896d1a backup upstream servers
Igor Sysoev <igor@sysoev.ru>
parents: 1340
diff changeset
4156 continue;
0be898896d1a backup upstream servers
Igor Sysoev <igor@sysoev.ru>
parents: 1340
diff changeset
4157 }
0be898896d1a backup upstream servers
Igor Sysoev <igor@sysoev.ru>
parents: 1340
diff changeset
4158
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4159 if (ngx_strncmp(value[i].data, "down", 4) == 0) {
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4160
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4161 if (!(uscf->flags & NGX_HTTP_UPSTREAM_DOWN)) {
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4162 goto invalid;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4163 }
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4164
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4165 us->down = 1;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4166
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4167 continue;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4168 }
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4169
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4170 goto invalid;
663
6d5c1535bb9d nginx-0.3.53-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
4171 }
6d5c1535bb9d nginx-0.3.53-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
4172
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4173 us->addrs = u.addrs;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4174 us->naddrs = u.naddrs;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4175 us->weight = weight;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4176 us->max_fails = max_fails;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4177 us->fail_timeout = fail_timeout;
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4178
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4179 return NGX_CONF_OK;
663
6d5c1535bb9d nginx-0.3.53-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
4180
6d5c1535bb9d nginx-0.3.53-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
4181 invalid:
6d5c1535bb9d nginx-0.3.53-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
4182
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4183 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4184 "invalid parameter \"%V\"", &value[i]);
663
6d5c1535bb9d nginx-0.3.53-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
4185
6d5c1535bb9d nginx-0.3.53-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
4186 return NGX_CONF_ERROR;
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4187 }
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4188
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4189
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4190 ngx_http_upstream_srv_conf_t *
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4191 ngx_http_upstream_add(ngx_conf_t *cf, ngx_url_t *u, ngx_uint_t flags)
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4192 {
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4193 ngx_uint_t i;
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4194 ngx_http_upstream_server_t *us;
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4195 ngx_http_upstream_srv_conf_t *uscf, **uscfp;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4196 ngx_http_upstream_main_conf_t *umcf;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4197
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4198 if (!(flags & NGX_HTTP_UPSTREAM_CREATE)) {
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4199
1559
fe11e2a3946d use pool instead of ngx_conf_t
Igor Sysoev <igor@sysoev.ru>
parents: 1558
diff changeset
4200 if (ngx_parse_url(cf->pool, u) != NGX_OK) {
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4201 if (u->err) {
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4202 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4203 "%s in upstream \"%V\"", u->err, &u->url);
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4204 }
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4205
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4206 return NULL;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4207 }
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4208 }
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4209
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4210 umcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_upstream_module);
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4211
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4212 uscfp = umcf->upstreams.elts;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4213
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4214 for (i = 0; i < umcf->upstreams.nelts; i++) {
906
a0310ac2814f rewritten upstream
Igor Sysoev <igor@sysoev.ru>
parents: 901
diff changeset
4215
a0310ac2814f rewritten upstream
Igor Sysoev <igor@sysoev.ru>
parents: 901
diff changeset
4216 if (uscfp[i]->host.len != u->host.len
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4217 || ngx_strncasecmp(uscfp[i]->host.data, u->host.data, u->host.len)
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4218 != 0)
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4219 {
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4220 continue;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4221 }
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4222
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4223 if ((flags & NGX_HTTP_UPSTREAM_CREATE)
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4224 && (uscfp[i]->flags & NGX_HTTP_UPSTREAM_CREATE))
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4225 {
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4226 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4227 "duplicate upstream \"%V\"", &u->host);
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4228 return NULL;
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4229 }
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4230
906
a0310ac2814f rewritten upstream
Igor Sysoev <igor@sysoev.ru>
parents: 901
diff changeset
4231 if ((uscfp[i]->flags & NGX_HTTP_UPSTREAM_CREATE) && u->port) {
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4232 ngx_conf_log_error(NGX_LOG_WARN, cf, 0,
906
a0310ac2814f rewritten upstream
Igor Sysoev <igor@sysoev.ru>
parents: 901
diff changeset
4233 "upstream \"%V\" may not have port %d",
a0310ac2814f rewritten upstream
Igor Sysoev <igor@sysoev.ru>
parents: 901
diff changeset
4234 &u->host, u->port);
a0310ac2814f rewritten upstream
Igor Sysoev <igor@sysoev.ru>
parents: 901
diff changeset
4235 return NULL;
a0310ac2814f rewritten upstream
Igor Sysoev <igor@sysoev.ru>
parents: 901
diff changeset
4236 }
a0310ac2814f rewritten upstream
Igor Sysoev <igor@sysoev.ru>
parents: 901
diff changeset
4237
a0310ac2814f rewritten upstream
Igor Sysoev <igor@sysoev.ru>
parents: 901
diff changeset
4238 if ((flags & NGX_HTTP_UPSTREAM_CREATE) && uscfp[i]->port) {
a0310ac2814f rewritten upstream
Igor Sysoev <igor@sysoev.ru>
parents: 901
diff changeset
4239 ngx_log_error(NGX_LOG_WARN, cf->log, 0,
a0310ac2814f rewritten upstream
Igor Sysoev <igor@sysoev.ru>
parents: 901
diff changeset
4240 "upstream \"%V\" may not have port %d in %s:%ui",
a0310ac2814f rewritten upstream
Igor Sysoev <igor@sysoev.ru>
parents: 901
diff changeset
4241 &u->host, uscfp[i]->port,
1489
56f1ea5baabb u_char* is enough to keep file name
Igor Sysoev <igor@sysoev.ru>
parents: 1469
diff changeset
4242 uscfp[i]->file_name, uscfp[i]->line);
906
a0310ac2814f rewritten upstream
Igor Sysoev <igor@sysoev.ru>
parents: 901
diff changeset
4243 return NULL;
a0310ac2814f rewritten upstream
Igor Sysoev <igor@sysoev.ru>
parents: 901
diff changeset
4244 }
a0310ac2814f rewritten upstream
Igor Sysoev <igor@sysoev.ru>
parents: 901
diff changeset
4245
a0310ac2814f rewritten upstream
Igor Sysoev <igor@sysoev.ru>
parents: 901
diff changeset
4246 if (uscfp[i]->port != u->port) {
a0310ac2814f rewritten upstream
Igor Sysoev <igor@sysoev.ru>
parents: 901
diff changeset
4247 continue;
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4248 }
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4249
1340
32cdba6f2ec1 fix case when two directives
Igor Sysoev <igor@sysoev.ru>
parents: 1295
diff changeset
4250 if (uscfp[i]->default_port && u->default_port
32cdba6f2ec1 fix case when two directives
Igor Sysoev <igor@sysoev.ru>
parents: 1295
diff changeset
4251 && uscfp[i]->default_port != u->default_port)
32cdba6f2ec1 fix case when two directives
Igor Sysoev <igor@sysoev.ru>
parents: 1295
diff changeset
4252 {
32cdba6f2ec1 fix case when two directives
Igor Sysoev <igor@sysoev.ru>
parents: 1295
diff changeset
4253 continue;
32cdba6f2ec1 fix case when two directives
Igor Sysoev <igor@sysoev.ru>
parents: 1295
diff changeset
4254 }
32cdba6f2ec1 fix case when two directives
Igor Sysoev <igor@sysoev.ru>
parents: 1295
diff changeset
4255
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4256 return uscfp[i];
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4257 }
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4258
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4259 uscf = ngx_pcalloc(cf->pool, sizeof(ngx_http_upstream_srv_conf_t));
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4260 if (uscf == NULL) {
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4261 return NULL;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4262 }
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4263
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4264 uscf->flags = flags;
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4265 uscf->host = u->host;
1489
56f1ea5baabb u_char* is enough to keep file name
Igor Sysoev <igor@sysoev.ru>
parents: 1469
diff changeset
4266 uscf->file_name = cf->conf_file->file.name.data;
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4267 uscf->line = cf->conf_file->line;
906
a0310ac2814f rewritten upstream
Igor Sysoev <igor@sysoev.ru>
parents: 901
diff changeset
4268 uscf->port = u->port;
a0310ac2814f rewritten upstream
Igor Sysoev <igor@sysoev.ru>
parents: 901
diff changeset
4269 uscf->default_port = u->default_port;
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4270
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4271 if (u->naddrs == 1) {
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4272 uscf->servers = ngx_array_create(cf->pool, 1,
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4273 sizeof(ngx_http_upstream_server_t));
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4274 if (uscf->servers == NULL) {
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4275 return NGX_CONF_ERROR;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4276 }
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4277
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4278 us = ngx_array_push(uscf->servers);
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4279 if (us == NULL) {
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4280 return NGX_CONF_ERROR;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4281 }
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4282
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4283 ngx_memzero(us, sizeof(ngx_http_upstream_server_t));
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4284
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4285 us->addrs = u->addrs;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4286 us->naddrs = u->naddrs;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4287 }
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4288
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4289 uscfp = ngx_array_push(&umcf->upstreams);
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4290 if (uscfp == NULL) {
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4291 return NULL;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4292 }
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4293
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4294 *uscfp = uscf;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4295
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4296 return uscf;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4297 }
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4298
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4299
3271
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 3198
diff changeset
4300 char *
3399
ac9c0380337d fix typo
Igor Sysoev <igor@sysoev.ru>
parents: 3369
diff changeset
4301 ngx_http_upstream_bind_set_slot(ngx_conf_t *cf, ngx_command_t *cmd,
3271
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 3198
diff changeset
4302 void *conf)
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 3198
diff changeset
4303 {
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 3198
diff changeset
4304 char *p = conf;
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 3198
diff changeset
4305
3272
98f49b2bcae8 change ngx_parse_addr() interface
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
4306 ngx_int_t rc;
3271
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 3198
diff changeset
4307 ngx_str_t *value;
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 3198
diff changeset
4308 ngx_addr_t **paddr;
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 3198
diff changeset
4309
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 3198
diff changeset
4310 paddr = (ngx_addr_t **) (p + cmd->offset);
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 3198
diff changeset
4311
3272
98f49b2bcae8 change ngx_parse_addr() interface
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
4312 *paddr = ngx_palloc(cf->pool, sizeof(ngx_addr_t));
98f49b2bcae8 change ngx_parse_addr() interface
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
4313 if (*paddr == NULL) {
98f49b2bcae8 change ngx_parse_addr() interface
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
4314 return NGX_CONF_ERROR;
3271
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 3198
diff changeset
4315 }
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 3198
diff changeset
4316
3272
98f49b2bcae8 change ngx_parse_addr() interface
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
4317 value = cf->args->elts;
98f49b2bcae8 change ngx_parse_addr() interface
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
4318
98f49b2bcae8 change ngx_parse_addr() interface
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
4319 rc = ngx_parse_addr(cf->pool, *paddr, value[1].data, value[1].len);
98f49b2bcae8 change ngx_parse_addr() interface
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
4320
98f49b2bcae8 change ngx_parse_addr() interface
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
4321 switch (rc) {
98f49b2bcae8 change ngx_parse_addr() interface
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
4322 case NGX_OK:
98f49b2bcae8 change ngx_parse_addr() interface
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
4323 (*paddr)->name = value[1];
98f49b2bcae8 change ngx_parse_addr() interface
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
4324 return NGX_CONF_OK;
98f49b2bcae8 change ngx_parse_addr() interface
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
4325
98f49b2bcae8 change ngx_parse_addr() interface
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
4326 case NGX_DECLINED:
98f49b2bcae8 change ngx_parse_addr() interface
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
4327 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
98f49b2bcae8 change ngx_parse_addr() interface
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
4328 "invalid address \"%V\"", &value[1]);
98f49b2bcae8 change ngx_parse_addr() interface
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
4329 default:
98f49b2bcae8 change ngx_parse_addr() interface
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
4330 return NGX_CONF_ERROR;
98f49b2bcae8 change ngx_parse_addr() interface
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
4331 }
3271
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 3198
diff changeset
4332 }
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 3198
diff changeset
4333
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 3198
diff changeset
4334
1701
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4335 ngx_int_t
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4336 ngx_http_upstream_hide_headers_hash(ngx_conf_t *cf,
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4337 ngx_http_upstream_conf_t *conf, ngx_http_upstream_conf_t *prev,
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4338 ngx_str_t *default_hide_headers, ngx_hash_init_t *hash)
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4339 {
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4340 ngx_str_t *h;
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4341 ngx_uint_t i, j;
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4342 ngx_array_t hide_headers;
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4343 ngx_hash_key_t *hk;
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4344
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4345 if (conf->hide_headers == NGX_CONF_UNSET_PTR
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4346 && conf->pass_headers == NGX_CONF_UNSET_PTR)
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4347 {
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4348 conf->hide_headers_hash = prev->hide_headers_hash;
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4349
2929
37b7cd336fdf inherit proxy_set_header, proxy_hide_header, and fastcgi_hide_header
Igor Sysoev <igor@sysoev.ru>
parents: 2927
diff changeset
4350 if (conf->hide_headers_hash.buckets
2949
fe484c0be7c0 fix building --without-http-cache, broken in r2930
Igor Sysoev <igor@sysoev.ru>
parents: 2929
diff changeset
4351 #if (NGX_HTTP_CACHE)
fe484c0be7c0 fix building --without-http-cache, broken in r2930
Igor Sysoev <igor@sysoev.ru>
parents: 2929
diff changeset
4352 && ((conf->cache == NULL) == (prev->cache == NULL))
fe484c0be7c0 fix building --without-http-cache, broken in r2930
Igor Sysoev <igor@sysoev.ru>
parents: 2929
diff changeset
4353 #endif
fe484c0be7c0 fix building --without-http-cache, broken in r2930
Igor Sysoev <igor@sysoev.ru>
parents: 2929
diff changeset
4354 )
2929
37b7cd336fdf inherit proxy_set_header, proxy_hide_header, and fastcgi_hide_header
Igor Sysoev <igor@sysoev.ru>
parents: 2927
diff changeset
4355 {
1701
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4356 return NGX_OK;
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4357 }
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4358
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4359 conf->hide_headers = prev->hide_headers;
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4360 conf->pass_headers = prev->pass_headers;
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4361
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4362 } else {
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4363 if (conf->hide_headers == NGX_CONF_UNSET_PTR) {
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4364 conf->hide_headers = prev->hide_headers;
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4365 }
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4366
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4367 if (conf->pass_headers == NGX_CONF_UNSET_PTR) {
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4368 conf->pass_headers = prev->pass_headers;
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4369 }
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4370 }
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4371
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4372 if (ngx_array_init(&hide_headers, cf->temp_pool, 4, sizeof(ngx_hash_key_t))
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4373 != NGX_OK)
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4374 {
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4375 return NGX_ERROR;
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4376 }
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4377
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4378 for (h = default_hide_headers; h->len; h++) {
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4379 hk = ngx_array_push(&hide_headers);
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4380 if (hk == NULL) {
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4381 return NGX_ERROR;
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4382 }
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4383
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4384 hk->key = *h;
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4385 hk->key_hash = ngx_hash_key_lc(h->data, h->len);
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4386 hk->value = (void *) 1;
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4387 }
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4388
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4389 if (conf->hide_headers != NGX_CONF_UNSET_PTR) {
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4390
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4391 h = conf->hide_headers->elts;
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4392
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4393 for (i = 0; i < conf->hide_headers->nelts; i++) {
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4394
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4395 hk = hide_headers.elts;
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4396
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4397 for (j = 0; j < hide_headers.nelts; j++) {
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4398 if (ngx_strcasecmp(h[i].data, hk[j].key.data) == 0) {
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4399 goto exist;
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4400 }
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4401 }
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4402
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4403 hk = ngx_array_push(&hide_headers);
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4404 if (hk == NULL) {
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4405 return NGX_ERROR;
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4406 }
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4407
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4408 hk->key = h[i];
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4409 hk->key_hash = ngx_hash_key_lc(h[i].data, h[i].len);
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4410 hk->value = (void *) 1;
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4411
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4412 exist:
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4413
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4414 continue;
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4415 }
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4416 }
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4417
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4418 if (conf->pass_headers != NGX_CONF_UNSET_PTR) {
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4419
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4420 h = conf->pass_headers->elts;
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4421 hk = hide_headers.elts;
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4422
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4423 for (i = 0; i < conf->pass_headers->nelts; i++) {
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4424 for (j = 0; j < hide_headers.nelts; j++) {
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4425
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4426 if (hk[j].key.data == NULL) {
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4427 continue;
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4428 }
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4429
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4430 if (ngx_strcasecmp(h[i].data, hk[j].key.data) == 0) {
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4431 hk[j].key.data = NULL;
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4432 break;
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4433 }
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4434 }
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4435 }
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4436 }
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4437
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4438 hash->hash = &conf->hide_headers_hash;
1706
9242e21d2f8d style fix: remove trailing spaces
Igor Sysoev <igor@sysoev.ru>
parents: 1705
diff changeset
4439 hash->key = ngx_hash_key_lc;
1701
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4440 hash->pool = cf->pool;
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4441 hash->temp_pool = NULL;
1706
9242e21d2f8d style fix: remove trailing spaces
Igor Sysoev <igor@sysoev.ru>
parents: 1705
diff changeset
4442
1701
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4443 return ngx_hash_init(hash, hide_headers.elts, hide_headers.nelts);
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4444 }
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4445
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
4446
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4447 static void *
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4448 ngx_http_upstream_create_main_conf(ngx_conf_t *cf)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4449 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4450 ngx_http_upstream_main_conf_t *umcf;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4451
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4452 umcf = ngx_pcalloc(cf->pool, sizeof(ngx_http_upstream_main_conf_t));
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4453 if (umcf == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4454 return NULL;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4455 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4456
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4457 if (ngx_array_init(&umcf->upstreams, cf->pool, 4,
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4458 sizeof(ngx_http_upstream_srv_conf_t *))
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4459 != NGX_OK)
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4460 {
2912
c7d57b539248 return NULL instead of NGX_CONF_ERROR on a create conf failure
Igor Sysoev <igor@sysoev.ru>
parents: 2882
diff changeset
4461 return NULL;
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4462 }
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4463
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4464 return umcf;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4465 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4466
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4467
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4468 static char *
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4469 ngx_http_upstream_init_main_conf(ngx_conf_t *cf, void *conf)
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4470 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4471 ngx_http_upstream_main_conf_t *umcf = conf;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4472
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4473 ngx_uint_t i;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4474 ngx_array_t headers_in;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4475 ngx_hash_key_t *hk;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4476 ngx_hash_init_t hash;
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4477 ngx_http_upstream_init_pt init;
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4478 ngx_http_upstream_header_t *header;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4479 ngx_http_upstream_srv_conf_t **uscfp;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4480
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4481 uscfp = umcf->upstreams.elts;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4482
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4483 for (i = 0; i < umcf->upstreams.nelts; i++) {
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4484
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4485 init = uscfp[i]->peer.init_upstream ? uscfp[i]->peer.init_upstream:
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4486 ngx_http_upstream_init_round_robin;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4487
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4488 if (init(cf, uscfp[i]) != NGX_OK) {
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4489 return NGX_CONF_ERROR;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4490 }
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4491 }
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
4492
663
6d5c1535bb9d nginx-0.3.53-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 659
diff changeset
4493
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4494 /* upstream_headers_in_hash */
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
4495
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
4496 if (ngx_array_init(&headers_in, cf->temp_pool, 32, sizeof(ngx_hash_key_t))
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
4497 != NGX_OK)
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4498 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4499 return NGX_CONF_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4500 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4501
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
4502 for (header = ngx_http_upstream_headers_in; header->name.len; header++) {
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
4503 hk = ngx_array_push(&headers_in);
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
4504 if (hk == NULL) {
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
4505 return NGX_CONF_ERROR;
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
4506 }
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
4507
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
4508 hk->key = header->name;
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
4509 hk->key_hash = ngx_hash_key_lc(header->name.data, header->name.len);
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
4510 hk->value = header;
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
4511 }
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
4512
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
4513 hash.hash = &umcf->headers_in_hash;
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
4514 hash.key = ngx_hash_key_lc;
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
4515 hash.max_size = 512;
751
bae59a740c40 align hash bucket size to cache line
Igor Sysoev <igor@sysoev.ru>
parents: 750
diff changeset
4516 hash.bucket_size = ngx_align(64, ngx_cacheline_size);
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
4517 hash.name = "upstream_headers_in_hash";
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
4518 hash.pool = cf->pool;
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
4519 hash.temp_pool = NULL;
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
4520
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
4521 if (ngx_hash_init(&hash, headers_in.elts, headers_in.nelts) != NGX_OK) {
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
4522 return NGX_CONF_ERROR;
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
4523 }
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4524
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4525 return NGX_CONF_OK;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4526 }