You are viewing a plain text version of this content. The canonical link for it is here.
Posted to apache-bugdb@apache.org by Graham Leggett <mi...@sharp.fm> on 1999/10/13 05:10:27 UTC
Re: mod_proxy/4236: Reverse proxy features disables caching features
The following reply was made to PR mod_proxy/4236; it has been noted by GNATS.
From: Graham Leggett <mi...@sharp.fm>
To: apbugs@Apache.Org
Cc: Subject: Re: mod_proxy/4236: Reverse proxy features disables caching features
Date: Mon, 11 Oct 1999 18:51:06 +0200
This is a multi-part message in MIME format.
--------------D4FF865243CCC024B2ABF2D1
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Hi all,
The following patch fixes this problem, and also fixes a bug where the
default value of ProxyReceiveBufferSize was left uninitalised which
could have caused sporadic problems with the proxy.
Regards,
Graham
--
-----------------------------------------
minfrin@sharp.fm "There's a moon
over Bourbon Street
tonight...
--------------D4FF865243CCC024B2ABF2D1
Content-Type: text/plain; charset=us-ascii;
name="proxy-config-fix.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="proxy-config-fix.patch"
diff -c -r apache_1.3.9-orig/src/CHANGES apache_1.3.9/src/CHANGES
*** apache_1.3.9-orig/src/CHANGES Sat Aug 14 05:21:15 1999
--- apache_1.3.9/src/CHANGES Fri Oct 1 05:11:14 1999
***************
*** 1,5 ****
--- 1,12 ----
Changes with Apache 1.3.9
+ *) Fix problem with proxy configuration where globally set configuration
+ options were overridden inside virtual hosts.
+ [Graham Leggett <mi...@sharp.fm>]
+
+ *) Fix ProxyReceiveBufferSize where default value was left uninitialised.
+ [Graham Leggett <mi...@sharp.fm>]
+
*) Remove bogus error message when a redirect doesn't set Location.
Instead, use an empty string to avoid coredump if the error message
was supposed to include a location. [Roy Fielding]
diff -c -r apache_1.3.9-orig/src/modules/proxy/mod_proxy.c apache_1.3.9/src/modules/proxy/mod_proxy.c
*** apache_1.3.9-orig/src/modules/proxy/mod_proxy.c Wed Mar 10 12:42:46 1999
--- apache_1.3.9/src/modules/proxy/mod_proxy.c Fri Oct 1 04:48:46 1999
***************
*** 417,434 ****
--- 417,481 ----
ps->allowed_connect_ports = ap_make_array(p, 10, sizeof(int));
ps->domain = NULL;
ps->viaopt = via_off; /* initially backward compatible with 1.3.1 */
+ ps->viaopt_set = 0; /* 0 means default */
ps->req = 0;
+ ps->req_set = 0;
+ ps->recv_buffer_size = 0; /* this default was left unset for some reason */
+ ps->recv_buffer_size_set = 0;
ps->cache.root = NULL;
ps->cache.space = DEFAULT_CACHE_SPACE;
+ ps->cache.space_set = 0;
ps->cache.maxexpire = DEFAULT_CACHE_MAXEXPIRE;
+ ps->cache.maxexpire_set = 0;
ps->cache.defaultexpire = DEFAULT_CACHE_EXPIRE;
+ ps->cache.defaultexpire_set = 0;
ps->cache.lmfactor = DEFAULT_CACHE_LMFACTOR;
+ ps->cache.lmfactor_set = 0;
ps->cache.gcinterval = -1;
+ ps->cache.gcinterval_set = 0;
/* at these levels, the cache can have 2^18 directories (256,000) */
ps->cache.dirlevels = 3;
+ ps->cache.dirlevels_set = 0;
ps->cache.dirlength = 1;
+ ps->cache.dirlength_set = 0;
ps->cache.cache_completion = DEFAULT_CACHE_COMPLETION;
+ ps->cache.cache_completion_set = 0;
+
+ return ps;
+ }
+
+ static void *
+ merge_proxy_config(pool *p, void *basev,
+ void *overridesv)
+ {
+ proxy_server_conf *ps = ap_pcalloc(p, sizeof(proxy_server_conf));
+ proxy_server_conf *base = (proxy_server_conf *) basev;
+ proxy_server_conf *overrides = (proxy_server_conf *) overridesv;
+
+ ps->proxies = ap_append_arrays(p, base->proxies, overrides->proxies);
+ ps->aliases = ap_append_arrays(p, base->aliases, overrides->aliases);
+ ps->raliases = ap_append_arrays(p, base->raliases, overrides->raliases);
+ ps->noproxies = ap_append_arrays(p, base->noproxies, overrides->noproxies);
+ ps->dirconn = ap_append_arrays(p, base->dirconn, overrides->dirconn);
+ ps->nocaches = ap_append_arrays(p, base->nocaches, overrides->nocaches);
+ ps->allowed_connect_ports = ap_append_arrays(p, base->allowed_connect_ports, overrides->allowed_connect_ports);
+
+ ps->domain = (overrides->domain == NULL) ? base->domain : overrides->domain;
+ ps->viaopt = (overrides->viaopt_set == 0) ? base->viaopt : overrides->viaopt;
+ ps->req = (overrides->req_set == 0) ? base->req : overrides->req;
+ ps->recv_buffer_size = (overrides->recv_buffer_size_set == 0) ? base->recv_buffer_size : overrides->recv_buffer_size;
+
+ ps->cache.root = (overrides->cache.root == NULL) ? base->cache.root : overrides->cache.root;
+ ps->cache.space = (overrides->cache.space_set == 0) ? base->cache.space : overrides->cache.space;
+ ps->cache.maxexpire = (overrides->cache.maxexpire_set == 0) ? base->cache.maxexpire : overrides->cache.maxexpire;
+ ps->cache.defaultexpire = (overrides->cache.defaultexpire_set == 0) ? base->cache.defaultexpire : overrides->cache.defaultexpire;
+ ps->cache.lmfactor = (overrides->cache.lmfactor_set == 0) ? base->cache.lmfactor : overrides->cache.lmfactor;
+ ps->cache.gcinterval = (overrides->cache.gcinterval_set == 0) ? base->cache.gcinterval : overrides->cache.gcinterval;
+ /* at these levels, the cache can have 2^18 directories (256,000) */
+ ps->cache.dirlevels = (overrides->cache.dirlevels_set == 0) ? base->cache.dirlevels : overrides->cache.dirlevels;
+ ps->cache.dirlength = (overrides->cache.dirlength_set == 0) ? base->cache.dirlength : overrides->cache.dirlength;
+ ps->cache.cache_completion = (overrides->cache.cache_completion_set == 0) ? base->cache.cache_completion : overrides->cache.cache_completion;
return ps;
}
***************
*** 627,632 ****
--- 674,680 ----
ap_get_module_config(parms->server->module_config, &proxy_module);
psf->req = flag;
+ psf->req_set = 1;
return NULL;
}
***************
*** 641,646 ****
--- 689,695 ----
if (sscanf(arg, "%d", &val) != 1)
return "CacheSize value must be an integer (kBytes)";
psf->cache.space = val;
+ psf->cache.space_set = 1;
return NULL;
}
***************
*** 665,670 ****
--- 714,720 ----
if (sscanf(arg, "%lg", &val) != 1)
return "CacheLastModifiedFactor value must be a float";
psf->cache.lmfactor = val;
+ psf->cache.lmfactor_set = 1;
return NULL;
}
***************
*** 679,684 ****
--- 729,735 ----
if (sscanf(arg, "%lg", &val) != 1)
return "CacheMaxExpire value must be a float";
psf->cache.maxexpire = (int) (val * (double) SEC_ONE_HR);
+ psf->cache.maxexpire_set = 1;
return NULL;
}
***************
*** 692,697 ****
--- 743,749 ----
if (sscanf(arg, "%lg", &val) != 1)
return "CacheDefaultExpire value must be a float";
psf->cache.defaultexpire = (int) (val * (double) SEC_ONE_HR);
+ psf->cache.defaultexpire_set = 1;
return NULL;
}
***************
*** 705,710 ****
--- 757,763 ----
if (sscanf(arg, "%lg", &val) != 1)
return "CacheGcInterval value must be a float";
psf->cache.gcinterval = (int) (val * (double) SEC_ONE_HR);
+ psf->cache.gcinterval_set = 1;
return NULL;
}
***************
*** 721,726 ****
--- 774,780 ----
if (val * psf->cache.dirlength > CACHEFILE_LEN)
return "CacheDirLevels*CacheDirLength value must not be higher than 20";
psf->cache.dirlevels = val;
+ psf->cache.dirlevels_set = 1;
return NULL;
}
***************
*** 737,742 ****
--- 791,797 ----
if (val * psf->cache.dirlevels > CACHEFILE_LEN)
return "CacheDirLevels*CacheDirLength value must not be higher than 20";
psf->cache.dirlength = val;
+ psf->cache.dirlength_set = 1;
return NULL;
}
***************
*** 782,787 ****
--- 837,843 ----
}
psf->recv_buffer_size = s;
+ psf->recv_buffer_size_set = 1;
return NULL;
}
***************
*** 798,803 ****
--- 854,861 ----
if (s > 0)
psf->cache.cache_completion = ((float)s / 100);
+
+ psf->cache.cache_completion = 1;
return NULL;
}
***************
*** 820,825 ****
--- 878,884 ----
"off | on | full | block";
}
+ psf->viaopt_set = 1;
return NULL;
}
***************
*** 881,887 ****
NULL, /* create per-directory config structure */
NULL, /* merge per-directory config structures */
create_proxy_config, /* create per-server config structure */
! NULL, /* merge per-server config structures */
proxy_cmds, /* command table */
proxy_handlers, /* handlers */
proxy_trans, /* translate_handler */
--- 940,946 ----
NULL, /* create per-directory config structure */
NULL, /* merge per-directory config structures */
create_proxy_config, /* create per-server config structure */
! merge_proxy_config, /* merge per-server config structures */
proxy_cmds, /* command table */
proxy_handlers, /* handlers */
proxy_trans, /* translate_handler */
diff -c -r apache_1.3.9-orig/src/modules/proxy/mod_proxy.h apache_1.3.9/src/modules/proxy/mod_proxy.h
*** apache_1.3.9-orig/src/modules/proxy/mod_proxy.h Sun Feb 7 15:48:31 1999
--- apache_1.3.9/src/modules/proxy/mod_proxy.h Mon Sep 27 08:50:07 1999
***************
*** 193,205 ****
--- 193,213 ----
struct cache_conf {
const char *root; /* the location of the cache directory */
off_t space; /* Maximum cache size (in 1024 bytes) */
+ char space_set;
time_t maxexpire; /* Maximum time to keep cached files in secs */
+ char maxexpire_set;
time_t defaultexpire; /* default time to keep cached file in secs */
+ char defaultexpire_set;
double lmfactor; /* factor for estimating expires date */
+ char lmfactor_set;
time_t gcinterval; /* garbage collection interval, in seconds */
+ char gcinterval_set;
int dirlevels; /* Number of levels of subdirectories */
+ char dirlevels_set;
int dirlength; /* Length of subdirectory names */
+ char dirlength_set;
float cache_completion; /* Force cache completion after this point */
+ char cache_completion_set;
};
typedef struct {
***************
*** 213,225 ****
--- 221,236 ----
array_header *allowed_connect_ports;
char *domain; /* domain name to use in absence of a domain name in the request */
int req; /* true if proxy requests are enabled */
+ char req_set;
enum {
via_off,
via_on,
via_block,
via_full
} viaopt; /* how to deal with proxy Via: headers */
+ char viaopt_set;
size_t recv_buffer_size;
+ char recv_buffer_size_set;
} proxy_server_conf;
struct hdr_entry {
--------------D4FF865243CCC024B2ABF2D1--