⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ngx_http_core_module.c

📁 Nginx是一个高性能的HTTP和反向代理服务器
💻 C
📖 第 1 页 / 共 5 页
字号:
/* * Copyright (C) Igor Sysoev */#include <ngx_config.h>#include <ngx_core.h>#include <ngx_event.h>#include <ngx_http.h>#include <nginx.h>typedef struct {    u_char    *name;    uint32_t   method;} ngx_http_method_name_t;#define NGX_HTTP_LOCATION_EXACT           1#define NGX_HTTP_LOCATION_AUTO_REDIRECT   2#define NGX_HTTP_LOCATION_NOREGEX         3#define NGX_HTTP_LOCATION_REGEX           4#define NGX_HTTP_REQUEST_BODY_FILE_OFF    0#define NGX_HTTP_REQUEST_BODY_FILE_ON     1#define NGX_HTTP_REQUEST_BODY_FILE_CLEAN  2static ngx_int_t ngx_http_core_find_location(ngx_http_request_t *r,    ngx_array_t *locations, ngx_uint_t regex_start, size_t len);static ngx_int_t ngx_http_core_preconfiguration(ngx_conf_t *cf);static void *ngx_http_core_create_main_conf(ngx_conf_t *cf);static char *ngx_http_core_init_main_conf(ngx_conf_t *cf, void *conf);static void *ngx_http_core_create_srv_conf(ngx_conf_t *cf);static char *ngx_http_core_merge_srv_conf(ngx_conf_t *cf,    void *parent, void *child);static void *ngx_http_core_create_loc_conf(ngx_conf_t *cf);static char *ngx_http_core_merge_loc_conf(ngx_conf_t *cf,    void *parent, void *child);static char *ngx_http_core_server(ngx_conf_t *cf, ngx_command_t *cmd,    void *dummy);static char *ngx_http_core_location(ngx_conf_t *cf, ngx_command_t *cmd,    void *dummy);static ngx_int_t ngx_http_core_cmp_locations(const void *first,    const void *second);static char *ngx_http_core_types(ngx_conf_t *cf, ngx_command_t *cmd,    void *conf);static char *ngx_http_core_type(ngx_conf_t *cf, ngx_command_t *dummy,    void *conf);static char *ngx_http_core_listen(ngx_conf_t *cf, ngx_command_t *cmd,    void *conf);static char *ngx_http_core_server_name(ngx_conf_t *cf, ngx_command_t *cmd,    void *conf);static char *ngx_http_core_root(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);static char *ngx_http_core_limit_except(ngx_conf_t *cf, ngx_command_t *cmd,    void *conf);static char *ngx_http_core_error_page(ngx_conf_t *cf, ngx_command_t *cmd,    void *conf);static char *ngx_http_core_open_file_cache(ngx_conf_t *cf, ngx_command_t *cmd,    void *conf);static char *ngx_http_core_error_log(ngx_conf_t *cf, ngx_command_t *cmd,    void *conf);static char *ngx_http_core_keepalive(ngx_conf_t *cf, ngx_command_t *cmd,    void *conf);static char *ngx_http_core_internal(ngx_conf_t *cf, ngx_command_t *cmd,    void *conf);static char *ngx_http_core_resolver(ngx_conf_t *cf, ngx_command_t *cmd,    void *conf);#if (NGX_HTTP_GZIP)static char *ngx_http_gzip_disable(ngx_conf_t *cf, ngx_command_t *cmd,    void *conf);#endifstatic char *ngx_http_core_lowat_check(ngx_conf_t *cf, void *post, void *data);static char *ngx_http_core_pool_size(ngx_conf_t *cf, void *post, void *data);static ngx_conf_post_t  ngx_http_core_lowat_post =    { ngx_http_core_lowat_check };static ngx_conf_post_handler_pt  ngx_http_core_pool_size_p =    ngx_http_core_pool_size;static ngx_conf_deprecated_t  ngx_conf_deprecated_optimize_host_names = {    ngx_conf_deprecated, "optimize_host_names", "optimize_server_names"};static ngx_conf_deprecated_t  ngx_conf_deprecated_open_file_cache_retest = {    ngx_conf_deprecated, "open_file_cache_retest", "open_file_cache_valid"};static ngx_conf_deprecated_t  ngx_conf_deprecated_satisfy_any = {    ngx_conf_deprecated, "satisfy_any", "satisfy"};static ngx_conf_enum_t  ngx_http_core_request_body_in_file[] = {    { ngx_string("off"), NGX_HTTP_REQUEST_BODY_FILE_OFF },    { ngx_string("on"), NGX_HTTP_REQUEST_BODY_FILE_ON },    { ngx_string("clean"), NGX_HTTP_REQUEST_BODY_FILE_CLEAN },    { ngx_null_string, 0 }};static ngx_conf_enum_t  ngx_http_core_satisfy[] = {    { ngx_string("all"), NGX_HTTP_SATISFY_ALL },    { ngx_string("any"), NGX_HTTP_SATISFY_ANY },    { ngx_null_string, 0 }};#if (NGX_HTTP_GZIP)static ngx_conf_enum_t  ngx_http_gzip_http_version[] = {    { ngx_string("1.0"), NGX_HTTP_VERSION_10 },    { ngx_string("1.1"), NGX_HTTP_VERSION_11 },    { ngx_null_string, 0 }};static ngx_conf_bitmask_t  ngx_http_gzip_proxied_mask[] = {    { ngx_string("off"), NGX_HTTP_GZIP_PROXIED_OFF },    { ngx_string("expired"), NGX_HTTP_GZIP_PROXIED_EXPIRED },    { ngx_string("no-cache"), NGX_HTTP_GZIP_PROXIED_NO_CACHE },    { ngx_string("no-store"), NGX_HTTP_GZIP_PROXIED_NO_STORE },    { ngx_string("private"), NGX_HTTP_GZIP_PROXIED_PRIVATE },    { ngx_string("no_last_modified"), NGX_HTTP_GZIP_PROXIED_NO_LM },    { ngx_string("no_etag"), NGX_HTTP_GZIP_PROXIED_NO_ETAG },    { ngx_string("auth"), NGX_HTTP_GZIP_PROXIED_AUTH },    { ngx_string("any"), NGX_HTTP_GZIP_PROXIED_ANY },    { ngx_null_string, 0 }};static ngx_str_t  ngx_http_gzip_no_cache = ngx_string("no-cache");static ngx_str_t  ngx_http_gzip_no_store = ngx_string("no-store");static ngx_str_t  ngx_http_gzip_private = ngx_string("private");#endifstatic ngx_command_t  ngx_http_core_commands[] = {    { ngx_string("variables_hash_max_size"),      NGX_HTTP_MAIN_CONF|NGX_CONF_TAKE1,      ngx_conf_set_num_slot,      NGX_HTTP_MAIN_CONF_OFFSET,      offsetof(ngx_http_core_main_conf_t, variables_hash_max_size),      NULL },    { ngx_string("variables_hash_bucket_size"),      NGX_HTTP_MAIN_CONF|NGX_CONF_TAKE1,      ngx_conf_set_num_slot,      NGX_HTTP_MAIN_CONF_OFFSET,      offsetof(ngx_http_core_main_conf_t, variables_hash_bucket_size),      NULL },    { ngx_string("server_names_hash_max_size"),      NGX_HTTP_MAIN_CONF|NGX_CONF_TAKE1,      ngx_conf_set_num_slot,      NGX_HTTP_MAIN_CONF_OFFSET,      offsetof(ngx_http_core_main_conf_t, server_names_hash_max_size),      NULL },    { ngx_string("server_names_hash_bucket_size"),      NGX_HTTP_MAIN_CONF|NGX_CONF_TAKE1,      ngx_conf_set_num_slot,      NGX_HTTP_MAIN_CONF_OFFSET,      offsetof(ngx_http_core_main_conf_t, server_names_hash_bucket_size),      NULL },    { ngx_string("server"),      NGX_HTTP_MAIN_CONF|NGX_CONF_BLOCK|NGX_CONF_MULTI|NGX_CONF_NOARGS,      ngx_http_core_server,      0,      0,      NULL },    { ngx_string("connection_pool_size"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1,      ngx_conf_set_size_slot,      NGX_HTTP_SRV_CONF_OFFSET,      offsetof(ngx_http_core_srv_conf_t, connection_pool_size),      &ngx_http_core_pool_size_p },    { ngx_string("request_pool_size"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1,      ngx_conf_set_size_slot,      NGX_HTTP_SRV_CONF_OFFSET,      offsetof(ngx_http_core_srv_conf_t, request_pool_size),      &ngx_http_core_pool_size_p },    { ngx_string("client_header_timeout"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1,      ngx_conf_set_msec_slot,      NGX_HTTP_SRV_CONF_OFFSET,      offsetof(ngx_http_core_srv_conf_t, client_header_timeout),      NULL },    { ngx_string("client_header_buffer_size"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1,      ngx_conf_set_size_slot,      NGX_HTTP_SRV_CONF_OFFSET,      offsetof(ngx_http_core_srv_conf_t, client_header_buffer_size),      NULL },    { ngx_string("large_client_header_buffers"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE2,      ngx_conf_set_bufs_slot,      NGX_HTTP_SRV_CONF_OFFSET,      offsetof(ngx_http_core_srv_conf_t, large_client_header_buffers),      NULL },    { ngx_string("optimize_server_names"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_FLAG,      ngx_conf_set_flag_slot,      NGX_HTTP_SRV_CONF_OFFSET,      offsetof(ngx_http_core_srv_conf_t, optimize_server_names),      NULL },    { ngx_string("optimize_host_names"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_FLAG,      ngx_conf_set_flag_slot,      NGX_HTTP_SRV_CONF_OFFSET,      offsetof(ngx_http_core_srv_conf_t, optimize_server_names),      &ngx_conf_deprecated_optimize_host_names },    { ngx_string("ignore_invalid_headers"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_FLAG,      ngx_conf_set_flag_slot,      NGX_HTTP_SRV_CONF_OFFSET,      offsetof(ngx_http_core_srv_conf_t, ignore_invalid_headers),      NULL },    { ngx_string("merge_slashes"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_FLAG,      ngx_conf_set_flag_slot,      NGX_HTTP_SRV_CONF_OFFSET,      offsetof(ngx_http_core_srv_conf_t, merge_slashes),      NULL },    { ngx_string("location"),      NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_BLOCK|NGX_CONF_TAKE12,      ngx_http_core_location,      NGX_HTTP_SRV_CONF_OFFSET,      0,      NULL },    { ngx_string("listen"),      NGX_HTTP_SRV_CONF|NGX_CONF_1MORE,      ngx_http_core_listen,      NGX_HTTP_SRV_CONF_OFFSET,      0,      NULL },    { ngx_string("server_name"),      NGX_HTTP_SRV_CONF|NGX_CONF_1MORE,      ngx_http_core_server_name,      NGX_HTTP_SRV_CONF_OFFSET,      0,      NULL },    { ngx_string("types_hash_max_size"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,      ngx_conf_set_num_slot,      NGX_HTTP_LOC_CONF_OFFSET,      offsetof(ngx_http_core_loc_conf_t, types_hash_max_size),      NULL },    { ngx_string("types_hash_bucket_size"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,      ngx_conf_set_num_slot,      NGX_HTTP_LOC_CONF_OFFSET,      offsetof(ngx_http_core_loc_conf_t, types_hash_bucket_size),      NULL },    { ngx_string("types"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF                                          |NGX_CONF_BLOCK|NGX_CONF_NOARGS,      ngx_http_core_types,      NGX_HTTP_LOC_CONF_OFFSET,      0,      NULL },    { ngx_string("default_type"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,      ngx_conf_set_str_slot,      NGX_HTTP_LOC_CONF_OFFSET,      offsetof(ngx_http_core_loc_conf_t, default_type),      NULL },    { ngx_string("root"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF                        |NGX_CONF_TAKE1,      ngx_http_core_root,      NGX_HTTP_LOC_CONF_OFFSET,      0,      NULL },    { ngx_string("alias"),      NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,      ngx_http_core_root,      NGX_HTTP_LOC_CONF_OFFSET,      0,      NULL },    { ngx_string("limit_except"),      NGX_HTTP_LOC_CONF|NGX_CONF_BLOCK|NGX_CONF_1MORE,      ngx_http_core_limit_except,      NGX_HTTP_LOC_CONF_OFFSET,      0,      NULL },    { ngx_string("client_max_body_size"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,      ngx_conf_set_off_slot,      NGX_HTTP_LOC_CONF_OFFSET,      offsetof(ngx_http_core_loc_conf_t, client_max_body_size),      NULL },    { ngx_string("client_body_buffer_size"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,      ngx_conf_set_size_slot,      NGX_HTTP_LOC_CONF_OFFSET,      offsetof(ngx_http_core_loc_conf_t, client_body_buffer_size),      NULL },    { ngx_string("client_body_timeout"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,      ngx_conf_set_msec_slot,      NGX_HTTP_LOC_CONF_OFFSET,      offsetof(ngx_http_core_loc_conf_t, client_body_timeout),      NULL },    { ngx_string("client_body_temp_path"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1234,      ngx_conf_set_path_slot,      NGX_HTTP_LOC_CONF_OFFSET,      offsetof(ngx_http_core_loc_conf_t, client_body_temp_path),      (void *) ngx_garbage_collector_temp_handler },    { ngx_string("client_body_in_file_only"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,      ngx_conf_set_enum_slot,      NGX_HTTP_LOC_CONF_OFFSET,      offsetof(ngx_http_core_loc_conf_t, client_body_in_file_only),      &ngx_http_core_request_body_in_file },    { ngx_string("sendfile"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF                        |NGX_CONF_TAKE1,      ngx_conf_set_flag_slot,      NGX_HTTP_LOC_CONF_OFFSET,      offsetof(ngx_http_core_loc_conf_t, sendfile),      NULL },    { ngx_string("sendfile_max_chunk"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,      ngx_conf_set_size_slot,      NGX_HTTP_LOC_CONF_OFFSET,      offsetof(ngx_http_core_loc_conf_t, sendfile_max_chunk),      NULL },    { ngx_string("tcp_nopush"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,      ngx_conf_set_flag_slot,      NGX_HTTP_LOC_CONF_OFFSET,      offsetof(ngx_http_core_loc_conf_t, tcp_nopush),      NULL },    { ngx_string("tcp_nodelay"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,      ngx_conf_set_flag_slot,      NGX_HTTP_LOC_CONF_OFFSET,      offsetof(ngx_http_core_loc_conf_t, tcp_nodelay),      NULL },    { ngx_string("send_timeout"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,      ngx_conf_set_msec_slot,      NGX_HTTP_LOC_CONF_OFFSET,      offsetof(ngx_http_core_loc_conf_t, send_timeout),      NULL },    { ngx_string("send_lowat"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,      ngx_conf_set_size_slot,      NGX_HTTP_LOC_CONF_OFFSET,      offsetof(ngx_http_core_loc_conf_t, send_lowat),      &ngx_http_core_lowat_post },    { ngx_string("postpone_output"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,      ngx_conf_set_size_slot,      NGX_HTTP_LOC_CONF_OFFSET,      offsetof(ngx_http_core_loc_conf_t, postpone_output),      NULL },    { ngx_string("limit_rate"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF                        |NGX_CONF_TAKE1,      ngx_conf_set_size_slot,      NGX_HTTP_LOC_CONF_OFFSET,      offsetof(ngx_http_core_loc_conf_t, limit_rate),      NULL },    { ngx_string("keepalive_timeout"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE12,      ngx_http_core_keepalive,      NGX_HTTP_LOC_CONF_OFFSET,      0,      NULL },    { ngx_string("satisfy"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,      ngx_conf_set_enum_slot,      NGX_HTTP_LOC_CONF_OFFSET,      offsetof(ngx_http_core_loc_conf_t, satisfy),      &ngx_http_core_satisfy },    { ngx_string("satisfy_any"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,      ngx_conf_set_flag_slot,      NGX_HTTP_LOC_CONF_OFFSET,      offsetof(ngx_http_core_loc_conf_t, satisfy),      &ngx_conf_deprecated_satisfy_any },    { ngx_string("internal"),      NGX_HTTP_LOC_CONF|NGX_CONF_NOARGS,      ngx_http_core_internal,      NGX_HTTP_LOC_CONF_OFFSET,      0,      NULL },    { ngx_string("lingering_time"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,      ngx_conf_set_msec_slot,      NGX_HTTP_LOC_CONF_OFFSET,      offsetof(ngx_http_core_loc_conf_t, lingering_time),      NULL },    { ngx_string("lingering_timeout"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,      ngx_conf_set_msec_slot,      NGX_HTTP_LOC_CONF_OFFSET,      offsetof(ngx_http_core_loc_conf_t, lingering_timeout),      NULL },    { ngx_string("reset_timedout_connection"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,      ngx_conf_set_flag_slot,      NGX_HTTP_LOC_CONF_OFFSET,      offsetof(ngx_http_core_loc_conf_t, reset_timedout_connection),      NULL },    { ngx_string("server_name_in_redirect"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,      ngx_conf_set_flag_slot,      NGX_HTTP_LOC_CONF_OFFSET,      offsetof(ngx_http_core_loc_conf_t, server_name_in_redirect),      NULL },    { ngx_string("port_in_redirect"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,      ngx_conf_set_flag_slot,      NGX_HTTP_LOC_CONF_OFFSET,      offsetof(ngx_http_core_loc_conf_t, port_in_redirect),      NULL },    { ngx_string("msie_padding"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,      ngx_conf_set_flag_slot,      NGX_HTTP_LOC_CONF_OFFSET,      offsetof(ngx_http_core_loc_conf_t, msie_padding),      NULL },    { ngx_string("msie_refresh"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,      ngx_conf_set_flag_slot,      NGX_HTTP_LOC_CONF_OFFSET,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -