Mercurial > hg > nginx-quic
comparison src/http/ngx_http_core_module.c @ 1804:d457a1576532
several changes in server_name:
*) server_name_in_redirect directive and removal of the '*' stub
*) use server address in redirect if host can not be detected
*) ngx_http_server_addr()
*) allow wildcard and regex names to be a main server_name
*) DAV Destination header is tested against Host header
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Sat, 29 Dec 2007 15:30:39 +0000 |
parents | a4cb9c04e7f2 |
children | ba9e6e57f65d |
comparison
equal
deleted
inserted
replaced
1803:7405719e4848 | 1804:d457a1576532 |
---|---|
437 ngx_conf_set_flag_slot, | 437 ngx_conf_set_flag_slot, |
438 NGX_HTTP_LOC_CONF_OFFSET, | 438 NGX_HTTP_LOC_CONF_OFFSET, |
439 offsetof(ngx_http_core_loc_conf_t, reset_timedout_connection), | 439 offsetof(ngx_http_core_loc_conf_t, reset_timedout_connection), |
440 NULL }, | 440 NULL }, |
441 | 441 |
442 { ngx_string("server_name_in_redirect"), | |
443 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG, | |
444 ngx_conf_set_flag_slot, | |
445 NGX_HTTP_LOC_CONF_OFFSET, | |
446 offsetof(ngx_http_core_loc_conf_t, server_name_in_redirect), | |
447 NULL }, | |
448 | |
442 { ngx_string("port_in_redirect"), | 449 { ngx_string("port_in_redirect"), |
443 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG, | 450 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG, |
444 ngx_conf_set_flag_slot, | 451 ngx_conf_set_flag_slot, |
445 NGX_HTTP_LOC_CONF_OFFSET, | 452 NGX_HTTP_LOC_CONF_OFFSET, |
446 offsetof(ngx_http_core_loc_conf_t, port_in_redirect), | 453 offsetof(ngx_http_core_loc_conf_t, port_in_redirect), |
1464 | 1471 |
1465 r->headers_in.user.len = len; | 1472 r->headers_in.user.len = len; |
1466 r->headers_in.user.data = auth.data; | 1473 r->headers_in.user.data = auth.data; |
1467 r->headers_in.passwd.len = auth.len - len - 1; | 1474 r->headers_in.passwd.len = auth.len - len - 1; |
1468 r->headers_in.passwd.data = &auth.data[len + 1]; | 1475 r->headers_in.passwd.data = &auth.data[len + 1]; |
1476 | |
1477 return NGX_OK; | |
1478 } | |
1479 | |
1480 | |
1481 ngx_int_t | |
1482 ngx_http_server_addr(ngx_http_request_t *r, ngx_str_t *s) | |
1483 { | |
1484 socklen_t len; | |
1485 ngx_connection_t *c; | |
1486 struct sockaddr_in sin; | |
1487 | |
1488 /* AF_INET only */ | |
1489 | |
1490 c = r->connection; | |
1491 | |
1492 if (r->in_addr == 0) { | |
1493 len = sizeof(struct sockaddr_in); | |
1494 if (getsockname(c->fd, (struct sockaddr *) &sin, &len) == -1) { | |
1495 ngx_connection_error(c, ngx_socket_errno, "getsockname() failed"); | |
1496 return NGX_ERROR; | |
1497 } | |
1498 | |
1499 r->in_addr = sin.sin_addr.s_addr; | |
1500 } | |
1501 | |
1502 if (s == NULL) { | |
1503 return NGX_OK; | |
1504 } | |
1505 | |
1506 s->len = ngx_inet_ntop(c->listening->family, &r->in_addr, | |
1507 s->data, INET_ADDRSTRLEN); | |
1469 | 1508 |
1470 return NGX_OK; | 1509 return NGX_OK; |
1471 } | 1510 } |
1472 | 1511 |
1473 | 1512 |
2650 lcf->keepalive_header = NGX_CONF_UNSET; | 2689 lcf->keepalive_header = NGX_CONF_UNSET; |
2651 lcf->lingering_time = NGX_CONF_UNSET_MSEC; | 2690 lcf->lingering_time = NGX_CONF_UNSET_MSEC; |
2652 lcf->lingering_timeout = NGX_CONF_UNSET_MSEC; | 2691 lcf->lingering_timeout = NGX_CONF_UNSET_MSEC; |
2653 lcf->resolver_timeout = NGX_CONF_UNSET_MSEC; | 2692 lcf->resolver_timeout = NGX_CONF_UNSET_MSEC; |
2654 lcf->reset_timedout_connection = NGX_CONF_UNSET; | 2693 lcf->reset_timedout_connection = NGX_CONF_UNSET; |
2694 lcf->server_name_in_redirect = NGX_CONF_UNSET; | |
2655 lcf->port_in_redirect = NGX_CONF_UNSET; | 2695 lcf->port_in_redirect = NGX_CONF_UNSET; |
2656 lcf->msie_padding = NGX_CONF_UNSET; | 2696 lcf->msie_padding = NGX_CONF_UNSET; |
2657 lcf->msie_refresh = NGX_CONF_UNSET; | 2697 lcf->msie_refresh = NGX_CONF_UNSET; |
2658 lcf->log_not_found = NGX_CONF_UNSET; | 2698 lcf->log_not_found = NGX_CONF_UNSET; |
2659 lcf->recursive_error_pages = NGX_CONF_UNSET; | 2699 lcf->recursive_error_pages = NGX_CONF_UNSET; |
2861 NGX_HTTP_CLIENT_TEMP_PATH, 0, 0, 0, | 2901 NGX_HTTP_CLIENT_TEMP_PATH, 0, 0, 0, |
2862 ngx_garbage_collector_temp_handler, cf); | 2902 ngx_garbage_collector_temp_handler, cf); |
2863 | 2903 |
2864 ngx_conf_merge_value(conf->reset_timedout_connection, | 2904 ngx_conf_merge_value(conf->reset_timedout_connection, |
2865 prev->reset_timedout_connection, 0); | 2905 prev->reset_timedout_connection, 0); |
2906 ngx_conf_merge_value(conf->server_name_in_redirect, | |
2907 prev->server_name_in_redirect, 1); | |
2866 ngx_conf_merge_value(conf->port_in_redirect, prev->port_in_redirect, 1); | 2908 ngx_conf_merge_value(conf->port_in_redirect, prev->port_in_redirect, 1); |
2867 ngx_conf_merge_value(conf->msie_padding, prev->msie_padding, 1); | 2909 ngx_conf_merge_value(conf->msie_padding, prev->msie_padding, 1); |
2868 ngx_conf_merge_value(conf->msie_refresh, prev->msie_refresh, 0); | 2910 ngx_conf_merge_value(conf->msie_refresh, prev->msie_refresh, 0); |
2869 ngx_conf_merge_value(conf->log_not_found, prev->log_not_found, 1); | 2911 ngx_conf_merge_value(conf->log_not_found, prev->log_not_found, 1); |
2870 ngx_conf_merge_value(conf->recursive_error_pages, | 2912 ngx_conf_merge_value(conf->recursive_error_pages, |
3076 value = cf->args->elts; | 3118 value = cf->args->elts; |
3077 | 3119 |
3078 ch = value[1].data[0]; | 3120 ch = value[1].data[0]; |
3079 | 3121 |
3080 if (cscf->server_name.data == NULL && value[1].len) { | 3122 if (cscf->server_name.data == NULL && value[1].len) { |
3081 if (ngx_strchr(value[1].data, '*')) { | |
3082 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, | |
3083 "first server name \"%V\" must not be wildcard", | |
3084 &value[1]); | |
3085 return NGX_CONF_ERROR; | |
3086 } | |
3087 | |
3088 if (value[1].data[0] == '~') { | |
3089 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, | |
3090 "first server name \"%V\" " | |
3091 "must not be regular expression", &value[1]); | |
3092 return NGX_CONF_ERROR; | |
3093 } | |
3094 | |
3095 name = value[1]; | 3123 name = value[1]; |
3096 | 3124 |
3097 if (ch == '.') { | 3125 if (ch == '.') { |
3098 name.len--; | 3126 name.len--; |
3099 name.data++; | 3127 name.data++; |
3107 } | 3135 } |
3108 | 3136 |
3109 for (i = 1; i < cf->args->nelts; i++) { | 3137 for (i = 1; i < cf->args->nelts; i++) { |
3110 | 3138 |
3111 ch = value[i].data[0]; | 3139 ch = value[i].data[0]; |
3112 | |
3113 if (value[i].len == 1 && ch == '*') { | |
3114 cscf->wildcard = 1; | |
3115 continue; | |
3116 } | |
3117 | 3140 |
3118 if (value[i].len == 0 | 3141 if (value[i].len == 0 |
3119 || (ch == '*' && (value[i].len < 3 || value[i].data[1] != '.')) | 3142 || (ch == '*' && (value[i].len < 3 || value[i].data[1] != '.')) |
3120 || (ch == '.' && value[i].len < 2)) | 3143 || (ch == '.' && value[i].len < 2)) |
3121 { | 3144 { |