static char *ngx_http_secure_download_secret(ngx_conf_t *cf, void *post, void *data); static ngx_conf_post_handler_pt ngx_http_secure_download_secret_p = ngx_http_secure_download_secret; typedef struct { ngx_flag_t enable; ngx_flag_t path_mode; ngx_str_t secret; ngx_array_t *secret_lengths; ngx_array_t *secret_values; } ngx_http_secure_download_loc_conf_t; static ngx_command_t ngx_http_secure_download_commands[] = { { ngx_string("secure_download"), NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1, ngx_conf_set_flag_slot, NGX_HTTP_LOC_CONF_OFFSET, offsetof(ngx_http_secure_download_loc_conf_t, enable), NULL }, { ngx_string("secure_download_path_mode"), NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1, ngx_conf_set_path_mode, NGX_HTTP_LOC_CONF_OFFSET, offsetof(ngx_http_secure_download_loc_conf_t, path_mode), NULL }, {
#include <ngx_config.h> #include <ngx_core.h> #define NGX_CONF_BUFFER 4096 static ngx_int_t ngx_conf_handler(ngx_conf_t *cf, ngx_int_t last); static ngx_int_t ngx_conf_read_token(ngx_conf_t *cf); static char *ngx_conf_include(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); static ngx_int_t ngx_conf_test_full_name(ngx_str_t *name); static void ngx_conf_flush_files(ngx_cycle_t *cycle); static ngx_command_t ngx_conf_commands[] = { { ngx_string("include"), NGX_ANY_CONF|NGX_CONF_TAKE1, ngx_conf_include, 0, 0, NULL }, ngx_null_command }; ngx_module_t ngx_conf_module = { NGX_MODULE_V1, NULL, /* module context */ ngx_conf_commands, /* module directives */ NGX_CONF_MODULE, /* module type */
ngx_http_complex_value_t value; ngx_http_variable_value_t *default_value; ngx_uint_t hostnames; /* unsigned hostnames:1 */ } ngx_http_map_ctx_t; static int ngx_libc_cdecl ngx_http_map_cmp_dns_wildcards(const void *one, const void *two); static void *ngx_http_map_create_conf(ngx_conf_t *cf); static char *ngx_http_map_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); static char *ngx_http_map(ngx_conf_t *cf, ngx_command_t *dummy, void *conf); static ngx_command_t ngx_http_map_commands[] = { { ngx_string("map"), NGX_HTTP_MAIN_CONF|NGX_CONF_BLOCK|NGX_CONF_TAKE2, ngx_http_map_block, NGX_HTTP_MAIN_CONF_OFFSET, 0, NULL }, { ngx_string("map_hash_max_size"), NGX_HTTP_MAIN_CONF|NGX_CONF_TAKE1, ngx_conf_set_num_slot, NGX_HTTP_MAIN_CONF_OFFSET, offsetof(ngx_http_map_conf_t, hash_max_size), NULL }, { ngx_string("map_hash_bucket_size"), NGX_HTTP_MAIN_CONF|NGX_CONF_TAKE1,
ngx_int_t xray_level; uint xray_chained; } ngx_http_xray_ctx_t; typedef struct { size_t xray_buffer_size; } ngx_http_xray_main_conf_t; static void * ngx_http_xray_create_main_conf(ngx_conf_t *cf); static ngx_int_t ngx_http_worker_init(ngx_cycle_t *cycle); static ngx_command_t ngx_http_xray_commands[] = { { ngx_string("xray_buffer_size"), NGX_HTTP_MAIN_CONF|NGX_CONF_TAKE1, ngx_conf_set_size_slot, NGX_HTTP_MAIN_CONF_OFFSET, offsetof(ngx_http_xray_main_conf_t, xray_buffer_size), NULL }, ngx_null_command }; static ngx_http_module_t ngx_http_xray_module_ctx = { NULL, /* preconfiguration */ NULL, /* postconfiguration */ ngx_http_xray_create_main_conf, /* create main configuration */ NULL, /* init main configuration */
ngx_msec_t timer, ngx_uint_t flags); static ngx_int_t ngx_rtsig_process_overflow(ngx_cycle_t *cycle, ngx_msec_t timer, ngx_uint_t flags); static void *ngx_rtsig_create_conf(ngx_cycle_t *cycle); static char *ngx_rtsig_init_conf(ngx_cycle_t *cycle, void *conf); static char *ngx_check_ngx_overflow_threshold_bounds(ngx_conf_t *cf, void *post, void *data); static sigset_t set; static ngx_uint_t overflow, overflow_current; static struct pollfd *overflow_list; static ngx_str_t rtsig_name = ngx_string("rtsig"); static ngx_conf_num_bounds_t ngx_overflow_threshold_bounds = { ngx_check_ngx_overflow_threshold_bounds, 2, 10 }; static ngx_command_t ngx_rtsig_commands[] = { { ngx_string("rtsig_signo"), NGX_EVENT_CONF|NGX_CONF_TAKE1, ngx_conf_set_num_slot, 0, offsetof(ngx_rtsig_conf_t, signo), NULL },
default: //meh, no big deal. break; } return NGX_OK; } static ngx_int_t sub_notify_handler(ngx_int_t code, void *data, sub_data_t *d) { if(code == NCHAN_SUB_MULTI_NOTIFY_ADDSUB) { change_sub_count(d->target_chanhead, (ngx_int_t )data); } return NGX_OK; } static ngx_str_t sub_name = ngx_string("memstore-multi"); subscriber_t *memstore_multi_subscriber_create(nchan_store_channel_head_t *chanhead, uint8_t n) { static nchan_msg_id_t latest_msgid = NCHAN_NEWEST_MSGID; sub_data_t *d; nchan_store_channel_head_t *target_ch; ngx_int_t multi_subs; nchan_loc_conf_t cf; cf.use_redis = chanhead->use_redis; d = ngx_alloc(sizeof(*d), ngx_cycle->log); if(d == NULL) { ERR("couldn't allocate memstore-multi subscriber data"); return NULL;
#include "ngx_http_lua_rewriteby.h" #include "ngx_http_lua_accessby.h" #if !defined(nginx_version) || nginx_version < 8054 #error "at least nginx 0.8.54 is required" #endif static ngx_int_t ngx_http_lua_init(ngx_conf_t *cf); static ngx_command_t ngx_http_lua_cmds[] = { { ngx_string("lua_regex_cache_max_entries"), NGX_HTTP_MAIN_CONF | NGX_CONF_TAKE1, ngx_conf_set_num_slot, NGX_HTTP_MAIN_CONF_OFFSET, offsetof(ngx_http_lua_main_conf_t, regex_cache_max_entries), NULL }, { ngx_string("lua_package_cpath"), NGX_HTTP_MAIN_CONF | NGX_CONF_TAKE1, ngx_http_lua_package_cpath, NGX_HTTP_MAIN_CONF_OFFSET, 0, NULL },
void *conf); static ngx_int_t ngx_stream_proxy_send_proxy_protocol(ngx_stream_session_t *s); #if (NGX_STREAM_SSL) static char *ngx_stream_proxy_ssl_password_file(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); static void ngx_stream_proxy_ssl_init_connection(ngx_stream_session_t *s); static void ngx_stream_proxy_ssl_handshake(ngx_connection_t *pc); static ngx_int_t ngx_stream_proxy_ssl_name(ngx_stream_session_t *s); static ngx_int_t ngx_stream_proxy_set_ssl(ngx_conf_t *cf, ngx_stream_proxy_srv_conf_t *pscf); static ngx_conf_bitmask_t ngx_stream_proxy_ssl_protocols[] = { { ngx_string("SSLv2"), NGX_SSL_SSLv2 }, { ngx_string("SSLv3"), NGX_SSL_SSLv3 }, { ngx_string("TLSv1"), NGX_SSL_TLSv1 }, { ngx_string("TLSv1.1"), NGX_SSL_TLSv1_1 }, { ngx_string("TLSv1.2"), NGX_SSL_TLSv1_2 }, { ngx_null_string, 0 } }; #endif static ngx_command_t ngx_stream_proxy_commands[] = { /* proxy_pass 语法:proxy_pass URL;
static char *ngx_http_charset_map(ngx_conf_t *cf, ngx_command_t *dummy, void *conf); static char *ngx_http_set_charset_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); static ngx_int_t ngx_http_add_charset(ngx_array_t *charsets, ngx_str_t *name); static void *ngx_http_charset_create_main_conf(ngx_conf_t *cf); static void *ngx_http_charset_create_loc_conf(ngx_conf_t *cf); static char *ngx_http_charset_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child); static ngx_int_t ngx_http_charset_postconfiguration(ngx_conf_t *cf); ngx_str_t ngx_http_charset_default_types[] = { ngx_string("text/html"), ngx_string("text/xml"), ngx_string("text/plain"), ngx_string("text/vnd.wap.wml"), ngx_string("application/x-javascript"), ngx_string("application/rss+xml"), ngx_null_string }; static ngx_command_t ngx_http_charset_filter_commands[] = { { ngx_string("charset"), NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF |NGX_HTTP_LIF_CONF|NGX_CONF_TAKE1, ngx_http_set_charset_slot,
*/ typedef struct { ngx_array_t *codes; /* uintptr_t */ ngx_uint_t stack_size; ngx_flag_t log; ngx_flag_t uninitialized_variable_warn; } ngx_http_rewrite_loc_conf_t; typedef enum _fsutil_op { fsutil_op_null = 0, fsutil_op_mv = 1, fsutil_op_ln = 2 } fsutil_op_t; static ngx_str_t opnames[] = { ngx_string( "fsutil::null" ), ngx_string( "fsutil::mv" ), ngx_string( "fsutil::ln" ) }; #define FSUTIL_OPT_ACTION ( 0x0f ) #define FSUTIL_OPT_ALT_ACTION ( 0xf0 ) typedef enum _fsutil_opt { fsutil_opt_onexist_ignore = 0x00, fsutil_opt_onexist_override = 0x01, fsutil_opt_onexist_touch = 0x10 } fsutil_opt_t; typedef struct { ngx_http_script_code_pt code;
void *conf); static ngx_conf_post_t ngx_http_v2_recv_buffer_size_post = { ngx_http_v2_recv_buffer_size }; static ngx_conf_post_t ngx_http_v2_pool_size_post = { ngx_http_v2_pool_size }; static ngx_conf_post_t ngx_http_v2_streams_index_mask_post = { ngx_http_v2_streams_index_mask }; static ngx_conf_post_t ngx_http_v2_chunk_size_post = { ngx_http_v2_chunk_size }; static ngx_command_t ngx_http_v2_commands[] = { { ngx_string("http2_recv_buffer_size"), NGX_HTTP_MAIN_CONF|NGX_CONF_TAKE1, ngx_conf_set_size_slot, NGX_HTTP_MAIN_CONF_OFFSET, offsetof(ngx_http_v2_main_conf_t, recv_buffer_size), &ngx_http_v2_recv_buffer_size_post }, { ngx_string("http2_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_v2_srv_conf_t, pool_size), &ngx_http_v2_pool_size_post }, { ngx_string("http2_max_concurrent_streams"), NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1,
static ngx_int_t ngx_http_realip_handler(ngx_http_request_t *r); static void ngx_http_realip_cleanup(void *data); static char *ngx_http_realip_from(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); static char *ngx_http_realip(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); static void *ngx_http_realip_create_loc_conf(ngx_conf_t *cf); static char *ngx_http_realip_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child); static ngx_int_t ngx_http_realip_init(ngx_conf_t *cf); static ngx_command_t ngx_http_realip_commands[] = { { ngx_string("set_real_ip_from"), NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1, ngx_http_realip_from, NGX_HTTP_LOC_CONF_OFFSET, 0, NULL }, { ngx_string("real_ip_header"), NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1, ngx_http_realip, NGX_HTTP_LOC_CONF_OFFSET, 0, NULL }, ngx_null_command };
ngx_shm_zone_t *cache; size_t chunk_size; ngx_http_complex_value_t cache_key; ngx_uint_t cache_min_uses; ngx_array_t *cache_valid; } ngx_http_flex_cache_loc_conf_t; typedef struct { ngx_uint_t cache_status; } ngx_http_flex_cache_ctx_t; ngx_module_t ngx_http_flex_cache_module; static ngx_command_t ngx_http_flex_cache_module_commands[] = { { ngx_string("flex_cache"), NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG, ngx_http_flex_cache_conf, NGX_HTTP_LOC_CONF_OFFSET, 0, NULL }, { ngx_string("flex_cache_key"), NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG, ngx_http_flex_cache_key_conf, NGX_HTTP_LOC_CONF_OFFSET, 0, NULL }, { ngx_string("flex_cache_path"), NGX_HTTP_MAIN_CONF|NGX_CONF_2MORE,
typedef struct { ngx_rbtree_t *rbtree; ngx_int_t index; ngx_str_t var; } ngx_http_limit_traffic_rate_filter_ctx_t; typedef struct { size_t limit_traffic_rate; ngx_shm_zone_t *shm_zone; } ngx_http_limit_traffic_rate_filter_conf_t; static ngx_command_t ngx_http_limit_traffic_rate_filter_commands[] = { { ngx_string("limit_traffic_rate_zone"), NGX_HTTP_MAIN_CONF|NGX_CONF_TAKE3, ngx_http_limit_traffic_rate_zone, 0, 0, NULL }, { ngx_string("limit_traffic_rate"), NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE2, ngx_http_limit_traffic_rate, NGX_HTTP_LOC_CONF_OFFSET, 0, NULL }, ngx_null_command };
/* * Portions Copyright (c) VMware, Inc. [1998 – 2011]. All Rights Reserved. */ #include <ngx_config.h> #include <ngx_core.h> static char *ngx_error_log(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); static ngx_command_t ngx_errlog_commands[] = { {ngx_string("error_log"), NGX_MAIN_CONF|NGX_CONF_1MORE, ngx_error_log, 0, 0, NULL}, ngx_null_command }; static ngx_core_module_t ngx_errlog_module_ctx = { ngx_string("errlog"), NULL, NULL };
static void *ngx_http_limit_req_create_conf(ngx_conf_t *cf); static char *ngx_http_limit_req_merge_conf(ngx_conf_t *cf, void *parent, void *child); static char *ngx_http_limit_req_zone(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); static char *ngx_http_limit_req(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); #if (T_LIMIT_REQ) static char *ngx_http_limit_req_whitelist(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); #endif static ngx_int_t ngx_http_limit_req_init(ngx_conf_t *cf); static ngx_conf_enum_t ngx_http_limit_req_log_levels[] = { { ngx_string("info"), NGX_LOG_INFO }, { ngx_string("notice"), NGX_LOG_NOTICE }, { ngx_string("warn"), NGX_LOG_WARN }, { ngx_string("error"), NGX_LOG_ERR }, { ngx_null_string, 0 } }; static ngx_conf_num_bounds_t ngx_http_limit_req_status_bounds = { ngx_conf_check_num_bounds, 400, 599 }; static ngx_command_t ngx_http_limit_req_commands[] = { { ngx_string("limit_req_zone"),
static void ngx_http_kafka_main_conf_broker_add(ngx_http_kafka_main_conf_t *cf, ngx_str_t *broker, ngx_pool_t *pool); typedef struct { ngx_log_t *log; ngx_str_t topic; /* kafka topic */ ngx_str_t broker; /* broker addr (eg: localhost:9092) */ rd_kafka_topic_t *rkt; rd_kafka_topic_conf_t *rktc; } ngx_http_kafka_loc_conf_t; static ngx_command_t ngx_http_kafka_commands[] = { { ngx_string("kafka"), NGX_HTTP_MAIN_CONF|NGX_CONF_NOARGS, ngx_http_set_kafka, NGX_HTTP_MAIN_CONF_OFFSET, 0, NULL }, { ngx_string("kafka_topic"), NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1, ngx_http_set_kafka_topic, NGX_HTTP_LOC_CONF_OFFSET, offsetof(ngx_http_kafka_loc_conf_t, topic), NULL }, { ngx_string("kafka_broker"), NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
* REMOTE_HOST (null), REMOTE_IDENT (null), * SERVER_SOFTWARE * * Apache SSI: DOCUMENT_NAME, LAST_MODIFIED, USER_NAME (file owner) */ /* * the $http_host, $http_user_agent, $http_referer, $http_via, * and $http_x_forwarded_for variables may be handled by generic * ngx_http_variable_unknown_header_in(), but for perfomance reasons * they are handled using dedicated entries */ static ngx_http_variable_t ngx_http_core_variables[] = { { ngx_string("http_host"), NULL, ngx_http_variable_header, offsetof(ngx_http_request_t, headers_in.host), 0, 0 }, { ngx_string("http_user_agent"), NULL, ngx_http_variable_header, offsetof(ngx_http_request_t, headers_in.user_agent), 0, 0 }, { ngx_string("http_referer"), NULL, ngx_http_variable_header, offsetof(ngx_http_request_t, headers_in.referer), 0, 0 }, #if (NGX_HTTP_GZIP) { ngx_string("http_via"), NULL, ngx_http_variable_header, offsetof(ngx_http_request_t, headers_in.via), 0, 0 }, #endif #if (NGX_HTTP_PROXY || NGX_HTTP_REALIP) { ngx_string("http_x_forwarded_for"), NULL, ngx_http_variable_header,
return NGX_OK; } static const subscriber_fn_t longpoll_fn = { &longpoll_enqueue, &longpoll_dequeue, &longpoll_respond_message, &longpoll_respond_status, &longpoll_set_dequeue_callback, &longpoll_reserve, &longpoll_release, NULL, &nchan_subscriber_authorize_subscribe }; static ngx_str_t sub_name = ngx_string("longpoll"); static const subscriber_t new_longpoll_sub = { &sub_name, LONGPOLL, &longpoll_fn, UNKNOWN, NCHAN_ZERO_MSGID, NULL, NULL, 0, //reservations 1, //deque after response 1, //destroy after dequeue 0, //enqueued };
*/ #include <ngx_config.h> #include <ngx_core.h> #include <ngx_http.h> #include "ngx_http_passenger_module.h" #include "Configuration.h" #include "ContentHandler.h" static ngx_str_t headers_to_hide[] = { /* NOTE: Do not hide the "Status" header; some broken HTTP clients * expect this header. See http://tinyurl.com/87rezm */ ngx_string("X-Accel-Expires"), ngx_string("X-Accel-Redirect"), ngx_string("X-Accel-Limit-Rate"), ngx_string("X-Accel-Buffer"), ngx_null_string }; passenger_main_conf_t passenger_main_conf; #if NGINX_VERSION_NUM >= 7000 static ngx_path_init_t ngx_http_proxy_temp_path = { ngx_string(NGX_HTTP_PROXY_TEMP_PATH), { 1, 2, 0 } }; #endif
static void ngx_select_repair_fd_sets(ngx_cycle_t *cycle); static char *ngx_select_init_conf(ngx_cycle_t *cycle, void *conf); static fd_set master_read_fd_set; static fd_set master_write_fd_set; static fd_set work_read_fd_set; static fd_set work_write_fd_set; static ngx_int_t max_fd; static ngx_uint_t nevents; static ngx_event_t **event_index; static ngx_str_t select_name = ngx_string("select"); ngx_event_module_t ngx_select_module_ctx = { &select_name, NULL, /* create configuration */ ngx_select_init_conf, /* init configuration */ { ngx_select_add_event, /* add an event */ ngx_select_del_event, /* delete an event */ ngx_select_add_event, /* enable an event */ ngx_select_del_event, /* disable an event */ NULL, /* add an connection */ NULL, /* delete an connection */ NULL, /* process the changes */ ngx_select_process_events, /* process the events */
static ngx_int_t ngx_http_index_test_dir(ngx_http_request_t *r, ngx_http_core_loc_conf_t *clcf, u_char *path, u_char *last); static ngx_int_t ngx_http_index_error(ngx_http_request_t *r, ngx_http_core_loc_conf_t *clcf, u_char *file, ngx_err_t err); static ngx_int_t ngx_http_index_init(ngx_conf_t *cf); static void *ngx_http_index_create_loc_conf(ngx_conf_t *cf); static char *ngx_http_index_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child); static char *ngx_http_index_set_index(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); static ngx_command_t ngx_http_index_commands[] = { { ngx_string("index"), NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE, ngx_http_index_set_index, NGX_HTTP_LOC_CONF_OFFSET, 0, NULL }, ngx_null_command }; static ngx_http_module_t ngx_http_index_module_ctx = { NULL, /* preconfiguration */ ngx_http_index_init, /* postconfiguration */ NULL, /* create main configuration */
ngx_str_t *path); static ngx_int_t ngx_http_dav_copy_file(ngx_tree_ctx_t *ctx, u_char *from, u_char *to); static ngx_int_t ngx_http_dav_depth(ngx_http_request_t *r, ngx_int_t dflt); static ngx_int_t ngx_http_dav_error(ngx_log_t *log, ngx_err_t err, ngx_int_t not_found, char *failed, u_char *path); static ngx_int_t ngx_http_dav_location(ngx_http_request_t *r, u_char *path); static void *ngx_http_dav_create_loc_conf(ngx_conf_t *cf); static char *ngx_http_dav_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child); static ngx_int_t ngx_http_dav_init(ngx_conf_t *cf); static ngx_conf_bitmask_t ngx_http_dav_methods_mask[] = { { ngx_string("off"), NGX_HTTP_DAV_OFF }, { ngx_string("put"), NGX_HTTP_PUT }, { ngx_string("delete"), NGX_HTTP_DELETE }, { ngx_string("mkcol"), NGX_HTTP_MKCOL }, { ngx_string("copy"), NGX_HTTP_COPY }, { ngx_string("move"), NGX_HTTP_MOVE }, { ngx_null_string, 0 } }; static ngx_command_t ngx_http_dav_commands[] = { { ngx_string("dav_methods"), NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE, ngx_conf_set_bitmask_slot, NGX_HTTP_LOC_CONF_OFFSET,
* * In order to support using ngx.* API in Lua coroutines, we have to create * new coroutine in the main coroutine instead of the calling coroutine */ static int ngx_http_lua_coroutine_create(lua_State *L); static int ngx_http_lua_coroutine_resume(lua_State *L); static int ngx_http_lua_coroutine_yield(lua_State *L); static int ngx_http_lua_coroutine_status(lua_State *L); static const ngx_str_t ngx_http_lua_co_status_names[] = { ngx_string("running"), ngx_string("suspended"), ngx_string("normal"), ngx_string("dead"), ngx_string("zombie") }; static int ngx_http_lua_coroutine_create(lua_State *L) { ngx_http_request_t *r; ngx_http_lua_ctx_t *ctx; r = ngx_http_lua_get_req(L);
static char *ngx_http_modsecurity_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child); static char *ngx_http_modsecurity_config(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); static char *ngx_http_modsecurity_enable(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); static ngx_http_modsecurity_ctx_t * ngx_http_modsecurity_create_ctx(ngx_http_request_t *r); static int ngx_http_modsecurity_drop_action(request_rec *r); static void ngx_http_modsecurity_terminate(ngx_cycle_t *cycle); static void ngx_http_modsecurity_cleanup(void *data); static int ngx_http_modsecurity_save_headers_in_visitor(void *data, const char *key, const char *value); static int ngx_http_modsecurity_save_headers_out_visitor(void *data, const char *key, const char *value); /* command handled by the module */ static ngx_command_t ngx_http_modsecurity_commands[] = { { ngx_string("ModSecurityConfig"), NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1, ngx_http_modsecurity_config, NGX_HTTP_LOC_CONF_OFFSET, 0, NULL }, { ngx_string("ModSecurityEnabled"), NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_SIF_CONF |NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_TAKE1, ngx_http_modsecurity_enable, NGX_HTTP_LOC_CONF_OFFSET, offsetof(ngx_http_modsecurity_loc_conf_t, enable), NULL }, ngx_null_command };
static void *ngx_http_image_filter_create_conf(ngx_conf_t *cf); static char *ngx_http_image_filter_merge_conf(ngx_conf_t *cf, void *parent, void *child); static char *ngx_http_image_filter(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); static char *ngx_http_image_filter_jpeg_quality(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); static char *ngx_http_image_filter_sharpen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); static ngx_int_t ngx_http_image_filter_init(ngx_conf_t *cf); static ngx_command_t ngx_http_image_filter_commands[] = { { ngx_string("image_filter"), NGX_HTTP_LOC_CONF|NGX_CONF_TAKE123, ngx_http_image_filter, NGX_HTTP_LOC_CONF_OFFSET, 0, NULL }, { ngx_string("image_filter_jpeg_quality"), NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1, ngx_http_image_filter_jpeg_quality, NGX_HTTP_LOC_CONF_OFFSET, 0, NULL }, { ngx_string("image_filter_sharpen"), NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
static ngx_int_t ngx_http_sub_output(ngx_http_request_t *r, ngx_http_sub_ctx_t *ctx); static ngx_int_t ngx_http_sub_parse(ngx_http_request_t *r, ngx_http_sub_ctx_t *ctx); static char * ngx_http_sub_filter(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); static void *ngx_http_sub_create_conf(ngx_conf_t *cf); static char *ngx_http_sub_merge_conf(ngx_conf_t *cf, void *parent, void *child); static ngx_int_t ngx_http_sub_filter_init(ngx_conf_t *cf); static ngx_command_t ngx_http_sub_filter_commands[] = { { ngx_string("sub_filter"), NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE2, ngx_http_sub_filter, NGX_HTTP_LOC_CONF_OFFSET, 0, NULL }, { ngx_string("sub_filter_types"), NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE, ngx_http_types_slot, NGX_HTTP_LOC_CONF_OFFSET, offsetof(ngx_http_sub_loc_conf_t, types_keys), &ngx_http_html_default_types[0] }, { ngx_string("sub_filter_once"), NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
ngx_uint_t index; void *data; }; static void ngx_pool_context_cleanup(void *data); typedef struct { ngx_uint_t size; } ngx_pool_context_conf_t; static void * ngx_pool_context_create_conf(ngx_cycle_t *cycle); static char * ngx_pool_context_init_conf(ngx_cycle_t *cycle, void *conf); static ngx_core_module_t ngx_pool_context_module_ctx = { ngx_string("pool_context"), ngx_pool_context_create_conf, ngx_pool_context_init_conf, }; static ngx_command_t ngx_pool_context_commands[] = { { ngx_string("pool_context_hash_size"), NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1, ngx_conf_set_num_slot, 0, offsetof(ngx_pool_context_conf_t, size), NULL }, ngx_null_command };
"<html>" CRLF "<head><title>507 Insufficient Storage</title></head>" CRLF "<body bgcolor=\"white\">" CRLF "<center><h1>507 Insufficient Storage</h1></center>" CRLF ; static ngx_str_t ngx_http_error_pages[] = { ngx_null_string, /* 201, 204 */ #define NGX_HTTP_LAST_2XX 202 #define NGX_HTTP_OFF_3XX (NGX_HTTP_LAST_2XX - 201) /* ngx_null_string, */ /* 300 */ ngx_string(ngx_http_error_301_page), ngx_string(ngx_http_error_302_page), ngx_string(ngx_http_error_303_page), ngx_null_string, /* 304 */ ngx_null_string, /* 305 */ ngx_null_string, /* 306 */ ngx_string(ngx_http_error_307_page), #define NGX_HTTP_LAST_3XX 308 #define NGX_HTTP_OFF_4XX (NGX_HTTP_LAST_3XX - 301 + NGX_HTTP_OFF_3XX) ngx_string(ngx_http_error_400_page), ngx_string(ngx_http_error_401_page), ngx_string(ngx_http_error_402_page), ngx_string(ngx_http_error_403_page), ngx_string(ngx_http_error_404_page),
#include <ngx_config.h> #include <ngx_core.h> #include <ngx_http.h> static ngx_int_t ngx_http_mytest_handler(ngx_http_request_t *r); static char * ngx_http_mytest(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); //处理配置项 static ngx_command_t ngx_http_mytest_commands[] = { { ngx_string("mytest"), NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LMT_CONF|NGX_CONF_NOARGS, ngx_http_mytest, NGX_HTTP_LOC_CONF_OFFSET, 0, NULL }, ngx_null_command }; //模块上下文 static ngx_http_module_t ngx_http_mytest_module_ctx = { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }; //新模块定义