1e18a033bSKonstantin Ananyev
2e18a033bSKonstantin Ananyev/*
3e18a033bSKonstantin Ananyev * Copyright (C) Igor Sysoev
4e18a033bSKonstantin Ananyev * Copyright (C) Nginx, Inc.
5e18a033bSKonstantin Ananyev */
6e18a033bSKonstantin Ananyev
7e18a033bSKonstantin Ananyev
8e18a033bSKonstantin Ananyev#ifndef _NGX_HTTP_CORE_H_INCLUDED_
9e18a033bSKonstantin Ananyev#define _NGX_HTTP_CORE_H_INCLUDED_
10e18a033bSKonstantin Ananyev
11e18a033bSKonstantin Ananyev
12e18a033bSKonstantin Ananyev#include <ngx_config.h>
13e18a033bSKonstantin Ananyev#include <ngx_core.h>
14e18a033bSKonstantin Ananyev#include <ngx_http.h>
15e18a033bSKonstantin Ananyev
16e18a033bSKonstantin Ananyev#if (NGX_THREADS)
17e18a033bSKonstantin Ananyev#include <ngx_thread_pool.h>
18e18a033bSKonstantin Ananyev#elif (NGX_COMPAT)
19e18a033bSKonstantin Ananyevtypedef struct ngx_thread_pool_s  ngx_thread_pool_t;
20e18a033bSKonstantin Ananyev#endif
21e18a033bSKonstantin Ananyev
22e18a033bSKonstantin Ananyev
23e18a033bSKonstantin Ananyev#define NGX_HTTP_GZIP_PROXIED_OFF       0x0002
24e18a033bSKonstantin Ananyev#define NGX_HTTP_GZIP_PROXIED_EXPIRED   0x0004
25e18a033bSKonstantin Ananyev#define NGX_HTTP_GZIP_PROXIED_NO_CACHE  0x0008
26e18a033bSKonstantin Ananyev#define NGX_HTTP_GZIP_PROXIED_NO_STORE  0x0010
27e18a033bSKonstantin Ananyev#define NGX_HTTP_GZIP_PROXIED_PRIVATE   0x0020
28e18a033bSKonstantin Ananyev#define NGX_HTTP_GZIP_PROXIED_NO_LM     0x0040
29e18a033bSKonstantin Ananyev#define NGX_HTTP_GZIP_PROXIED_NO_ETAG   0x0080
30e18a033bSKonstantin Ananyev#define NGX_HTTP_GZIP_PROXIED_AUTH      0x0100
31e18a033bSKonstantin Ananyev#define NGX_HTTP_GZIP_PROXIED_ANY       0x0200
32e18a033bSKonstantin Ananyev
33e18a033bSKonstantin Ananyev
34e18a033bSKonstantin Ananyev#define NGX_HTTP_AIO_OFF                0
35e18a033bSKonstantin Ananyev#define NGX_HTTP_AIO_ON                 1
36e18a033bSKonstantin Ananyev#define NGX_HTTP_AIO_THREADS            2
37e18a033bSKonstantin Ananyev
38e18a033bSKonstantin Ananyev
39e18a033bSKonstantin Ananyev#define NGX_HTTP_SATISFY_ALL            0
40e18a033bSKonstantin Ananyev#define NGX_HTTP_SATISFY_ANY            1
41e18a033bSKonstantin Ananyev
42e18a033bSKonstantin Ananyev
43e18a033bSKonstantin Ananyev#define NGX_HTTP_LINGERING_OFF          0
44e18a033bSKonstantin Ananyev#define NGX_HTTP_LINGERING_ON           1
45e18a033bSKonstantin Ananyev#define NGX_HTTP_LINGERING_ALWAYS       2
46e18a033bSKonstantin Ananyev
47e18a033bSKonstantin Ananyev
48e18a033bSKonstantin Ananyev#define NGX_HTTP_IMS_OFF                0
49e18a033bSKonstantin Ananyev#define NGX_HTTP_IMS_EXACT              1
50e18a033bSKonstantin Ananyev#define NGX_HTTP_IMS_BEFORE             2
51e18a033bSKonstantin Ananyev
52e18a033bSKonstantin Ananyev
53e18a033bSKonstantin Ananyev#define NGX_HTTP_KEEPALIVE_DISABLE_NONE    0x0002
54e18a033bSKonstantin Ananyev#define NGX_HTTP_KEEPALIVE_DISABLE_MSIE6   0x0004
55e18a033bSKonstantin Ananyev#define NGX_HTTP_KEEPALIVE_DISABLE_SAFARI  0x0008
56e18a033bSKonstantin Ananyev
57e18a033bSKonstantin Ananyev
58e18a033bSKonstantin Ananyev#define NGX_HTTP_SERVER_TOKENS_OFF      0
59e18a033bSKonstantin Ananyev#define NGX_HTTP_SERVER_TOKENS_ON       1
60e18a033bSKonstantin Ananyev#define NGX_HTTP_SERVER_TOKENS_BUILD    2
61e18a033bSKonstantin Ananyev
62e18a033bSKonstantin Ananyev
63e18a033bSKonstantin Ananyevtypedef struct ngx_http_location_tree_node_s  ngx_http_location_tree_node_t;
64e18a033bSKonstantin Ananyevtypedef struct ngx_http_core_loc_conf_s  ngx_http_core_loc_conf_t;
65e18a033bSKonstantin Ananyev
66e18a033bSKonstantin Ananyev
67e18a033bSKonstantin Ananyevtypedef struct {
68e18a033bSKonstantin Ananyev    ngx_sockaddr_t             sockaddr;
69e18a033bSKonstantin Ananyev    socklen_t                  socklen;
70e18a033bSKonstantin Ananyev
71e18a033bSKonstantin Ananyev    unsigned                   set:1;
72e18a033bSKonstantin Ananyev    unsigned                   default_server:1;
73e18a033bSKonstantin Ananyev    unsigned                   bind:1;
74e18a033bSKonstantin Ananyev    unsigned                   wildcard:1;
75e18a033bSKonstantin Ananyev    unsigned                   ssl:1;
76e18a033bSKonstantin Ananyev    unsigned                   http2:1;
77e18a033bSKonstantin Ananyev#if (NGX_HAVE_INET6)
78e18a033bSKonstantin Ananyev    unsigned                   ipv6only:1;
79e18a033bSKonstantin Ananyev#endif
80e18a033bSKonstantin Ananyev    unsigned                   deferred_accept:1;
81e18a033bSKonstantin Ananyev    unsigned                   reuseport:1;
82e18a033bSKonstantin Ananyev    unsigned                   so_keepalive:2;
83e18a033bSKonstantin Ananyev    unsigned                   proxy_protocol:1;
84e18a033bSKonstantin Ananyev
85e18a033bSKonstantin Ananyev    int                        backlog;
86e18a033bSKonstantin Ananyev    int                        rcvbuf;
87e18a033bSKonstantin Ananyev    int                        sndbuf;
88e18a033bSKonstantin Ananyev#if (NGX_HAVE_SETFIB)
89e18a033bSKonstantin Ananyev    int                        setfib;
90e18a033bSKonstantin Ananyev#endif
91e18a033bSKonstantin Ananyev#if (NGX_HAVE_TCP_FASTOPEN)
92e18a033bSKonstantin Ananyev    int                        fastopen;
93e18a033bSKonstantin Ananyev#endif
94e18a033bSKonstantin Ananyev#if (NGX_HAVE_KEEPALIVE_TUNABLE)
95e18a033bSKonstantin Ananyev    int                        tcp_keepidle;
96e18a033bSKonstantin Ananyev    int                        tcp_keepintvl;
97e18a033bSKonstantin Ananyev    int                        tcp_keepcnt;
98e18a033bSKonstantin Ananyev#endif
99e18a033bSKonstantin Ananyev
100e18a033bSKonstantin Ananyev#if (NGX_HAVE_DEFERRED_ACCEPT && defined SO_ACCEPTFILTER)
101e18a033bSKonstantin Ananyev    char                      *accept_filter;
102e18a033bSKonstantin Ananyev#endif
103e18a033bSKonstantin Ananyev
104e18a033bSKonstantin Ananyev    u_char                     addr[NGX_SOCKADDR_STRLEN + 1];
105e18a033bSKonstantin Ananyev} ngx_http_listen_opt_t;
106e18a033bSKonstantin Ananyev
107e18a033bSKonstantin Ananyev
108e18a033bSKonstantin Ananyevtypedef enum {
109e18a033bSKonstantin Ananyev    NGX_HTTP_POST_READ_PHASE = 0,
110e18a033bSKonstantin Ananyev
111e18a033bSKonstantin Ananyev    NGX_HTTP_SERVER_REWRITE_PHASE,
112e18a033bSKonstantin Ananyev
113e18a033bSKonstantin Ananyev    NGX_HTTP_FIND_CONFIG_PHASE,
114e18a033bSKonstantin Ananyev    NGX_HTTP_REWRITE_PHASE,
115e18a033bSKonstantin Ananyev    NGX_HTTP_POST_REWRITE_PHASE,
116e18a033bSKonstantin Ananyev
117e18a033bSKonstantin Ananyev    NGX_HTTP_PREACCESS_PHASE,
118e18a033bSKonstantin Ananyev
119e18a033bSKonstantin Ananyev    NGX_HTTP_ACCESS_PHASE,
120e18a033bSKonstantin Ananyev    NGX_HTTP_POST_ACCESS_PHASE,
121e18a033bSKonstantin Ananyev
122e18a033bSKonstantin Ananyev    NGX_HTTP_TRY_FILES_PHASE,
123e18a033bSKonstantin Ananyev    NGX_HTTP_CONTENT_PHASE,
124e18a033bSKonstantin Ananyev
125e18a033bSKonstantin Ananyev    NGX_HTTP_LOG_PHASE
126e18a033bSKonstantin Ananyev} ngx_http_phases;
127e18a033bSKonstantin Ananyev
128e18a033bSKonstantin Ananyevtypedef struct ngx_http_phase_handler_s  ngx_http_phase_handler_t;
129e18a033bSKonstantin Ananyev
130e18a033bSKonstantin Ananyevtypedef ngx_int_t (*ngx_http_phase_handler_pt)(ngx_http_request_t *r,
131e18a033bSKonstantin Ananyev    ngx_http_phase_handler_t *ph);
132e18a033bSKonstantin Ananyev
133e18a033bSKonstantin Ananyevstruct ngx_http_phase_handler_s {
134e18a033bSKonstantin Ananyev    ngx_http_phase_handler_pt  checker;
135e18a033bSKonstantin Ananyev    ngx_http_handler_pt        handler;
136e18a033bSKonstantin Ananyev    ngx_uint_t                 next;
137e18a033bSKonstantin Ananyev};
138e18a033bSKonstantin Ananyev
139e18a033bSKonstantin Ananyev
140e18a033bSKonstantin Ananyevtypedef struct {
141e18a033bSKonstantin Ananyev    ngx_http_phase_handler_t  *handlers;
142e18a033bSKonstantin Ananyev    ngx_uint_t                 server_rewrite_index;
143e18a033bSKonstantin Ananyev    ngx_uint_t                 location_rewrite_index;
144e18a033bSKonstantin Ananyev} ngx_http_phase_engine_t;
145e18a033bSKonstantin Ananyev
146e18a033bSKonstantin Ananyev
147e18a033bSKonstantin Ananyevtypedef struct {
148e18a033bSKonstantin Ananyev    ngx_array_t                handlers;
149e18a033bSKonstantin Ananyev} ngx_http_phase_t;
150e18a033bSKonstantin Ananyev
151e18a033bSKonstantin Ananyev
152e18a033bSKonstantin Ananyevtypedef struct {
153e18a033bSKonstantin Ananyev    ngx_array_t                servers;         /* ngx_http_core_srv_conf_t */
154e18a033bSKonstantin Ananyev
155e18a033bSKonstantin Ananyev    ngx_http_phase_engine_t    phase_engine;
156e18a033bSKonstantin Ananyev
157e18a033bSKonstantin Ananyev    ngx_hash_t                 headers_in_hash;
158e18a033bSKonstantin Ananyev
159e18a033bSKonstantin Ananyev    ngx_hash_t                 variables_hash;
160e18a033bSKonstantin Ananyev
161e18a033bSKonstantin Ananyev    ngx_array_t                variables;         /* ngx_http_variable_t */
162e18a033bSKonstantin Ananyev    ngx_array_t                prefix_variables;  /* ngx_http_variable_t */
163e18a033bSKonstantin Ananyev    ngx_uint_t                 ncaptures;
164e18a033bSKonstantin Ananyev
165e18a033bSKonstantin Ananyev    ngx_uint_t                 server_names_hash_max_size;
166e18a033bSKonstantin Ananyev    ngx_uint_t                 server_names_hash_bucket_size;
167e18a033bSKonstantin Ananyev
168e18a033bSKonstantin Ananyev    ngx_uint_t                 variables_hash_max_size;
169e18a033bSKonstantin Ananyev    ngx_uint_t                 variables_hash_bucket_size;
170e18a033bSKonstantin Ananyev
171e18a033bSKonstantin Ananyev    ngx_hash_keys_arrays_t    *variables_keys;
172e18a033bSKonstantin Ananyev
173e18a033bSKonstantin Ananyev    ngx_array_t               *ports;
174e18a033bSKonstantin Ananyev
175e18a033bSKonstantin Ananyev    ngx_uint_t                 try_files;       /* unsigned  try_files:1 */
176e18a033bSKonstantin Ananyev
177e18a033bSKonstantin Ananyev    ngx_http_phase_t           phases[NGX_HTTP_LOG_PHASE + 1];
178e18a033bSKonstantin Ananyev} ngx_http_core_main_conf_t;
179e18a033bSKonstantin Ananyev
180e18a033bSKonstantin Ananyev
181e18a033bSKonstantin Ananyevtypedef struct {
182e18a033bSKonstantin Ananyev    /* array of the ngx_http_server_name_t, "server_name" directive */
183e18a033bSKonstantin Ananyev    ngx_array_t                 server_names;
184e18a033bSKonstantin Ananyev
185e18a033bSKonstantin Ananyev    /* server ctx */
186e18a033bSKonstantin Ananyev    ngx_http_conf_ctx_t        *ctx;
187e18a033bSKonstantin Ananyev
188e18a033bSKonstantin Ananyev    ngx_str_t                   server_name;
189e18a033bSKonstantin Ananyev
190e18a033bSKonstantin Ananyev    size_t                      connection_pool_size;
191e18a033bSKonstantin Ananyev    size_t                      request_pool_size;
192e18a033bSKonstantin Ananyev    size_t                      client_header_buffer_size;
193e18a033bSKonstantin Ananyev
194e18a033bSKonstantin Ananyev    ngx_bufs_t                  large_client_header_buffers;
195e18a033bSKonstantin Ananyev
196e18a033bSKonstantin Ananyev    ngx_msec_t                  client_header_timeout;
197e18a033bSKonstantin Ananyev
198e18a033bSKonstantin Ananyev    ngx_flag_t                  ignore_invalid_headers;
199e18a033bSKonstantin Ananyev    ngx_flag_t                  merge_slashes;
200e18a033bSKonstantin Ananyev    ngx_flag_t                  underscores_in_headers;
201e18a033bSKonstantin Ananyev
202e18a033bSKonstantin Ananyev    unsigned                    listen:1;
203e18a033bSKonstantin Ananyev#if (NGX_PCRE)
204e18a033bSKonstantin Ananyev    unsigned                    captures:1;
205e18a033bSKonstantin Ananyev#endif
206e18a033bSKonstantin Ananyev
207e18a033bSKonstantin Ananyev    ngx_http_core_loc_conf_t  **named_locations;
208e18a033bSKonstantin Ananyev} ngx_http_core_srv_conf_t;
209e18a033bSKonstantin Ananyev
210e18a033bSKonstantin Ananyev
211e18a033bSKonstantin Ananyev/* list of structures to find core_srv_conf quickly at run time */
212e18a033bSKonstantin Ananyev
213e18a033bSKonstantin Ananyev
214e18a033bSKonstantin Ananyevtypedef struct {
215e18a033bSKonstantin Ananyev#if (NGX_PCRE)
216e18a033bSKonstantin Ananyev    ngx_http_regex_t          *regex;
217e18a033bSKonstantin Ananyev#endif
218e18a033bSKonstantin Ananyev    ngx_http_core_srv_conf_t  *server;   /* virtual name server conf */
219e18a033bSKonstantin Ananyev    ngx_str_t                  name;
220e18a033bSKonstantin Ananyev} ngx_http_server_name_t;
221e18a033bSKonstantin Ananyev
222e18a033bSKonstantin Ananyev
223e18a033bSKonstantin Ananyevtypedef struct {
224e18a033bSKonstantin Ananyev    ngx_hash_combined_t        names;
225e18a033bSKonstantin Ananyev
226e18a033bSKonstantin Ananyev    ngx_uint_t                 nregex;
227e18a033bSKonstantin Ananyev    ngx_http_server_name_t    *regex;
228e18a033bSKonstantin Ananyev} ngx_http_virtual_names_t;
229e18a033bSKonstantin Ananyev
230e18a033bSKonstantin Ananyev
231e18a033bSKonstantin Ananyevstruct ngx_http_addr_conf_s {
232e18a033bSKonstantin Ananyev    /* the default server configuration for this address:port */
233e18a033bSKonstantin Ananyev    ngx_http_core_srv_conf_t  *default_server;
234e18a033bSKonstantin Ananyev
235e18a033bSKonstantin Ananyev    ngx_http_virtual_names_t  *virtual_names;
236e18a033bSKonstantin Ananyev
237e18a033bSKonstantin Ananyev    unsigned                   ssl:1;
238e18a033bSKonstantin Ananyev    unsigned                   http2:1;
239e18a033bSKonstantin Ananyev    unsigned                   proxy_protocol:1;
240e18a033bSKonstantin Ananyev};
241e18a033bSKonstantin Ananyev
242e18a033bSKonstantin Ananyev
243e18a033bSKonstantin Ananyevtypedef struct {
244e18a033bSKonstantin Ananyev    in_addr_t                  addr;
245e18a033bSKonstantin Ananyev    ngx_http_addr_conf_t       conf;
246e18a033bSKonstantin Ananyev} ngx_http_in_addr_t;
247e18a033bSKonstantin Ananyev
248e18a033bSKonstantin Ananyev
249e18a033bSKonstantin Ananyev#if (NGX_HAVE_INET6)
250e18a033bSKonstantin Ananyev
251e18a033bSKonstantin Ananyevtypedef struct {
252e18a033bSKonstantin Ananyev    struct in6_addr            addr6;
253e18a033bSKonstantin Ananyev    ngx_http_addr_conf_t       conf;
254e18a033bSKonstantin Ananyev} ngx_http_in6_addr_t;
255e18a033bSKonstantin Ananyev
256e18a033bSKonstantin Ananyev#endif
257e18a033bSKonstantin Ananyev
258e18a033bSKonstantin Ananyev
259e18a033bSKonstantin Ananyevtypedef struct {
260e18a033bSKonstantin Ananyev    /* ngx_http_in_addr_t or ngx_http_in6_addr_t */
261e18a033bSKonstantin Ananyev    void                      *addrs;
262e18a033bSKonstantin Ananyev    ngx_uint_t                 naddrs;
263e18a033bSKonstantin Ananyev} ngx_http_port_t;
264e18a033bSKonstantin Ananyev
265e18a033bSKonstantin Ananyev
266e18a033bSKonstantin Ananyevtypedef struct {
267e18a033bSKonstantin Ananyev    ngx_int_t                  family;
268e18a033bSKonstantin Ananyev    in_port_t                  port;
269e18a033bSKonstantin Ananyev    ngx_array_t                addrs;     /* array of ngx_http_conf_addr_t */
270e18a033bSKonstantin Ananyev} ngx_http_conf_port_t;
271e18a033bSKonstantin Ananyev
272e18a033bSKonstantin Ananyev
273e18a033bSKonstantin Ananyevtypedef struct {
274e18a033bSKonstantin Ananyev    ngx_http_listen_opt_t      opt;
275e18a033bSKonstantin Ananyev
276e18a033bSKonstantin Ananyev    ngx_hash_t                 hash;
277e18a033bSKonstantin Ananyev    ngx_hash_wildcard_t       *wc_head;
278e18a033bSKonstantin Ananyev    ngx_hash_wildcard_t       *wc_tail;
279e18a033bSKonstantin Ananyev
280e18a033bSKonstantin Ananyev#if (NGX_PCRE)
281e18a033bSKonstantin Ananyev    ngx_uint_t                 nregex;
282e18a033bSKonstantin Ananyev    ngx_http_server_name_t    *regex;
283e18a033bSKonstantin Ananyev#endif
284e18a033bSKonstantin Ananyev
285e18a033bSKonstantin Ananyev    /* the default server configuration for this address:port */
286e18a033bSKonstantin Ananyev    ngx_http_core_srv_conf_t  *default_server;
287e18a033bSKonstantin Ananyev    ngx_array_t                servers;  /* array of ngx_http_core_srv_conf_t */
288e18a033bSKonstantin Ananyev} ngx_http_conf_addr_t;
289e18a033bSKonstantin Ananyev
290e18a033bSKonstantin Ananyev
291e18a033bSKonstantin Ananyevtypedef struct {
292e18a033bSKonstantin Ananyev    ngx_int_t                  status;
293e18a033bSKonstantin Ananyev    ngx_int_t                  overwrite;
294e18a033bSKonstantin Ananyev    ngx_http_complex_value_t   value;
295e18a033bSKonstantin Ananyev    ngx_str_t                  args;
296e18a033bSKonstantin Ananyev} ngx_http_err_page_t;
297e18a033bSKonstantin Ananyev
298e18a033bSKonstantin Ananyev
299e18a033bSKonstantin Ananyevtypedef struct {
300e18a033bSKonstantin Ananyev    ngx_array_t               *lengths;
301e18a033bSKonstantin Ananyev    ngx_array_t               *values;
302e18a033bSKonstantin Ananyev    ngx_str_t                  name;
303e18a033bSKonstantin Ananyev
304e18a033bSKonstantin Ananyev    unsigned                   code:10;
305e18a033bSKonstantin Ananyev    unsigned                   test_dir:1;
306e18a033bSKonstantin Ananyev} ngx_http_try_file_t;
307e18a033bSKonstantin Ananyev
308e18a033bSKonstantin Ananyev
309e18a033bSKonstantin Ananyevstruct ngx_http_core_loc_conf_s {
310e18a033bSKonstantin Ananyev    ngx_str_t     name;          /* location name */
311e18a033bSKonstantin Ananyev
312e18a033bSKonstantin Ananyev#if (NGX_PCRE)
313e18a033bSKonstantin Ananyev    ngx_http_regex_t  *regex;
314e18a033bSKonstantin Ananyev#endif
315e18a033bSKonstantin Ananyev
316e18a033bSKonstantin Ananyev    unsigned      noname:1;   /* "if () {}" block or limit_except */
317e18a033bSKonstantin Ananyev    unsigned      lmt_excpt:1;
318e18a033bSKonstantin Ananyev    unsigned      named:1;
319e18a033bSKonstantin Ananyev
320e18a033bSKonstantin Ananyev    unsigned      exact_match:1;
321e18a033bSKonstantin Ananyev    unsigned      noregex:1;
322e18a033bSKonstantin Ananyev
323e18a033bSKonstantin Ananyev    unsigned      auto_redirect:1;
324e18a033bSKonstantin Ananyev#if (NGX_HTTP_GZIP)
325e18a033bSKonstantin Ananyev    unsigned      gzip_disable_msie6:2;
326e18a033bSKonstantin Ananyev    unsigned      gzip_disable_degradation:2;
327e18a033bSKonstantin Ananyev#endif
328e18a033bSKonstantin Ananyev
329e18a033bSKonstantin Ananyev    ngx_http_location_tree_node_t   *static_locations;
330e18a033bSKonstantin Ananyev#if (NGX_PCRE)
331e18a033bSKonstantin Ananyev    ngx_http_core_loc_conf_t       **regex_locations;
332e18a033bSKonstantin Ananyev#endif
333e18a033bSKonstantin Ananyev
334e18a033bSKonstantin Ananyev    /* pointer to the modules' loc_conf */
335e18a033bSKonstantin Ananyev    void        **loc_conf;
336e18a033bSKonstantin Ananyev
337e18a033bSKonstantin Ananyev    uint32_t      limit_except;
338e18a033bSKonstantin Ananyev    void        **limit_except_loc_conf;
339e18a033bSKonstantin Ananyev
340e18a033bSKonstantin Ananyev    ngx_http_handler_pt  handler;
341e18a033bSKonstantin Ananyev
342e18a033bSKonstantin Ananyev    /* location name length for inclusive location with inherited alias */
343e18a033bSKonstantin Ananyev    size_t        alias;
344e18a033bSKonstantin Ananyev    ngx_str_t     root;                    /* root, alias */
345e18a033bSKonstantin Ananyev    ngx_str_t     post_action;
346e18a033bSKonstantin Ananyev
347e18a033bSKonstantin Ananyev    ngx_array_t  *root_lengths;
348e18a033bSKonstantin Ananyev    ngx_array_t  *root_values;
349e18a033bSKonstantin Ananyev
350e18a033bSKonstantin Ananyev    ngx_array_t  *types;
351e18a033bSKonstantin Ananyev    ngx_hash_t    types_hash;
352e18a033bSKonstantin Ananyev    ngx_str_t     default_type;
353e18a033bSKonstantin Ananyev
354e18a033bSKonstantin Ananyev    off_t         client_max_body_size;    /* client_max_body_size */
355e18a033bSKonstantin Ananyev    off_t         directio;                /* directio */
356e18a033bSKonstantin Ananyev    off_t         directio_alignment;      /* directio_alignment */
357e18a033bSKonstantin Ananyev
358e18a033bSKonstantin Ananyev    size_t        client_body_buffer_size; /* client_body_buffer_size */
359e18a033bSKonstantin Ananyev    size_t        send_lowat;              /* send_lowat */
360e18a033bSKonstantin Ananyev    size_t        postpone_output;         /* postpone_output */
361e18a033bSKonstantin Ananyev    size_t        limit_rate;              /* limit_rate */
362e18a033bSKonstantin Ananyev    size_t        limit_rate_after;        /* limit_rate_after */
363e18a033bSKonstantin Ananyev    size_t        sendfile_max_chunk;      /* sendfile_max_chunk */
364e18a033bSKonstantin Ananyev    size_t        read_ahead;              /* read_ahead */
365e18a033bSKonstantin Ananyev
366e18a033bSKonstantin Ananyev    ngx_msec_t    client_body_timeout;     /* client_body_timeout */
367e18a033bSKonstantin Ananyev    ngx_msec_t    send_timeout;            /* send_timeout */
368e18a033bSKonstantin Ananyev    ngx_msec_t    keepalive_timeout;       /* keepalive_timeout */
369e18a033bSKonstantin Ananyev    ngx_msec_t    lingering_time;          /* lingering_time */
370e18a033bSKonstantin Ananyev    ngx_msec_t    lingering_timeout;       /* lingering_timeout */
371e18a033bSKonstantin Ananyev    ngx_msec_t    resolver_timeout;        /* resolver_timeout */
372e18a033bSKonstantin Ananyev
373e18a033bSKonstantin Ananyev    ngx_resolver_t  *resolver;             /* resolver */
374e18a033bSKonstantin Ananyev
375e18a033bSKonstantin Ananyev    time_t        keepalive_header;        /* keepalive_timeout */
376e18a033bSKonstantin Ananyev
377e18a033bSKonstantin Ananyev    ngx_uint_t    keepalive_requests;      /* keepalive_requests */
378e18a033bSKonstantin Ananyev    ngx_uint_t    keepalive_disable;       /* keepalive_disable */
379e18a033bSKonstantin Ananyev    ngx_uint_t    satisfy;                 /* satisfy */
380e18a033bSKonstantin Ananyev    ngx_uint_t    lingering_close;         /* lingering_close */
381e18a033bSKonstantin Ananyev    ngx_uint_t    if_modified_since;       /* if_modified_since */
382e18a033bSKonstantin Ananyev    ngx_uint_t    max_ranges;              /* max_ranges */
383e18a033bSKonstantin Ananyev    ngx_uint_t    client_body_in_file_only; /* client_body_in_file_only */
384e18a033bSKonstantin Ananyev
385e18a033bSKonstantin Ananyev    ngx_flag_t    client_body_in_single_buffer;
386e18a033bSKonstantin Ananyev                                           /* client_body_in_singe_buffer */
387e18a033bSKonstantin Ananyev    ngx_flag_t    internal;                /* internal */
388e18a033bSKonstantin Ananyev    ngx_flag_t    sendfile;                /* sendfile */
389e18a033bSKonstantin Ananyev    ngx_flag_t    aio;                     /* aio */
390e18a033bSKonstantin Ananyev    ngx_flag_t    aio_write;               /* aio_write */
391e18a033bSKonstantin Ananyev    ngx_flag_t    tcp_nopush;              /* tcp_nopush */
392e18a033bSKonstantin Ananyev    ngx_flag_t    tcp_nodelay;             /* tcp_nodelay */
393e18a033bSKonstantin Ananyev    ngx_flag_t    reset_timedout_connection; /* reset_timedout_connection */
394e18a033bSKonstantin Ananyev    ngx_flag_t    absolute_redirect;       /* absolute_redirect */
395e18a033bSKonstantin Ananyev    ngx_flag_t    server_name_in_redirect; /* server_name_in_redirect */
396e18a033bSKonstantin Ananyev    ngx_flag_t    port_in_redirect;        /* port_in_redirect */
397e18a033bSKonstantin Ananyev    ngx_flag_t    msie_padding;            /* msie_padding */
398e18a033bSKonstantin Ananyev    ngx_flag_t    msie_refresh;            /* msie_refresh */
399e18a033bSKonstantin Ananyev    ngx_flag_t    log_not_found;           /* log_not_found */
400e18a033bSKonstantin Ananyev    ngx_flag_t    log_subrequest;          /* log_subrequest */
401e18a033bSKonstantin Ananyev    ngx_flag_t    recursive_error_pages;   /* recursive_error_pages */
402e18a033bSKonstantin Ananyev    ngx_uint_t    server_tokens;           /* server_tokens */
403e18a033bSKonstantin Ananyev    ngx_flag_t    chunked_transfer_encoding; /* chunked_transfer_encoding */
404e18a033bSKonstantin Ananyev    ngx_flag_t    etag;                    /* etag */
405e18a033bSKonstantin Ananyev
406e18a033bSKonstantin Ananyev#if (NGX_HTTP_GZIP)
407e18a033bSKonstantin Ananyev    ngx_flag_t    gzip_vary;               /* gzip_vary */
408e18a033bSKonstantin Ananyev
409e18a033bSKonstantin Ananyev    ngx_uint_t    gzip_http_version;       /* gzip_http_version */
410e18a033bSKonstantin Ananyev    ngx_uint_t    gzip_proxied;            /* gzip_proxied */
411e18a033bSKonstantin Ananyev
412e18a033bSKonstantin Ananyev#if (NGX_PCRE)
413e18a033bSKonstantin Ananyev    ngx_array_t  *gzip_disable;            /* gzip_disable */
414e18a033b