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 }