Mercurial > hg > nginx-vendor-current
comparison src/http/ngx_http_core_module.c @ 558:2da4537168f8 NGINX_0_8_31
nginx 0.8.31
*) Feature: now the "error_page" directive may redirect the 301 and 302
responses.
*) Feature: the $geoip_city_continent_code, $geoip_latitude, and
$geoip_longitude variables.
Thanks to Arvind Sundararajan.
*) Feature: now the ngx_http_image_filter_module deletes always EXIF
and other application specific data if the data consume more than 5%
of a JPEG file.
*) Bugfix: nginx closed a connection if a cached response had an empty
body.
Thanks to Piotr Sikora.
*) Bugfix: nginx might not be built by gcc 4.x if the -O2 or higher
optimization option was used.
Thanks to Maxim Dounin and Denis F. Latypoff.
*) Bugfix: regular expressions in location were always tested in
case-sensitive mode; the bug had appeared in 0.8.25.
*) Bugfix: nginx cached a 304 response if there was the "If-None-Match"
header line in a proxied request.
Thanks to Tim Dettrick and David Kostal.
*) Bugfix: nginx/Windows tried to delete a temporary file twice if the
file should replace an already existent file.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Wed, 23 Dec 2009 00:00:00 +0300 |
parents | 25255878df91 |
children | 7fa8dc2315bd |
comparison
equal
deleted
inserted
replaced
557:72104cd120ec | 558:2da4537168f8 |
---|---|
2586 rc.err.len = NGX_MAX_CONF_ERRSTR; | 2586 rc.err.len = NGX_MAX_CONF_ERRSTR; |
2587 rc.err.data = errstr; | 2587 rc.err.data = errstr; |
2588 | 2588 |
2589 #if (NGX_HAVE_CASELESS_FILESYSTEM) | 2589 #if (NGX_HAVE_CASELESS_FILESYSTEM) |
2590 rc.options = NGX_REGEX_CASELESS; | 2590 rc.options = NGX_REGEX_CASELESS; |
2591 #else | |
2592 rc.options = caseless; | |
2591 #endif | 2593 #endif |
2592 | 2594 |
2593 clcf->regex = ngx_http_regex_compile(cf, &rc); | 2595 clcf->regex = ngx_http_regex_compile(cf, &rc); |
2594 if (clcf->regex == NULL) { | 2596 if (clcf->regex == NULL) { |
2595 return NGX_ERROR; | 2597 return NGX_ERROR; |
2846 prev->underscores_in_headers, 0); | 2848 prev->underscores_in_headers, 0); |
2847 | 2849 |
2848 if (!conf->listen) { | 2850 if (!conf->listen) { |
2849 ngx_memzero(&lsopt, sizeof(ngx_http_listen_opt_t)); | 2851 ngx_memzero(&lsopt, sizeof(ngx_http_listen_opt_t)); |
2850 | 2852 |
2851 sin = (struct sockaddr_in *) &lsopt.sockaddr; | 2853 sin = &lsopt.u.sockaddr_in; |
2852 | 2854 |
2853 sin->sin_family = AF_INET; | 2855 sin->sin_family = AF_INET; |
2854 #if (NGX_WIN32) | 2856 #if (NGX_WIN32) |
2855 sin->sin_port = htons(80); | 2857 sin->sin_port = htons(80); |
2856 #else | 2858 #else |
2863 lsopt.backlog = NGX_LISTEN_BACKLOG; | 2865 lsopt.backlog = NGX_LISTEN_BACKLOG; |
2864 lsopt.rcvbuf = -1; | 2866 lsopt.rcvbuf = -1; |
2865 lsopt.sndbuf = -1; | 2867 lsopt.sndbuf = -1; |
2866 lsopt.wildcard = 1; | 2868 lsopt.wildcard = 1; |
2867 | 2869 |
2868 (void) ngx_sock_ntop((struct sockaddr *) &lsopt.sockaddr, lsopt.addr, | 2870 (void) ngx_sock_ntop(&lsopt.u.sockaddr, lsopt.addr, |
2869 NGX_SOCKADDR_STRLEN, 1); | 2871 NGX_SOCKADDR_STRLEN, 1); |
2870 | 2872 |
2871 if (ngx_http_add_listen(cf, conf, &lsopt) == NGX_OK) { | 2873 if (ngx_http_add_listen(cf, conf, &lsopt) == NGX_OK) { |
2872 return NGX_CONF_OK; | 2874 return NGX_CONF_OK; |
2873 } | 2875 } |
3271 return NGX_CONF_ERROR; | 3273 return NGX_CONF_ERROR; |
3272 } | 3274 } |
3273 | 3275 |
3274 ngx_memzero(&lsopt, sizeof(ngx_http_listen_opt_t)); | 3276 ngx_memzero(&lsopt, sizeof(ngx_http_listen_opt_t)); |
3275 | 3277 |
3276 ngx_memcpy(lsopt.sockaddr, u.sockaddr, u.socklen); | 3278 ngx_memcpy(&lsopt.u.sockaddr, u.sockaddr, u.socklen); |
3277 | 3279 |
3278 lsopt.socklen = u.socklen; | 3280 lsopt.socklen = u.socklen; |
3279 lsopt.backlog = NGX_LISTEN_BACKLOG; | 3281 lsopt.backlog = NGX_LISTEN_BACKLOG; |
3280 lsopt.rcvbuf = -1; | 3282 lsopt.rcvbuf = -1; |
3281 lsopt.sndbuf = -1; | 3283 lsopt.sndbuf = -1; |
3282 lsopt.wildcard = u.wildcard; | 3284 lsopt.wildcard = u.wildcard; |
3283 | 3285 |
3284 (void) ngx_sock_ntop((struct sockaddr *) &lsopt.sockaddr, lsopt.addr, | 3286 (void) ngx_sock_ntop(&lsopt.u.sockaddr, lsopt.addr, |
3285 NGX_SOCKADDR_STRLEN, 1); | 3287 NGX_SOCKADDR_STRLEN, 1); |
3286 | 3288 |
3287 for (n = 2; n < cf->args->nelts; n++) { | 3289 for (n = 2; n < cf->args->nelts; n++) { |
3288 | 3290 |
3289 if (ngx_strcmp(value[n].data, "default_server") == 0 | 3291 if (ngx_strcmp(value[n].data, "default_server") == 0 |
3376 | 3378 |
3377 if (ngx_strncmp(value[n].data, "ipv6only=o", 10) == 0) { | 3379 if (ngx_strncmp(value[n].data, "ipv6only=o", 10) == 0) { |
3378 #if (NGX_HAVE_INET6 && defined IPV6_V6ONLY) | 3380 #if (NGX_HAVE_INET6 && defined IPV6_V6ONLY) |
3379 struct sockaddr *sa; | 3381 struct sockaddr *sa; |
3380 | 3382 |
3381 sa = (struct sockaddr *) lsopt.sockaddr; | 3383 sa = &lsopt.u.sockaddr; |
3382 | 3384 |
3383 if (sa->sa_family == AF_INET6) { | 3385 if (sa->sa_family == AF_INET6) { |
3384 | 3386 |
3385 if (ngx_strcmp(&value[n].data[10], "n") == 0) { | 3387 if (ngx_strcmp(&value[n].data[10], "n") == 0) { |
3386 lsopt.ipv6only = 1; | 3388 lsopt.ipv6only = 1; |
3896 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, | 3898 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, |
3897 "invalid value \"%V\"", &value[i]); | 3899 "invalid value \"%V\"", &value[i]); |
3898 return NGX_CONF_ERROR; | 3900 return NGX_CONF_ERROR; |
3899 } | 3901 } |
3900 | 3902 |
3901 if (err->status < 400 || err->status > 599) { | 3903 if (err->status < 300 || err->status > 599) { |
3902 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, | 3904 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, |
3903 "value \"%V\" must be between 400 and 599", | 3905 "value \"%V\" must be between 300 and 599", |
3904 &value[i]); | 3906 &value[i]); |
3905 return NGX_CONF_ERROR; | 3907 return NGX_CONF_ERROR; |
3906 } | 3908 } |
3907 | 3909 |
3908 if (overwrite >= 0) { | 3910 if (overwrite >= 0) { |
4316 { | 4318 { |
4317 size_t *sp = data; | 4319 size_t *sp = data; |
4318 | 4320 |
4319 if (*sp < NGX_MIN_POOL_SIZE) { | 4321 if (*sp < NGX_MIN_POOL_SIZE) { |
4320 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, | 4322 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, |
4321 "pool must be no less than %uz", NGX_MIN_POOL_SIZE); | 4323 "the pool size must be no less than %uz", |
4322 | 4324 NGX_MIN_POOL_SIZE); |
4323 return NGX_CONF_ERROR; | 4325 return NGX_CONF_ERROR; |
4324 } | 4326 } |
4325 | 4327 |
4328 if (*sp % NGX_POOL_ALIGNMENT) { | |
4329 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, | |
4330 "the pool size must be a multiple of %uz", | |
4331 NGX_POOL_ALIGNMENT); | |
4332 return NGX_CONF_ERROR; | |
4333 } | |
4334 | |
4326 return NGX_CONF_OK; | 4335 return NGX_CONF_OK; |
4327 } | 4336 } |