~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Linux Cross Reference
Nginx/http/ngx_http_upstream.h

Version: ~ [ nginx-0.8.20 ] ~ [ nginx-0.7.62 ] ~ [ nginx-0.6.39 ] ~

  1 
  2 /*
  3  * Copyright (C) Igor Sysoev
  4  */
  5 
  6 
  7 #ifndef _NGX_HTTP_UPSTREAM_H_INCLUDED_
  8 #define _NGX_HTTP_UPSTREAM_H_INCLUDED_
  9 
 10 
 11 #include <ngx_config.h>
 12 #include <ngx_core.h>
 13 #include <ngx_event.h>
 14 #include <ngx_event_connect.h>
 15 #include <ngx_event_pipe.h>
 16 #include <ngx_http.h>
 17 
 18 
 19 #define NGX_HTTP_UPSTREAM_FT_ERROR           0x00000002
 20 #define NGX_HTTP_UPSTREAM_FT_TIMEOUT         0x00000004
 21 #define NGX_HTTP_UPSTREAM_FT_INVALID_HEADER  0x00000008
 22 #define NGX_HTTP_UPSTREAM_FT_HTTP_500        0x00000010
 23 #define NGX_HTTP_UPSTREAM_FT_HTTP_502        0x00000020
 24 #define NGX_HTTP_UPSTREAM_FT_HTTP_503        0x00000040
 25 #define NGX_HTTP_UPSTREAM_FT_HTTP_504        0x00000080
 26 #define NGX_HTTP_UPSTREAM_FT_HTTP_404        0x00000100
 27 #define NGX_HTTP_UPSTREAM_FT_UPDATING        0x00000200
 28 #define NGX_HTTP_UPSTREAM_FT_BUSY_LOCK       0x00000400
 29 #define NGX_HTTP_UPSTREAM_FT_MAX_WAITING     0x00000800
 30 #define NGX_HTTP_UPSTREAM_FT_NOLIVE          0x40000000
 31 #define NGX_HTTP_UPSTREAM_FT_OFF             0x80000000
 32 
 33 #define NGX_HTTP_UPSTREAM_FT_STATUS          (NGX_HTTP_UPSTREAM_FT_HTTP_500  \
 34                                              |NGX_HTTP_UPSTREAM_FT_HTTP_502  \
 35                                              |NGX_HTTP_UPSTREAM_FT_HTTP_503  \
 36                                              |NGX_HTTP_UPSTREAM_FT_HTTP_504  \
 37                                              |NGX_HTTP_UPSTREAM_FT_HTTP_404)
 38 
 39 #define NGX_HTTP_UPSTREAM_INVALID_HEADER     40
 40 
 41 
 42 #define NGX_HTTP_UPSTREAM_IGN_XA_REDIRECT    0x00000002
 43 #define NGX_HTTP_UPSTREAM_IGN_XA_EXPIRES     0x00000004
 44 #define NGX_HTTP_UPSTREAM_IGN_EXPIRES        0x00000008
 45 #define NGX_HTTP_UPSTREAM_IGN_CACHE_CONTROL  0x00000010
 46 
 47 
 48 typedef struct {
 49     ngx_msec_t                       bl_time;
 50     ngx_uint_t                       bl_state;
 51 
 52     ngx_uint_t                       status;
 53     time_t                           response_sec;
 54     ngx_uint_t                       response_msec;
 55     off_t                           response_length;
 56 
 57     ngx_str_t                       *peer;
 58 } ngx_http_upstream_state_t;
 59 
 60 
 61 typedef struct {
 62     ngx_hash_t                       headers_in_hash;
 63     ngx_array_t                      upstreams;
 64                                              /* ngx_http_upstream_srv_conf_t */
 65 } ngx_http_upstream_main_conf_t;
 66 
 67 typedef struct ngx_http_upstream_srv_conf_s  ngx_http_upstream_srv_conf_t;
 68 
 69 typedef ngx_int_t (*ngx_http_upstream_init_pt)(ngx_conf_t *cf,
 70     ngx_http_upstream_srv_conf_t *us);
 71 typedef ngx_int_t (*ngx_http_upstream_init_peer_pt)(ngx_http_request_t *r,
 72     ngx_http_upstream_srv_conf_t *us);
 73 
 74 
 75 typedef struct {
 76     ngx_http_upstream_init_pt        init_upstream;
 77     ngx_http_upstream_init_peer_pt   init;
 78     void                            *data;
 79 } ngx_http_upstream_peer_t;
 80 
 81 
 82 typedef struct {
 83     ngx_peer_addr_t                 *addrs;
 84     ngx_uint_t                       naddrs;
 85     ngx_uint_t                       weight;
 86     ngx_uint_t                       max_fails;
 87     time_t                           fail_timeout;
 88 
 89     unsigned                         down:1;
 90     unsigned                         backup:1;
 91 } ngx_http_upstream_server_t;
 92 
 93 
 94 #define NGX_HTTP_UPSTREAM_CREATE        0x0001
 95 #define NGX_HTTP_UPSTREAM_WEIGHT        0x0002
 96 #define NGX_HTTP_UPSTREAM_MAX_FAILS     0x0004
 97 #define NGX_HTTP_UPSTREAM_FAIL_TIMEOUT  0x0008
 98 #define NGX_HTTP_UPSTREAM_DOWN          0x0010
 99 #define NGX_HTTP_UPSTREAM_BACKUP        0x0020
100 
101 
102 struct ngx_http_upstream_srv_conf_s {
103     ngx_http_upstream_peer_t         peer;
104     void                           **srv_conf;
105 
106     ngx_array_t                     *servers;  /* ngx_http_upstream_server_t */
107 
108     ngx_uint_t                       flags;
109     ngx_str_t                        host;
110     u_char                          *file_name;
111     ngx_uint_t                       line;
112     in_port_t                        port;
113     in_port_t                        default_port;
114 };
115 
116 
117 typedef struct {
118     ngx_http_upstream_srv_conf_t    *upstream;
119 
120     ngx_msec_t                       connect_timeout;
121     ngx_msec_t                       send_timeout;
122     ngx_msec_t                       read_timeout;
123     ngx_msec_t                       timeout;
124 
125     size_t                           send_lowat;
126     size_t                           buffer_size;
127 
128     size_t                           busy_buffers_size;
129     size_t                           max_temp_file_size;
130     size_t                           temp_file_write_size;
131 
132     size_t                           busy_buffers_size_conf;
133     size_t                           max_temp_file_size_conf;
134     size_t                           temp_file_write_size_conf;
135 
136     ngx_bufs_t                       bufs;
137 
138     ngx_uint_t                       ignore_headers;
139     ngx_uint_t                       next_upstream;
140     ngx_uint_t                       store_access;
141     ngx_flag_t                       buffering;
142     ngx_flag_t                       pass_request_headers;
143     ngx_flag_t                       pass_request_body;
144 
145     ngx_flag_t                       ignore_client_abort;
146     ngx_flag_t                       intercept_errors;
147     ngx_flag_t                       cyclic_temp_file;
148 
149     ngx_path_t                      *temp_path;
150 
151     ngx_hash_t                       hide_headers_hash;
152     ngx_array_t                     *hide_headers;
153     ngx_array_t                     *pass_headers;
154 
155 #if (NGX_HTTP_CACHE)
156     ngx_shm_zone_t                  *cache;
157 
158     ngx_uint_t                       cache_min_uses;
159     ngx_uint_t                       cache_use_stale;
160     ngx_uint_t                       cache_methods;
161 
162     ngx_array_t                     *cache_valid;
163 #endif
164 
165     ngx_array_t                     *store_lengths;
166     ngx_array_t                     *store_values;
167 
168     signed                           store:2;
169     unsigned                         intercept_404:1;
170     unsigned                         change_buffering:1;
171 
172 #if (NGX_HTTP_SSL)
173     ngx_ssl_t                       *ssl;
174     ngx_flag_t                       ssl_session_reuse;
175 #endif
176 
177 } ngx_http_upstream_conf_t;
178 
179 
180 typedef struct {
181     ngx_str_t                        name;
182     ngx_http_header_handler_pt       handler;
183     ngx_uint_t                       offset;
184     ngx_http_header_handler_pt       copy_handler;
185     ngx_uint_t                       conf;
186     ngx_uint_t                       redirect;  /* unsigned   redirect:1; */
187 } ngx_http_upstream_header_t;
188 
189 
190 typedef struct {
191     ngx_list_t                       headers;
192 
193     ngx_uint_t                       status_n;
194     ngx_str_t                        status_line;
195 
196     ngx_table_elt_t                 *status;
197     ngx_table_elt_t                 *date;
198     ngx_table_elt_t                 *server;
199     ngx_table_elt_t                 *connection;
200 
201     ngx_table_elt_t                 *expires;
202     ngx_table_elt_t                 *etag;
203     ngx_table_elt_t                 *x_accel_expires;
204     ngx_table_elt_t                 *x_accel_redirect;
205     ngx_table_elt_t                 *x_accel_limit_rate;
206 
207     ngx_table_elt_t                 *content_type;
208     ngx_table_elt_t                 *content_length;
209 
210     ngx_table_elt_t                 *last_modified;
211     ngx_table_elt_t                 *location;
212     ngx_table_elt_t                 *accept_ranges;
213     ngx_table_elt_t                 *www_authenticate;
214 
215 #if (NGX_HTTP_GZIP)
216     ngx_table_elt_t                 *content_encoding;
217 #endif
218 
219     off_t                            content_length_n;
220 
221     ngx_array_t                      cache_control;
222 } ngx_http_upstream_headers_in_t;
223 
224 
225 typedef struct {
226     ngx_str_t                        host;
227     in_port_t                        port;
228     ngx_uint_t                       no_port; /* unsigned no_port:1 */
229 
230     ngx_uint_t                       naddrs;
231     in_addr_t                       *addrs;
232 
233     struct sockaddr                 *sockaddr;
234     socklen_t                        socklen;
235 
236     ngx_resolver_ctx_t              *ctx;
237 } ngx_http_upstream_resolved_t;
238 
239 
240 typedef void (*ngx_http_upstream_handler_pt)(ngx_http_request_t *r,
241     ngx_http_upstream_t *u);
242 
243 
244 struct ngx_http_upstream_s {
245     ngx_http_upstream_handler_pt     read_event_handler;
246     ngx_http_upstream_handler_pt     write_event_handler;
247 
248     ngx_peer_connection_t            peer;
249 
250     ngx_event_pipe_t                *pipe;
251 
252     ngx_chain_t                     *request_bufs;
253 
254     ngx_output_chain_ctx_t           output;
255     ngx_chain_writer_ctx_t           writer;
256 
257     ngx_http_upstream_conf_t        *conf;
258 
259     ngx_http_upstream_headers_in_t   headers_in;
260 
261     ngx_http_upstream_resolved_t    *resolved;
262 
263     ngx_buf_t                        buffer;
264     size_t                           length;
265 
266     ngx_chain_t                     *out_bufs;
267     ngx_chain_t                     *busy_bufs;
268     ngx_chain_t                     *free_bufs;
269 
270     ngx_int_t                      (*input_filter_init)(void *data);
271     ngx_int_t                      (*input_filter)(void *data, ssize_t bytes);
272     void                            *input_filter_ctx;
273 
274 #if (NGX_HTTP_CACHE)
275     ngx_int_t                      (*create_key)(ngx_http_request_t *r);
276 #endif
277     ngx_int_t                      (*create_request)(ngx_http_request_t *r);
278     ngx_int_t                      (*reinit_request)(ngx_http_request_t *r);
279     ngx_int_t                      (*process_header)(ngx_http_request_t *r);
280     void                           (*abort_request)(ngx_http_request_t *r);
281     void                           (*finalize_request)(ngx_http_request_t *r,
282                                          ngx_int_t rc);
283     ngx_int_t                      (*rewrite_redirect)(ngx_http_request_t *r,
284                                          ngx_table_elt_t *h, size_t prefix);
285 
286     ngx_msec_t                       timeout;
287 
288     ngx_http_upstream_state_t       *state;
289 
290     ngx_str_t                        method;
291     ngx_str_t                        schema;
292     ngx_str_t                        uri;
293 
294     ngx_http_cleanup_pt             *cleanup;
295 
296     unsigned                         store:1;
297     unsigned                         cacheable:1;
298     unsigned                         accel:1;
299     unsigned                         ssl:1;
300 #if (NGX_HTTP_CACHE)
301     unsigned                         cache_status:3;
302 #endif
303 
304     unsigned                         buffering:1;
305 
306     unsigned                         request_sent:1;
307     unsigned                         header_sent:1;
308 };
309 
310 
311 typedef struct {
312     ngx_uint_t                      status;
313     ngx_uint_t                      mask;
314 } ngx_http_upstream_next_t;
315 
316 
317 ngx_int_t ngx_http_upstream_header_variable(ngx_http_request_t *r,
318     ngx_http_variable_value_t *v, uintptr_t data);
319 
320 ngx_int_t ngx_http_upstream_create(ngx_http_request_t *r);
321 void ngx_http_upstream_init(ngx_http_request_t *r);
322 ngx_http_upstream_srv_conf_t *ngx_http_upstream_add(ngx_conf_t *cf,
323     ngx_url_t *u, ngx_uint_t flags);
324 ngx_int_t ngx_http_upstream_hide_headers_hash(ngx_conf_t *cf,
325     ngx_http_upstream_conf_t *conf, ngx_http_upstream_conf_t *prev,
326     ngx_str_t *default_hide_headers, ngx_hash_init_t *hash);
327 
328 
329 #define ngx_http_conf_upstream_srv_conf(uscf, module)                         \
330     uscf->srv_conf[module.ctx_index]
331 
332 
333 extern ngx_module_t        ngx_http_upstream_module;
334 extern ngx_conf_bitmask_t  ngx_http_upstream_cache_method_mask[];
335 
336 
337 
338 #endif /* _NGX_HTTP_UPSTREAM_H_INCLUDED_ */
339 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.