comparison src/http/ngx_http_core_module.c @ 362:54fad6c4b555 NGINX_0_6_25

nginx 0.6.25 *) Change: now the "server_name_in_redirect" directive is used instead of the "server_name" directive's special "*" parameter. *) Change: now wildcard and regex names can be used as main name in a "server_name" directive. *) Change: the "satisfy_any" directive was replaced by the "satisfy" directive. *) Workaround: old worker processes might hog CPU after reconfiguration if they was run under Linux OpenVZ. *) Feature: the "min_delete_depth" directive. *) Bugfix: the COPY and MOVE methods did not work with single files. *) Bugfix: the ngx_http_gzip_static_module did not allow the ngx_http_dav_module to work; bug appeared in 0.6.23. *) Bugfix: socket leak in HTTPS mode if deferred accept was used. Thanks to Ben Maurer. *) Bugfix: nginx could not be built without PCRE library; bug appeared in 0.6.23.
author Igor Sysoev <http://sysoev.ru>
date Tue, 08 Jan 2008 00:00:00 +0300
parents 9121a0a91f47
children a39aab45a53f
comparison
equal deleted inserted replaced
361:160660bad929 362:54fad6c4b555
91 91
92 static ngx_conf_deprecated_t ngx_conf_deprecated_open_file_cache_retest = { 92 static ngx_conf_deprecated_t ngx_conf_deprecated_open_file_cache_retest = {
93 ngx_conf_deprecated, "open_file_cache_retest", "open_file_cache_valid" 93 ngx_conf_deprecated, "open_file_cache_retest", "open_file_cache_valid"
94 }; 94 };
95 95
96 static ngx_conf_deprecated_t ngx_conf_deprecated_satisfy_any = {
97 ngx_conf_deprecated, "satisfy_any", "satisfy"
98 };
99
96 100
97 static ngx_conf_enum_t ngx_http_core_request_body_in_file[] = { 101 static ngx_conf_enum_t ngx_http_core_request_body_in_file[] = {
98 { ngx_string("off"), NGX_HTTP_REQUEST_BODY_FILE_OFF }, 102 { ngx_string("off"), NGX_HTTP_REQUEST_BODY_FILE_OFF },
99 { ngx_string("on"), NGX_HTTP_REQUEST_BODY_FILE_ON }, 103 { ngx_string("on"), NGX_HTTP_REQUEST_BODY_FILE_ON },
100 { ngx_string("clean"), NGX_HTTP_REQUEST_BODY_FILE_CLEAN }, 104 { ngx_string("clean"), NGX_HTTP_REQUEST_BODY_FILE_CLEAN },
105 { ngx_null_string, 0 }
106 };
107
108
109 static ngx_conf_enum_t ngx_http_core_satisfy[] = {
110 { ngx_string("all"), NGX_HTTP_SATISFY_ALL },
111 { ngx_string("any"), NGX_HTTP_SATISFY_ANY },
101 { ngx_null_string, 0 } 112 { ngx_null_string, 0 }
102 }; 113 };
103 114
104 115
105 #if (NGX_HTTP_GZIP) 116 #if (NGX_HTTP_GZIP)
402 ngx_http_core_keepalive, 413 ngx_http_core_keepalive,
403 NGX_HTTP_LOC_CONF_OFFSET, 414 NGX_HTTP_LOC_CONF_OFFSET,
404 0, 415 0,
405 NULL }, 416 NULL },
406 417
418 { ngx_string("satisfy"),
419 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
420 ngx_conf_set_enum_slot,
421 NGX_HTTP_LOC_CONF_OFFSET,
422 offsetof(ngx_http_core_loc_conf_t, satisfy),
423 &ngx_http_core_satisfy },
424
407 { ngx_string("satisfy_any"), 425 { ngx_string("satisfy_any"),
408 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG, 426 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
409 ngx_conf_set_flag_slot, 427 ngx_conf_set_flag_slot,
410 NGX_HTTP_LOC_CONF_OFFSET, 428 NGX_HTTP_LOC_CONF_OFFSET,
411 offsetof(ngx_http_core_loc_conf_t, satisfy_any), 429 offsetof(ngx_http_core_loc_conf_t, satisfy),
412 NULL }, 430 &ngx_conf_deprecated_satisfy_any },
413 431
414 { ngx_string("internal"), 432 { ngx_string("internal"),
415 NGX_HTTP_LOC_CONF|NGX_CONF_NOARGS, 433 NGX_HTTP_LOC_CONF|NGX_CONF_NOARGS,
416 ngx_http_core_internal, 434 ngx_http_core_internal,
417 NGX_HTTP_LOC_CONF_OFFSET, 435 NGX_HTTP_LOC_CONF_OFFSET,
435 { ngx_string("reset_timedout_connection"), 453 { ngx_string("reset_timedout_connection"),
436 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG, 454 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
437 ngx_conf_set_flag_slot, 455 ngx_conf_set_flag_slot,
438 NGX_HTTP_LOC_CONF_OFFSET, 456 NGX_HTTP_LOC_CONF_OFFSET,
439 offsetof(ngx_http_core_loc_conf_t, reset_timedout_connection), 457 offsetof(ngx_http_core_loc_conf_t, reset_timedout_connection),
458 NULL },
459
460 { ngx_string("server_name_in_redirect"),
461 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
462 ngx_conf_set_flag_slot,
463 NGX_HTTP_LOC_CONF_OFFSET,
464 offsetof(ngx_http_core_loc_conf_t, server_name_in_redirect),
440 NULL }, 465 NULL },
441 466
442 { ngx_string("port_in_redirect"), 467 { ngx_string("port_in_redirect"),
443 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG, 468 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
444 ngx_conf_set_flag_slot, 469 ngx_conf_set_flag_slot,
909 return NGX_OK; 934 return NGX_OK;
910 } 935 }
911 936
912 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module); 937 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
913 938
914 if (clcf->satisfy_any == 0) { 939 if (clcf->satisfy == NGX_HTTP_SATISFY_ALL) {
915 940
916 if (rc == NGX_OK) { 941 if (rc == NGX_OK) {
917 r->phase_handler++; 942 r->phase_handler++;
918 return NGX_AGAIN; 943 return NGX_AGAIN;
919 } 944 }
1469 1494
1470 return NGX_OK; 1495 return NGX_OK;
1471 } 1496 }
1472 1497
1473 1498
1499 ngx_int_t
1500 ngx_http_server_addr(ngx_http_request_t *r, ngx_str_t *s)
1501 {
1502 socklen_t len;
1503 ngx_connection_t *c;
1504 struct sockaddr_in sin;
1505
1506 /* AF_INET only */
1507
1508 c = r->connection;
1509
1510 if (r->in_addr == 0) {
1511 len = sizeof(struct sockaddr_in);
1512 if (getsockname(c->fd, (struct sockaddr *) &sin, &len) == -1) {
1513 ngx_connection_error(c, ngx_socket_errno, "getsockname() failed");
1514 return NGX_ERROR;
1515 }
1516
1517 r->in_addr = sin.sin_addr.s_addr;
1518 }
1519
1520 if (s == NULL) {
1521 return NGX_OK;
1522 }
1523
1524 s->len = ngx_inet_ntop(c->listening->family, &r->in_addr,
1525 s->data, INET_ADDRSTRLEN);
1526
1527 return NGX_OK;
1528 }
1529
1530
1474 #if (NGX_HTTP_GZIP) 1531 #if (NGX_HTTP_GZIP)
1475 1532
1476 ngx_int_t 1533 ngx_int_t
1477 ngx_http_gzip_ok(ngx_http_request_t *r) 1534 ngx_http_gzip_ok(ngx_http_request_t *r)
1478 { 1535 {
1608 1665
1609 #if (NGX_PCRE) 1666 #if (NGX_PCRE)
1610 1667
1611 if (clcf->gzip_disable && r->headers_in.user_agent) { 1668 if (clcf->gzip_disable && r->headers_in.user_agent) {
1612 1669
1613 if (ngx_regex_exec_array(clcf->gzip_disable, 1670 if (ngx_regex_exec_array(clcf->gzip_disable,
1614 &r->headers_in.user_agent->value, 1671 &r->headers_in.user_agent->value,
1615 r->connection->log) 1672 r->connection->log)
1616 != NGX_DECLINED) 1673 != NGX_DECLINED)
1617 { 1674 {
1618 return NGX_DECLINED; 1675 return NGX_DECLINED;
1721 } 1778 }
1722 1779
1723 sr->in_addr = r->in_addr; 1780 sr->in_addr = r->in_addr;
1724 sr->port = r->port; 1781 sr->port = r->port;
1725 sr->port_text = r->port_text; 1782 sr->port_text = r->port_text;
1726 sr->server_name = r->server_name;
1727 1783
1728 sr->variables = r->variables; 1784 sr->variables = r->variables;
1729 1785
1730 sr->log_handler = r->log_handler; 1786 sr->log_handler = r->log_handler;
1731 1787
2633 */ 2689 */
2634 2690
2635 lcf->client_max_body_size = NGX_CONF_UNSET; 2691 lcf->client_max_body_size = NGX_CONF_UNSET;
2636 lcf->client_body_buffer_size = NGX_CONF_UNSET_SIZE; 2692 lcf->client_body_buffer_size = NGX_CONF_UNSET_SIZE;
2637 lcf->client_body_timeout = NGX_CONF_UNSET_MSEC; 2693 lcf->client_body_timeout = NGX_CONF_UNSET_MSEC;
2638 lcf->satisfy_any = NGX_CONF_UNSET; 2694 lcf->satisfy = NGX_CONF_UNSET_UINT;
2639 lcf->internal = NGX_CONF_UNSET; 2695 lcf->internal = NGX_CONF_UNSET;
2640 lcf->client_body_in_file_only = NGX_CONF_UNSET; 2696 lcf->client_body_in_file_only = NGX_CONF_UNSET;
2641 lcf->sendfile = NGX_CONF_UNSET; 2697 lcf->sendfile = NGX_CONF_UNSET;
2642 lcf->sendfile_max_chunk = NGX_CONF_UNSET_SIZE; 2698 lcf->sendfile_max_chunk = NGX_CONF_UNSET_SIZE;
2643 lcf->tcp_nopush = NGX_CONF_UNSET; 2699 lcf->tcp_nopush = NGX_CONF_UNSET;
2650 lcf->keepalive_header = NGX_CONF_UNSET; 2706 lcf->keepalive_header = NGX_CONF_UNSET;
2651 lcf->lingering_time = NGX_CONF_UNSET_MSEC; 2707 lcf->lingering_time = NGX_CONF_UNSET_MSEC;
2652 lcf->lingering_timeout = NGX_CONF_UNSET_MSEC; 2708 lcf->lingering_timeout = NGX_CONF_UNSET_MSEC;
2653 lcf->resolver_timeout = NGX_CONF_UNSET_MSEC; 2709 lcf->resolver_timeout = NGX_CONF_UNSET_MSEC;
2654 lcf->reset_timedout_connection = NGX_CONF_UNSET; 2710 lcf->reset_timedout_connection = NGX_CONF_UNSET;
2711 lcf->server_name_in_redirect = NGX_CONF_UNSET;
2655 lcf->port_in_redirect = NGX_CONF_UNSET; 2712 lcf->port_in_redirect = NGX_CONF_UNSET;
2656 lcf->msie_padding = NGX_CONF_UNSET; 2713 lcf->msie_padding = NGX_CONF_UNSET;
2657 lcf->msie_refresh = NGX_CONF_UNSET; 2714 lcf->msie_refresh = NGX_CONF_UNSET;
2658 lcf->log_not_found = NGX_CONF_UNSET; 2715 lcf->log_not_found = NGX_CONF_UNSET;
2659 lcf->recursive_error_pages = NGX_CONF_UNSET; 2716 lcf->recursive_error_pages = NGX_CONF_UNSET;
2668 lcf->open_file_cache_events = NGX_CONF_UNSET; 2725 lcf->open_file_cache_events = NGX_CONF_UNSET;
2669 2726
2670 #if (NGX_HTTP_GZIP) 2727 #if (NGX_HTTP_GZIP)
2671 lcf->gzip_vary = NGX_CONF_UNSET; 2728 lcf->gzip_vary = NGX_CONF_UNSET;
2672 lcf->gzip_http_version = NGX_CONF_UNSET_UINT; 2729 lcf->gzip_http_version = NGX_CONF_UNSET_UINT;
2730 #if (NGX_PCRE)
2673 lcf->gzip_disable = NGX_CONF_UNSET_PTR; 2731 lcf->gzip_disable = NGX_CONF_UNSET_PTR;
2732 #endif
2674 #endif 2733 #endif
2675 2734
2676 return lcf; 2735 return lcf;
2677 } 2736 }
2678 2737
2815 prev->client_body_buffer_size, 2874 prev->client_body_buffer_size,
2816 (size_t) 2 * ngx_pagesize); 2875 (size_t) 2 * ngx_pagesize);
2817 ngx_conf_merge_msec_value(conf->client_body_timeout, 2876 ngx_conf_merge_msec_value(conf->client_body_timeout,
2818 prev->client_body_timeout, 60000); 2877 prev->client_body_timeout, 60000);
2819 2878
2820 ngx_conf_merge_value(conf->satisfy_any, prev->satisfy_any, 0); 2879 ngx_conf_merge_uint_value(conf->satisfy, prev->satisfy,
2880 NGX_HTTP_SATISFY_ALL);
2821 ngx_conf_merge_value(conf->internal, prev->internal, 0); 2881 ngx_conf_merge_value(conf->internal, prev->internal, 0);
2822 ngx_conf_merge_value(conf->client_body_in_file_only, 2882 ngx_conf_merge_value(conf->client_body_in_file_only,
2823 prev->client_body_in_file_only, 0); 2883 prev->client_body_in_file_only, 0);
2824 ngx_conf_merge_value(conf->sendfile, prev->sendfile, 0); 2884 ngx_conf_merge_value(conf->sendfile, prev->sendfile, 0);
2825 ngx_conf_merge_size_value(conf->sendfile_max_chunk, 2885 ngx_conf_merge_size_value(conf->sendfile_max_chunk,
2859 NGX_HTTP_CLIENT_TEMP_PATH, 0, 0, 0, 2919 NGX_HTTP_CLIENT_TEMP_PATH, 0, 0, 0,
2860 ngx_garbage_collector_temp_handler, cf); 2920 ngx_garbage_collector_temp_handler, cf);
2861 2921
2862 ngx_conf_merge_value(conf->reset_timedout_connection, 2922 ngx_conf_merge_value(conf->reset_timedout_connection,
2863 prev->reset_timedout_connection, 0); 2923 prev->reset_timedout_connection, 0);
2924 ngx_conf_merge_value(conf->server_name_in_redirect,
2925 prev->server_name_in_redirect, 1);
2864 ngx_conf_merge_value(conf->port_in_redirect, prev->port_in_redirect, 1); 2926 ngx_conf_merge_value(conf->port_in_redirect, prev->port_in_redirect, 1);
2865 ngx_conf_merge_value(conf->msie_padding, prev->msie_padding, 1); 2927 ngx_conf_merge_value(conf->msie_padding, prev->msie_padding, 1);
2866 ngx_conf_merge_value(conf->msie_refresh, prev->msie_refresh, 0); 2928 ngx_conf_merge_value(conf->msie_refresh, prev->msie_refresh, 0);
2867 ngx_conf_merge_value(conf->log_not_found, prev->log_not_found, 1); 2929 ngx_conf_merge_value(conf->log_not_found, prev->log_not_found, 1);
2868 ngx_conf_merge_value(conf->recursive_error_pages, 2930 ngx_conf_merge_value(conf->recursive_error_pages,
2889 ngx_conf_merge_uint_value(conf->gzip_http_version, prev->gzip_http_version, 2951 ngx_conf_merge_uint_value(conf->gzip_http_version, prev->gzip_http_version,
2890 NGX_HTTP_VERSION_11); 2952 NGX_HTTP_VERSION_11);
2891 ngx_conf_merge_bitmask_value(conf->gzip_proxied, prev->gzip_proxied, 2953 ngx_conf_merge_bitmask_value(conf->gzip_proxied, prev->gzip_proxied,
2892 (NGX_CONF_BITMASK_SET|NGX_HTTP_GZIP_PROXIED_OFF)); 2954 (NGX_CONF_BITMASK_SET|NGX_HTTP_GZIP_PROXIED_OFF));
2893 2955
2956 #if (NGX_PCRE)
2894 ngx_conf_merge_ptr_value(conf->gzip_disable, prev->gzip_disable, NULL); 2957 ngx_conf_merge_ptr_value(conf->gzip_disable, prev->gzip_disable, NULL);
2958 #endif
2895 2959
2896 #endif 2960 #endif
2897 2961
2898 return NGX_CONF_OK; 2962 return NGX_CONF_OK;
2899 } 2963 }
3072 value = cf->args->elts; 3136 value = cf->args->elts;
3073 3137
3074 ch = value[1].data[0]; 3138 ch = value[1].data[0];
3075 3139
3076 if (cscf->server_name.data == NULL && value[1].len) { 3140 if (cscf->server_name.data == NULL && value[1].len) {
3077 if (ngx_strchr(value[1].data, '*')) {
3078 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
3079 "first server name \"%V\" must not be wildcard",
3080 &value[1]);
3081 return NGX_CONF_ERROR;
3082 }
3083
3084 if (value[1].data[0] == '~') {
3085 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
3086 "first server name \"%V\" "
3087 "must not be regular expression", &value[1]);
3088 return NGX_CONF_ERROR;
3089 }
3090
3091 name = value[1]; 3141 name = value[1];
3092 3142
3093 if (ch == '.') { 3143 if (ch == '.') {
3094 name.len--; 3144 name.len--;
3095 name.data++; 3145 name.data++;
3103 } 3153 }
3104 3154
3105 for (i = 1; i < cf->args->nelts; i++) { 3155 for (i = 1; i < cf->args->nelts; i++) {
3106 3156
3107 ch = value[i].data[0]; 3157 ch = value[i].data[0];
3108
3109 if (value[i].len == 1 && ch == '*') {
3110 cscf->wildcard = 1;
3111 continue;
3112 }
3113 3158
3114 if (value[i].len == 0 3159 if (value[i].len == 0
3115 || (ch == '*' && (value[i].len < 3 || value[i].data[1] != '.')) 3160 || (ch == '*' && (value[i].len < 3 || value[i].data[1] != '.'))
3116 || (ch == '.' && value[i].len < 2)) 3161 || (ch == '.' && value[i].len < 2))
3117 { 3162 {
3122 3167
3123 if (ngx_strchr(value[i].data, '/')) { 3168 if (ngx_strchr(value[i].data, '/')) {
3124 ngx_conf_log_error(NGX_LOG_WARN, cf, 0, 3169 ngx_conf_log_error(NGX_LOG_WARN, cf, 0,
3125 "server name \"%V\" has strange symbols", 3170 "server name \"%V\" has strange symbols",
3126 &value[i]); 3171 &value[i]);
3172 }
3173
3174 if (value[i].len == 1 && ch == '*') {
3175 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
3176 "\"server_name *\" is unsupported, use "
3177 "\"server_name_in_redirect off\" instead");
3178 return NGX_CONF_ERROR;
3127 } 3179 }
3128 3180
3129 sn = ngx_array_push(&cscf->server_names); 3181 sn = ngx_array_push(&cscf->server_names);
3130 if (sn == NULL) { 3182 if (sn == NULL) {
3131 return NGX_CONF_ERROR; 3183 return NGX_CONF_ERROR;