Mercurial > hg > nginx
annotate src/http/ngx_http_upstream.h @ 6874:7cc2d3a96ea3
Fixed trailer construction with limit on FreeBSD and macOS.
The ngx_chain_coalesce_file() function may produce more bytes to send then
requested in the limit passed, as it aligns the last file position
to send to memory page boundary. As a result, (limit - send) may become
negative. This resulted in big positive number when converted to size_t
while calling ngx_output_chain_to_iovec().
Another part of the problem is in ngx_chain_coalesce_file(): it changes cl
to the next chain link even if the current buffer is only partially sent
due to limit.
Therefore, if a file buffer was not expected to be fully sent due to limit,
and was followed by a memory buffer, nginx called sendfile() with a part
of the file buffer, and the memory buffer in trailer. If there were enough
room in the socket buffer, this resulted in a part of the file buffer being
skipped, and corresponding part of the memory buffer sent instead.
The bug was introduced in 8e903522c17a (1.7.8). Configurations affected
are ones using limits, that is, limit_rate and/or sendfile_max_chunk, and
memory buffers after file ones (may happen when using subrequests or
with proxying with disk buffering).
Fix is to explicitly check if (send < limit) before constructing trailer
with ngx_output_chain_to_iovec(). Additionally, ngx_chain_coalesce_file()
was modified to preserve unfinished file buffers in cl.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Fri, 20 Jan 2017 21:12:48 +0300 |
parents | 0fba3ed4e7eb |
children | 7113b9b2dd6c |
rev | line source |
---|---|
479 | 1 |
2 /* | |
3 * Copyright (C) Igor Sysoev | |
4412 | 4 * Copyright (C) Nginx, Inc. |
479 | 5 */ |
6 | |
7 | |
8 #ifndef _NGX_HTTP_UPSTREAM_H_INCLUDED_ | |
9 #define _NGX_HTTP_UPSTREAM_H_INCLUDED_ | |
10 | |
11 | |
12 #include <ngx_config.h> | |
13 #include <ngx_core.h> | |
14 #include <ngx_event.h> | |
15 #include <ngx_event_connect.h> | |
16 #include <ngx_event_pipe.h> | |
17 #include <ngx_http.h> | |
18 | |
19 | |
665 | 20 #define NGX_HTTP_UPSTREAM_FT_ERROR 0x00000002 |
21 #define NGX_HTTP_UPSTREAM_FT_TIMEOUT 0x00000004 | |
22 #define NGX_HTTP_UPSTREAM_FT_INVALID_HEADER 0x00000008 | |
23 #define NGX_HTTP_UPSTREAM_FT_HTTP_500 0x00000010 | |
2268
33556140681a
*) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents:
2184
diff
changeset
|
24 #define NGX_HTTP_UPSTREAM_FT_HTTP_502 0x00000020 |
33556140681a
*) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents:
2184
diff
changeset
|
25 #define NGX_HTTP_UPSTREAM_FT_HTTP_503 0x00000040 |
33556140681a
*) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents:
2184
diff
changeset
|
26 #define NGX_HTTP_UPSTREAM_FT_HTTP_504 0x00000080 |
5231
05c53652e7b4
Upstream: http_403 support in proxy_next_upstream (and friends).
Maxim Dounin <mdounin@mdounin.ru>
parents:
5072
diff
changeset
|
27 #define NGX_HTTP_UPSTREAM_FT_HTTP_403 0x00000100 |
05c53652e7b4
Upstream: http_403 support in proxy_next_upstream (and friends).
Maxim Dounin <mdounin@mdounin.ru>
parents:
5072
diff
changeset
|
28 #define NGX_HTTP_UPSTREAM_FT_HTTP_404 0x00000200 |
05c53652e7b4
Upstream: http_403 support in proxy_next_upstream (and friends).
Maxim Dounin <mdounin@mdounin.ru>
parents:
5072
diff
changeset
|
29 #define NGX_HTTP_UPSTREAM_FT_UPDATING 0x00000400 |
05c53652e7b4
Upstream: http_403 support in proxy_next_upstream (and friends).
Maxim Dounin <mdounin@mdounin.ru>
parents:
5072
diff
changeset
|
30 #define NGX_HTTP_UPSTREAM_FT_BUSY_LOCK 0x00000800 |
05c53652e7b4
Upstream: http_403 support in proxy_next_upstream (and friends).
Maxim Dounin <mdounin@mdounin.ru>
parents:
5072
diff
changeset
|
31 #define NGX_HTTP_UPSTREAM_FT_MAX_WAITING 0x00001000 |
6467
91c8d990fb45
Upstream: proxy_next_upstream non_idempotent.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6458
diff
changeset
|
32 #define NGX_HTTP_UPSTREAM_FT_NON_IDEMPOTENT 0x00002000 |
1378 | 33 #define NGX_HTTP_UPSTREAM_FT_NOLIVE 0x40000000 |
665 | 34 #define NGX_HTTP_UPSTREAM_FT_OFF 0x80000000 |
479 | 35 |
2268
33556140681a
*) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents:
2184
diff
changeset
|
36 #define NGX_HTTP_UPSTREAM_FT_STATUS (NGX_HTTP_UPSTREAM_FT_HTTP_500 \ |
33556140681a
*) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents:
2184
diff
changeset
|
37 |NGX_HTTP_UPSTREAM_FT_HTTP_502 \ |
33556140681a
*) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents:
2184
diff
changeset
|
38 |NGX_HTTP_UPSTREAM_FT_HTTP_503 \ |
33556140681a
*) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents:
2184
diff
changeset
|
39 |NGX_HTTP_UPSTREAM_FT_HTTP_504 \ |
5231
05c53652e7b4
Upstream: http_403 support in proxy_next_upstream (and friends).
Maxim Dounin <mdounin@mdounin.ru>
parents:
5072
diff
changeset
|
40 |NGX_HTTP_UPSTREAM_FT_HTTP_403 \ |
2268
33556140681a
*) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents:
2184
diff
changeset
|
41 |NGX_HTTP_UPSTREAM_FT_HTTP_404) |
479 | 42 |
43 #define NGX_HTTP_UPSTREAM_INVALID_HEADER 40 | |
44 | |
45 | |
2786
4e002555652d
proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents:
2754
diff
changeset
|
46 #define NGX_HTTP_UPSTREAM_IGN_XA_REDIRECT 0x00000002 |
4e002555652d
proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents:
2754
diff
changeset
|
47 #define NGX_HTTP_UPSTREAM_IGN_XA_EXPIRES 0x00000004 |
4e002555652d
proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents:
2754
diff
changeset
|
48 #define NGX_HTTP_UPSTREAM_IGN_EXPIRES 0x00000008 |
4e002555652d
proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents:
2754
diff
changeset
|
49 #define NGX_HTTP_UPSTREAM_IGN_CACHE_CONTROL 0x00000010 |
3669
1f5841b1fcd7
treat Set-Cookie as a header that forbids caching
Igor Sysoev <igor@sysoev.ru>
parents:
3667
diff
changeset
|
50 #define NGX_HTTP_UPSTREAM_IGN_SET_COOKIE 0x00000020 |
4197
cf6a3467b5db
Additional headers for proxy/fastcgi/uwsgi/scgi_ignore_headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4124
diff
changeset
|
51 #define NGX_HTTP_UPSTREAM_IGN_XA_LIMIT_RATE 0x00000040 |
cf6a3467b5db
Additional headers for proxy/fastcgi/uwsgi/scgi_ignore_headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4124
diff
changeset
|
52 #define NGX_HTTP_UPSTREAM_IGN_XA_BUFFERING 0x00000080 |
cf6a3467b5db
Additional headers for proxy/fastcgi/uwsgi/scgi_ignore_headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4124
diff
changeset
|
53 #define NGX_HTTP_UPSTREAM_IGN_XA_CHARSET 0x00000100 |
5877
60fde1bc7236
Cache: disable caching of responses with Vary (ticket #118).
Maxim Dounin <mdounin@mdounin.ru>
parents:
5874
diff
changeset
|
54 #define NGX_HTTP_UPSTREAM_IGN_VARY 0x00000200 |
2786
4e002555652d
proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents:
2754
diff
changeset
|
55 |
4e002555652d
proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents:
2754
diff
changeset
|
56 |
479 | 57 typedef struct { |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
58 ngx_msec_t bl_time; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
59 ngx_uint_t bl_state; |
479 | 60 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
61 ngx_uint_t status; |
6146
59fc60585f1e
Upstream: times to obtain header/response are stored as ngx_msec_t.
Ruslan Ermilov <ru@nginx.com>
parents:
6103
diff
changeset
|
62 ngx_msec_t response_time; |
6147
74b6ef56ea56
Upstream: $upstream_connect_time.
Ruslan Ermilov <ru@nginx.com>
parents:
6146
diff
changeset
|
63 ngx_msec_t connect_time; |
6146
59fc60585f1e
Upstream: times to obtain header/response are stored as ngx_msec_t.
Ruslan Ermilov <ru@nginx.com>
parents:
6103
diff
changeset
|
64 ngx_msec_t header_time; |
3795 | 65 off_t response_length; |
6654
c131f20c9562
Upstream: the $upstream_bytes_received variable.
Vladimir Homutov <vl@nginx.com>
parents:
6530
diff
changeset
|
66 off_t bytes_received; |
563 | 67 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
68 ngx_str_t *peer; |
479 | 69 } ngx_http_upstream_state_t; |
70 | |
71 | |
72 typedef struct { | |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
73 ngx_hash_t headers_in_hash; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
74 ngx_array_t upstreams; |
884 | 75 /* ngx_http_upstream_srv_conf_t */ |
509 | 76 } ngx_http_upstream_main_conf_t; |
77 | |
884 | 78 typedef struct ngx_http_upstream_srv_conf_s ngx_http_upstream_srv_conf_t; |
79 | |
80 typedef ngx_int_t (*ngx_http_upstream_init_pt)(ngx_conf_t *cf, | |
81 ngx_http_upstream_srv_conf_t *us); | |
82 typedef ngx_int_t (*ngx_http_upstream_init_peer_pt)(ngx_http_request_t *r, | |
83 ngx_http_upstream_srv_conf_t *us); | |
84 | |
85 | |
86 typedef struct { | |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
87 ngx_http_upstream_init_pt init_upstream; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
88 ngx_http_upstream_init_peer_pt init; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
89 void *data; |
884 | 90 } ngx_http_upstream_peer_t; |
91 | |
509 | 92 |
93 typedef struct { | |
5717
efc84a5723b3
Upstream: generic hash module.
Roman Arutyunyan <arut@nginx.com>
parents:
5677
diff
changeset
|
94 ngx_str_t name; |
3269
f0d596e84634
rename ngx_peer_addr_t to ngx_addr_t
Igor Sysoev <igor@sysoev.ru>
parents:
3264
diff
changeset
|
95 ngx_addr_t *addrs; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
96 ngx_uint_t naddrs; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
97 ngx_uint_t weight; |
6705 | 98 ngx_uint_t max_conns; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
99 ngx_uint_t max_fails; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
100 time_t fail_timeout; |
6708
4080f94a996f
Modules compatibility: slow start fields.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6705
diff
changeset
|
101 ngx_msec_t slow_start; |
884 | 102 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
103 unsigned down:1; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
104 unsigned backup:1; |
6715
d200a0fd00b7
Introduced the NGX_COMPAT macro.
Ruslan Ermilov <ru@nginx.com>
parents:
6709
diff
changeset
|
105 |
d200a0fd00b7
Introduced the NGX_COMPAT macro.
Ruslan Ermilov <ru@nginx.com>
parents:
6709
diff
changeset
|
106 NGX_COMPAT_BEGIN(6) |
d200a0fd00b7
Introduced the NGX_COMPAT macro.
Ruslan Ermilov <ru@nginx.com>
parents:
6709
diff
changeset
|
107 NGX_COMPAT_END |
884 | 108 } ngx_http_upstream_server_t; |
109 | |
651 | 110 |
884 | 111 #define NGX_HTTP_UPSTREAM_CREATE 0x0001 |
112 #define NGX_HTTP_UPSTREAM_WEIGHT 0x0002 | |
113 #define NGX_HTTP_UPSTREAM_MAX_FAILS 0x0004 | |
114 #define NGX_HTTP_UPSTREAM_FAIL_TIMEOUT 0x0008 | |
115 #define NGX_HTTP_UPSTREAM_DOWN 0x0010 | |
116 #define NGX_HTTP_UPSTREAM_BACKUP 0x0020 | |
6705 | 117 #define NGX_HTTP_UPSTREAM_MAX_CONNS 0x0100 |
884 | 118 |
651 | 119 |
884 | 120 struct ngx_http_upstream_srv_conf_s { |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
121 ngx_http_upstream_peer_t peer; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
122 void **srv_conf; |
884 | 123 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
124 ngx_array_t *servers; /* ngx_http_upstream_server_t */ |
884 | 125 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
126 ngx_uint_t flags; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
127 ngx_str_t host; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
128 u_char *file_name; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
129 ngx_uint_t line; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
130 in_port_t port; |
5005
c9059bd5445b
Fixed "proxy_pass" with IP address and no port (ticket #276).
Ruslan Ermilov <ru@nginx.com>
parents:
4464
diff
changeset
|
131 ngx_uint_t no_port; /* unsigned no_port:1 */ |
6103
79ddb0bdb273
Upstream: the "zone" directive.
Ruslan Ermilov <ru@nginx.com>
parents:
6050
diff
changeset
|
132 |
79ddb0bdb273
Upstream: the "zone" directive.
Ruslan Ermilov <ru@nginx.com>
parents:
6050
diff
changeset
|
133 #if (NGX_HTTP_UPSTREAM_ZONE) |
79ddb0bdb273
Upstream: the "zone" directive.
Ruslan Ermilov <ru@nginx.com>
parents:
6050
diff
changeset
|
134 ngx_shm_zone_t *shm_zone; |
79ddb0bdb273
Upstream: the "zone" directive.
Ruslan Ermilov <ru@nginx.com>
parents:
6050
diff
changeset
|
135 #endif |
884 | 136 }; |
651 | 137 |
138 | |
139 typedef struct { | |
5008
fd84344f1df7
Fixed and improved the "*_bind" directives of proxying modules.
Ruslan Ermilov <ru@nginx.com>
parents:
5005
diff
changeset
|
140 ngx_addr_t *addr; |
fd84344f1df7
Fixed and improved the "*_bind" directives of proxying modules.
Ruslan Ermilov <ru@nginx.com>
parents:
5005
diff
changeset
|
141 ngx_http_complex_value_t *value; |
6530
1d0e03db9f8e
Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents:
6467
diff
changeset
|
142 #if (NGX_HAVE_TRANSPARENT_PROXY) |
1d0e03db9f8e
Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents:
6467
diff
changeset
|
143 ngx_uint_t transparent; /* unsigned transparent:1; */ |
1d0e03db9f8e
Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents:
6467
diff
changeset
|
144 #endif |
5008
fd84344f1df7
Fixed and improved the "*_bind" directives of proxying modules.
Ruslan Ermilov <ru@nginx.com>
parents:
5005
diff
changeset
|
145 } ngx_http_upstream_local_t; |
fd84344f1df7
Fixed and improved the "*_bind" directives of proxying modules.
Ruslan Ermilov <ru@nginx.com>
parents:
5005
diff
changeset
|
146 |
fd84344f1df7
Fixed and improved the "*_bind" directives of proxying modules.
Ruslan Ermilov <ru@nginx.com>
parents:
5005
diff
changeset
|
147 |
fd84344f1df7
Fixed and improved the "*_bind" directives of proxying modules.
Ruslan Ermilov <ru@nginx.com>
parents:
5005
diff
changeset
|
148 typedef struct { |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
149 ngx_http_upstream_srv_conf_t *upstream; |
884 | 150 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
151 ngx_msec_t connect_timeout; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
152 ngx_msec_t send_timeout; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
153 ngx_msec_t read_timeout; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
154 ngx_msec_t timeout; |
5832
d09b689911ac
Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents:
5732
diff
changeset
|
155 ngx_msec_t next_upstream_timeout; |
479 | 156 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
157 size_t send_lowat; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
158 size_t buffer_size; |
5883
973ee2276300
Upstream: proxy_limit_rate and friends.
Roman Arutyunyan <arut@nginx.com>
parents:
5877
diff
changeset
|
159 size_t limit_rate; |
529 | 160 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
161 size_t busy_buffers_size; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
162 size_t max_temp_file_size; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
163 size_t temp_file_write_size; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
164 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
165 size_t busy_buffers_size_conf; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
166 size_t max_temp_file_size_conf; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
167 size_t temp_file_write_size_conf; |
509 | 168 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
169 ngx_bufs_t bufs; |
529 | 170 |
2786
4e002555652d
proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents:
2754
diff
changeset
|
171 ngx_uint_t ignore_headers; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
172 ngx_uint_t next_upstream; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
173 ngx_uint_t store_access; |
5832
d09b689911ac
Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents:
5732
diff
changeset
|
174 ngx_uint_t next_upstream_tries; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
175 ngx_flag_t buffering; |
6050
a08fad30aeac
Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5964
diff
changeset
|
176 ngx_flag_t request_buffering; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
177 ngx_flag_t pass_request_headers; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
178 ngx_flag_t pass_request_body; |
479 | 179 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
180 ngx_flag_t ignore_client_abort; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
181 ngx_flag_t intercept_errors; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
182 ngx_flag_t cyclic_temp_file; |
5874
2aff40b3dea2
Upstream: proxy_force_ranges and friends.
Roman Arutyunyan <arut@nginx.com>
parents:
5832
diff
changeset
|
183 ngx_flag_t force_ranges; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
184 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
185 ngx_path_t *temp_path; |
479 | 186 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
187 ngx_hash_t hide_headers_hash; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
188 ngx_array_t *hide_headers; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
189 ngx_array_t *pass_headers; |
509 | 190 |
5008
fd84344f1df7
Fixed and improved the "*_bind" directives of proxying modules.
Ruslan Ermilov <ru@nginx.com>
parents:
5005
diff
changeset
|
191 ngx_http_upstream_local_t *local; |
3271
fcd98af88df3
proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents:
3269
diff
changeset
|
192 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
193 #if (NGX_HTTP_CACHE) |
5949
634da79665d3
Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents:
5905
diff
changeset
|
194 ngx_shm_zone_t *cache_zone; |
5951
610832763648
Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents:
5949
diff
changeset
|
195 ngx_http_complex_value_t *cache_value; |
479 | 196 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
197 ngx_uint_t cache_min_uses; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
198 ngx_uint_t cache_use_stale; |
2875
6e1941b321b7
proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents:
2786
diff
changeset
|
199 ngx_uint_t cache_methods; |
479 | 200 |
6793
0fba3ed4e7eb
Cache: proxy_cache_max_range_offset and friends.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6789
diff
changeset
|
201 off_t cache_max_range_offset; |
0fba3ed4e7eb
Cache: proxy_cache_max_range_offset and friends.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6789
diff
changeset
|
202 |
4385
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4328
diff
changeset
|
203 ngx_flag_t cache_lock; |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4328
diff
changeset
|
204 ngx_msec_t cache_lock_timeout; |
5905
2f7e557eab5b
Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents:
5883
diff
changeset
|
205 ngx_msec_t cache_lock_age; |
4385
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4328
diff
changeset
|
206 |
5441
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5231
diff
changeset
|
207 ngx_flag_t cache_revalidate; |
6290
4d5ac1a31d44
Upstream: proxy_cache_convert_head directive.
Roman Arutyunyan <arut@nginx.com>
parents:
6147
diff
changeset
|
208 ngx_flag_t cache_convert_head; |
5441
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5231
diff
changeset
|
209 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
210 ngx_array_t *cache_valid; |
3699
b0a0686a85bb
proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents:
3669
diff
changeset
|
211 ngx_array_t *cache_bypass; |
6709
e08e741f74cd
Modules compatibility: cache purge fields.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6708
diff
changeset
|
212 ngx_array_t *cache_purge; |
3699
b0a0686a85bb
proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents:
3669
diff
changeset
|
213 ngx_array_t *no_cache; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
214 #endif |
509 | 215 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
216 ngx_array_t *store_lengths; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
217 ngx_array_t *store_values; |
1295
5383f5232364
proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents:
1291
diff
changeset
|
218 |
5949
634da79665d3
Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents:
5905
diff
changeset
|
219 #if (NGX_HTTP_CACHE) |
634da79665d3
Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents:
5905
diff
changeset
|
220 signed cache:2; |
634da79665d3
Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents:
5905
diff
changeset
|
221 #endif |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
222 signed store:2; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
223 unsigned intercept_404:1; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
224 unsigned change_buffering:1; |
581 | 225 |
6735
e38e9c50a40e
Modules compatibility: compatibility with NGX_HTTP_SSL.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6715
diff
changeset
|
226 #if (NGX_HTTP_SSL || NGX_COMPAT) |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
227 ngx_ssl_t *ssl; |
2754 | 228 ngx_flag_t ssl_session_reuse; |
5660
7022564a9e0e
Upstream: proxy_ssl_name and proxy_ssl_server_name directives.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5475
diff
changeset
|
229 |
7022564a9e0e
Upstream: proxy_ssl_name and proxy_ssl_server_name directives.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5475
diff
changeset
|
230 ngx_http_complex_value_t *ssl_name; |
7022564a9e0e
Upstream: proxy_ssl_name and proxy_ssl_server_name directives.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5475
diff
changeset
|
231 ngx_flag_t ssl_server_name; |
5661
060c2e692b96
Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5660
diff
changeset
|
232 ngx_flag_t ssl_verify; |
577 | 233 #endif |
234 | |
3976
215fe9223419
update r3945 with more descriptive error message
Igor Sysoev <igor@sysoev.ru>
parents:
3795
diff
changeset
|
235 ngx_str_t module; |
6715
d200a0fd00b7
Introduced the NGX_COMPAT macro.
Ruslan Ermilov <ru@nginx.com>
parents:
6709
diff
changeset
|
236 |
d200a0fd00b7
Introduced the NGX_COMPAT macro.
Ruslan Ermilov <ru@nginx.com>
parents:
6709
diff
changeset
|
237 NGX_COMPAT_BEGIN(2) |
d200a0fd00b7
Introduced the NGX_COMPAT macro.
Ruslan Ermilov <ru@nginx.com>
parents:
6709
diff
changeset
|
238 NGX_COMPAT_END |
479 | 239 } ngx_http_upstream_conf_t; |
240 | |
241 | |
509 | 242 typedef struct { |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
243 ngx_str_t name; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
244 ngx_http_header_handler_pt handler; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
245 ngx_uint_t offset; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
246 ngx_http_header_handler_pt copy_handler; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
247 ngx_uint_t conf; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
248 ngx_uint_t redirect; /* unsigned redirect:1; */ |
509 | 249 } ngx_http_upstream_header_t; |
250 | |
251 | |
252 typedef struct { | |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
253 ngx_list_t headers; |
509 | 254 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
255 ngx_uint_t status_n; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
256 ngx_str_t status_line; |
529 | 257 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
258 ngx_table_elt_t *status; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
259 ngx_table_elt_t *date; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
260 ngx_table_elt_t *server; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
261 ngx_table_elt_t *connection; |
509 | 262 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
263 ngx_table_elt_t *expires; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
264 ngx_table_elt_t *etag; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
265 ngx_table_elt_t *x_accel_expires; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
266 ngx_table_elt_t *x_accel_redirect; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
267 ngx_table_elt_t *x_accel_limit_rate; |
509 | 268 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
269 ngx_table_elt_t *content_type; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
270 ngx_table_elt_t *content_length; |
509 | 271 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
272 ngx_table_elt_t *last_modified; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
273 ngx_table_elt_t *location; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
274 ngx_table_elt_t *accept_ranges; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
275 ngx_table_elt_t *www_authenticate; |
4123
0ee350b5177c
Upstream: Transfer-Encoding header processing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4120
diff
changeset
|
276 ngx_table_elt_t *transfer_encoding; |
5877
60fde1bc7236
Cache: disable caching of responses with Vary (ticket #118).
Maxim Dounin <mdounin@mdounin.ru>
parents:
5874
diff
changeset
|
277 ngx_table_elt_t *vary; |
509 | 278 |
279 #if (NGX_HTTP_GZIP) | |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
280 ngx_table_elt_t *content_encoding; |
509 | 281 #endif |
282 | |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
283 ngx_array_t cache_control; |
5677
3a48775f1535
Upstream: added the "$upstream_cookie_<name>" variables.
Vladimir Homutov <vl@nginx.com>
parents:
5661
diff
changeset
|
284 ngx_array_t cookies; |
4123
0ee350b5177c
Upstream: Transfer-Encoding header processing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4120
diff
changeset
|
285 |
5732
d0ce06cb9be1
Upstream: fixed cache revalidation with SSI.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5717
diff
changeset
|
286 off_t content_length_n; |
d0ce06cb9be1
Upstream: fixed cache revalidation with SSI.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5717
diff
changeset
|
287 time_t last_modified_time; |
d0ce06cb9be1
Upstream: fixed cache revalidation with SSI.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5717
diff
changeset
|
288 |
4124
0c30976f5bfa
Upstream: Connection header processing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4123
diff
changeset
|
289 unsigned connection_close:1; |
4123
0ee350b5177c
Upstream: Transfer-Encoding header processing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4120
diff
changeset
|
290 unsigned chunked:1; |
509 | 291 } ngx_http_upstream_headers_in_t; |
292 | |
479 | 293 |
1658 | 294 typedef struct { |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
295 ngx_str_t host; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
296 in_port_t port; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
297 ngx_uint_t no_port; /* unsigned no_port:1 */ |
2422
7af1e5fe102c
variable support for unix sockets in fastcgi_pass and proxy_pass
Igor Sysoev <igor@sysoev.ru>
parents:
2402
diff
changeset
|
298 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
299 ngx_uint_t naddrs; |
6458
384154fc634f
Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6332
diff
changeset
|
300 ngx_resolver_addr_t *addrs; |
2422
7af1e5fe102c
variable support for unix sockets in fastcgi_pass and proxy_pass
Igor Sysoev <igor@sysoev.ru>
parents:
2402
diff
changeset
|
301 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
302 struct sockaddr *sockaddr; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
303 socklen_t socklen; |
6785
d1d0dd69a419
Upstream: added the ngx_http_upstream_resolved_t.name field.
Ruslan Ermilov <ru@nginx.com>
parents:
6735
diff
changeset
|
304 ngx_str_t name; |
2422
7af1e5fe102c
variable support for unix sockets in fastcgi_pass and proxy_pass
Igor Sysoev <igor@sysoev.ru>
parents:
2402
diff
changeset
|
305 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
306 ngx_resolver_ctx_t *ctx; |
1658 | 307 } ngx_http_upstream_resolved_t; |
308 | |
309 | |
2386
4ccaa42de633
use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents:
2377
diff
changeset
|
310 typedef void (*ngx_http_upstream_handler_pt)(ngx_http_request_t *r, |
4ccaa42de633
use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents:
2377
diff
changeset
|
311 ngx_http_upstream_t *u); |
4ccaa42de633
use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents:
2377
diff
changeset
|
312 |
4ccaa42de633
use already available r and u instead of ev
Igor Sysoev <igor@sysoev.ru>
parents:
2377
diff
changeset
|
313 |
479 | 314 struct ngx_http_upstream_s { |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
315 ngx_http_upstream_handler_pt read_event_handler; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
316 ngx_http_upstream_handler_pt write_event_handler; |
2377
87b8c44906b5
*) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents:
2285
diff
changeset
|
317 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
318 ngx_peer_connection_t peer; |
479 | 319 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
320 ngx_event_pipe_t *pipe; |
479 | 321 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
322 ngx_chain_t *request_bufs; |
479 | 323 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
324 ngx_output_chain_ctx_t output; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
325 ngx_chain_writer_ctx_t writer; |
479 | 326 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
327 ngx_http_upstream_conf_t *conf; |
6703
edcd9303a4d3
Upstream: introduced u->upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6654
diff
changeset
|
328 ngx_http_upstream_srv_conf_t *upstream; |
5951
610832763648
Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents:
5949
diff
changeset
|
329 #if (NGX_HTTP_CACHE) |
610832763648
Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents:
5949
diff
changeset
|
330 ngx_array_t *caches; |
610832763648
Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents:
5949
diff
changeset
|
331 #endif |
479 | 332 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
333 ngx_http_upstream_headers_in_t headers_in; |
509 | 334 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
335 ngx_http_upstream_resolved_t *resolved; |
1658 | 336 |
5072
7fa7e60a7f66
Proxy: support for connection upgrade (101 Switching Protocols).
Maxim Dounin <mdounin@mdounin.ru>
parents:
5008
diff
changeset
|
337 ngx_buf_t from_client; |
7fa7e60a7f66
Proxy: support for connection upgrade (101 Switching Protocols).
Maxim Dounin <mdounin@mdounin.ru>
parents:
5008
diff
changeset
|
338 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
339 ngx_buf_t buffer; |
4118
dbddec65fdab
Upstream: r->upstream->length type change to off_t.
Maxim Dounin <mdounin@mdounin.ru>
parents:
3976
diff
changeset
|
340 off_t length; |
581 | 341 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
342 ngx_chain_t *out_bufs; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
343 ngx_chain_t *busy_bufs; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
344 ngx_chain_t *free_bufs; |
581 | 345 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
346 ngx_int_t (*input_filter_init)(void *data); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
347 ngx_int_t (*input_filter)(void *data, ssize_t bytes); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
348 void *input_filter_ctx; |
479 | 349 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
350 #if (NGX_HTTP_CACHE) |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
351 ngx_int_t (*create_key)(ngx_http_request_t *r); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
352 #endif |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
353 ngx_int_t (*create_request)(ngx_http_request_t *r); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
354 ngx_int_t (*reinit_request)(ngx_http_request_t *r); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
355 ngx_int_t (*process_header)(ngx_http_request_t *r); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
356 void (*abort_request)(ngx_http_request_t *r); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
357 void (*finalize_request)(ngx_http_request_t *r, |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
358 ngx_int_t rc); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
359 ngx_int_t (*rewrite_redirect)(ngx_http_request_t *r, |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
360 ngx_table_elt_t *h, size_t prefix); |
4464
7bf3b68239a3
Upstream: added callback hook for the "Set-Cookie" header.
Valentin Bartenev <vbart@nginx.com>
parents:
4412
diff
changeset
|
361 ngx_int_t (*rewrite_cookie)(ngx_http_request_t *r, |
7bf3b68239a3
Upstream: added callback hook for the "Set-Cookie" header.
Valentin Bartenev <vbart@nginx.com>
parents:
4412
diff
changeset
|
362 ngx_table_elt_t *h); |
479 | 363 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
364 ngx_msec_t timeout; |
527 | 365 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
366 ngx_http_upstream_state_t *state; |
479 | 367 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
368 ngx_str_t method; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
369 ngx_str_t schema; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
370 ngx_str_t uri; |
555 | 371 |
6735
e38e9c50a40e
Modules compatibility: compatibility with NGX_HTTP_SSL.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6715
diff
changeset
|
372 #if (NGX_HTTP_SSL || NGX_COMPAT) |
5660
7022564a9e0e
Upstream: proxy_ssl_name and proxy_ssl_server_name directives.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5475
diff
changeset
|
373 ngx_str_t ssl_name; |
7022564a9e0e
Upstream: proxy_ssl_name and proxy_ssl_server_name directives.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5475
diff
changeset
|
374 #endif |
7022564a9e0e
Upstream: proxy_ssl_name and proxy_ssl_server_name directives.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5475
diff
changeset
|
375 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
376 ngx_http_cleanup_pt *cleanup; |
569 | 377 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
378 unsigned store:1; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
379 unsigned cacheable:1; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
380 unsigned accel:1; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
381 unsigned ssl:1; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
382 #if (NGX_HTTP_CACHE) |
2952 | 383 unsigned cache_status:3; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
384 #endif |
479 | 385 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
386 unsigned buffering:1; |
4120
42135dd1f0ea
Upstream: keepalive flag.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4118
diff
changeset
|
387 unsigned keepalive:1; |
5072
7fa7e60a7f66
Proxy: support for connection upgrade (101 Switching Protocols).
Maxim Dounin <mdounin@mdounin.ru>
parents:
5008
diff
changeset
|
388 unsigned upgrade:1; |
649 | 389 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
390 unsigned request_sent:1; |
6332
78b4e10b4367
Upstream: don't keep connections on early responses (ticket #669).
Maxim Dounin <mdounin@mdounin.ru>
parents:
6290
diff
changeset
|
391 unsigned request_body_sent:1; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
2422
diff
changeset
|
392 unsigned header_sent:1; |
6715
d200a0fd00b7
Introduced the NGX_COMPAT macro.
Ruslan Ermilov <ru@nginx.com>
parents:
6709
diff
changeset
|
393 |
d200a0fd00b7
Introduced the NGX_COMPAT macro.
Ruslan Ermilov <ru@nginx.com>
parents:
6709
diff
changeset
|
394 NGX_COMPAT_BEGIN(1) |
d200a0fd00b7
Introduced the NGX_COMPAT macro.
Ruslan Ermilov <ru@nginx.com>
parents:
6709
diff
changeset
|
395 NGX_COMPAT_END |
479 | 396 }; |
397 | |
398 | |
2268
33556140681a
*) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents:
2184
diff
changeset
|
399 typedef struct { |
33556140681a
*) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents:
2184
diff
changeset
|
400 ngx_uint_t status; |
33556140681a
*) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents:
2184
diff
changeset
|
401 ngx_uint_t mask; |
33556140681a
*) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents:
2184
diff
changeset
|
402 } ngx_http_upstream_next_t; |
33556140681a
*) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents:
2184
diff
changeset
|
403 |
33556140681a
*) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents:
2184
diff
changeset
|
404 |
4328
d15a00e6d9e6
Added the ngx_http_upstream_param_set_slot().
Valentin Bartenev <vbart@nginx.com>
parents:
4197
diff
changeset
|
405 typedef struct { |
d15a00e6d9e6
Added the ngx_http_upstream_param_set_slot().
Valentin Bartenev <vbart@nginx.com>
parents:
4197
diff
changeset
|
406 ngx_str_t key; |
d15a00e6d9e6
Added the ngx_http_upstream_param_set_slot().
Valentin Bartenev <vbart@nginx.com>
parents:
4197
diff
changeset
|
407 ngx_str_t value; |
d15a00e6d9e6
Added the ngx_http_upstream_param_set_slot().
Valentin Bartenev <vbart@nginx.com>
parents:
4197
diff
changeset
|
408 ngx_uint_t skip_empty; |
d15a00e6d9e6
Added the ngx_http_upstream_param_set_slot().
Valentin Bartenev <vbart@nginx.com>
parents:
4197
diff
changeset
|
409 } ngx_http_upstream_param_t; |
d15a00e6d9e6
Added the ngx_http_upstream_param_set_slot().
Valentin Bartenev <vbart@nginx.com>
parents:
4197
diff
changeset
|
410 |
d15a00e6d9e6
Added the ngx_http_upstream_param_set_slot().
Valentin Bartenev <vbart@nginx.com>
parents:
4197
diff
changeset
|
411 |
5677
3a48775f1535
Upstream: added the "$upstream_cookie_<name>" variables.
Vladimir Homutov <vl@nginx.com>
parents:
5661
diff
changeset
|
412 ngx_int_t ngx_http_upstream_cookie_variable(ngx_http_request_t *r, |
3a48775f1535
Upstream: added the "$upstream_cookie_<name>" variables.
Vladimir Homutov <vl@nginx.com>
parents:
5661
diff
changeset
|
413 ngx_http_variable_value_t *v, uintptr_t data); |
1162 | 414 ngx_int_t ngx_http_upstream_header_variable(ngx_http_request_t *r, |
415 ngx_http_variable_value_t *v, uintptr_t data); | |
416 | |
3006
95972b9e790b
ngx_http_upstream_create() to cleanup the previous upstream after
Igor Sysoev <igor@sysoev.ru>
parents:
2952
diff
changeset
|
417 ngx_int_t ngx_http_upstream_create(ngx_http_request_t *r); |
479 | 418 void ngx_http_upstream_init(ngx_http_request_t *r); |
651 | 419 ngx_http_upstream_srv_conf_t *ngx_http_upstream_add(ngx_conf_t *cf, |
884 | 420 ngx_url_t *u, ngx_uint_t flags); |
3399 | 421 char *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:
3269
diff
changeset
|
422 void *conf); |
4328
d15a00e6d9e6
Added the ngx_http_upstream_param_set_slot().
Valentin Bartenev <vbart@nginx.com>
parents:
4197
diff
changeset
|
423 char *ngx_http_upstream_param_set_slot(ngx_conf_t *cf, ngx_command_t *cmd, |
d15a00e6d9e6
Added the ngx_http_upstream_param_set_slot().
Valentin Bartenev <vbart@nginx.com>
parents:
4197
diff
changeset
|
424 void *conf); |
1701
40d004d95d88
*) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents:
1658
diff
changeset
|
425 ngx_int_t 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:
1658
diff
changeset
|
426 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:
1658
diff
changeset
|
427 ngx_str_t *default_hide_headers, ngx_hash_init_t *hash); |
884 | 428 |
429 | |
430 #define ngx_http_conf_upstream_srv_conf(uscf, module) \ | |
431 uscf->srv_conf[module.ctx_index] | |
509 | 432 |
479 | 433 |
2875
6e1941b321b7
proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents:
2786
diff
changeset
|
434 extern ngx_module_t ngx_http_upstream_module; |
6e1941b321b7
proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents:
2786
diff
changeset
|
435 extern ngx_conf_bitmask_t ngx_http_upstream_cache_method_mask[]; |
3667
12bd9e26fadb
use shared ngx_http_upstream_ignore_headers_masks[]
Igor Sysoev <igor@sysoev.ru>
parents:
3526
diff
changeset
|
436 extern ngx_conf_bitmask_t ngx_http_upstream_ignore_headers_masks[]; |
2875
6e1941b321b7
proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents:
2786
diff
changeset
|
437 |
479 | 438 |
439 #endif /* _NGX_HTTP_UPSTREAM_H_INCLUDED_ */ |