Annotation of embedaddon/nginx/src/http/ngx_http_upstream.h, revision 1.1.1.1

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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>