25#if (MODULE_MAGIC_NUMBER_MAJOR > 20020903)
36#define MAX(x,y) ((x) >= (y) ? (x) : (y))
113 return "LoadFactor must be a number between 1..100";
123 return "Retry must be a positive value";
133 return "TTL must be at least one second";
141 return "Min must be a positive number";
149 return "Max must be a positive number";
159 return "Smax must be a positive number";
168 return "Acquire timeout has wrong format";
170 return "Acquire must be at least one millisecond";
180 return "Timeout must be at least one second";
187 return "IOBufferSize must be >= 512 bytes, or 0 for system default.";
195 return "ReceiveBufferSize must be >= 512 bytes, or 0 for system default.";
206 return "KeepAlive must be On|Off";
215 return "DisableReuse must be On|Off";
224 return "EnableReuse must be On|Off";
240 return "AddressTTL must be -1 or a number of seconds not "
248 if (strlen(
val) >=
sizeof(worker->
s->
route))
249 return apr_psprintf(
p,
"Route length must be < %d characters",
250 (
int)
sizeof(worker->
s->
route));
257 return apr_psprintf(
p,
"Redirect length must be < %d characters",
267 for (v =
val; *v; v++) {
272 else if (*v ==
'-') {
278 return "Unknown status parameter option";
289 return "flushpackets must be on|off|auto";
294 return "flushwait must be <= 1000, or 0 for system default of 10 millseconds.";
305 return "Ping/Pong timeout has wrong format";
307 return "Ping/Pong timeout must be at least one millisecond";
314 return "lbset must be between 0 and 99";
322 return "Connectiontimeout has wrong format";
324 return "Connectiontimeout must be at least one millisecond.";
330 return apr_psprintf(
p,
"flusher name length must be < %d characters",
337 return apr_psprintf(
p,
"upgrade protocol length must be < %d characters",
344 return "ResponseFieldSize must be greater than 0 bytes, or 0 for system default.";
351 return apr_psprintf(
p,
"Secret length must be < %d characters",
352 (
int)
sizeof(worker->
s->
secret));
359 return "unknown Worker parameter";
380 apr_psprintf(
p,
"stickysession length must be < %d characters",
394 if (strlen(
val) != 1) {
398 return "stickysessionsep must be a single character or Off";
414 return "failover must be On|Off";
425 return "timeout must be at least one second";
434 return "maximum number of attempts must be a positive number";
440 if (strlen(
val) > (
sizeof(balancer->
s->
lbpname)-1))
441 return "unknown lbmethod";
450 return "lbmethod name too large";
453 return "unknown lbmethod";
465 return "scolonpathdelim must be On|Off";
484 return "failonstatus must be one or more HTTP response codes";
496 return "failontimeout must be On|Off";
501 *balancer->
s->
nonce =
'\0';
505 return "Provided nonce is too large";
513 return "growth must be between 1 and 100";
523 return "forcerecovery must be On|Off";
527 return "unknown Balancer parameter";
599 if (
uri[0] !=
'/' || alias[0] !=
'/') {
651 }
while (map[
map_pos - 1] !=
'/');
849 "attempting to match URI path '%s' against %s '%s' for "
850 "proxying",
r->
uri, (
ent->regex ?
"pattern" :
"prefix"),
855 if ((real[0] ==
'!') && (real[1] ==
'\0')) {
857 "proxying is explicitly disabled for URI path "
858 "'%s'; declining",
r->
uri);
871 "Substitution in regular expression failed. "
872 "Replacement too long?");
908 if ((real[0] ==
'!') && (real[1] ==
'\0')) {
910 "proxying is explicitly disabled for URI path "
911 "'%s'; declining",
r->
uri);
926 "Unescaped URL path matched ProxyPass; ignoring unsafe nocanon");
957 "Servlet path '%s' (%s) matches proxy handler '%s'",
970 "URI path '%s' matches proxy handler '%s'",
r->
uri,
973 return (encoded) ?
DONE :
OK;
1202 "Domain missing: %s sent to %s%s%s",
r->
uri,
1205 ref ?
" from " :
"", ref ? ref :
"");
1215 char *
uri, *scheme, *
p;
1228 int attempts = 0, max_attempts = 0;
1262 "proxy_handler no URL in %s",
r->
filename);
1273 "Max-Forwards value '%s' could not be parsed",
str);
1275 "Max-Forwards request header could not be parsed");
1277 else if (maxfwd == 0) {
1295 "Max-Forwards has reached zero - proxy loop?");
1299 maxfwd = (maxfwd > 0) ? maxfwd - 1 : 0;
1320 "TRACE forbidden by server configuration");
1323 "TRACE forbidden by server configuration");
1338 "TRACE with request body is not allowed");
1341 "TRACE with request body is not allowed");
1395 for (
i = 0;
i < proxies->
nelts;
i++) {
1398 (
ents[
i].use_regex &&
1403 strlen(
ents[
i].scheme)) == 0)) {
1407 "Trying to run scheme_handler against proxy");
1409 if (
ents[
i].creds) {
1412 "Using proxy auth creds %s",
ents[
i].creds);
1466 "Running scheme %s handler (attempt %d)",
1511 "No protocol handler was valid for the URL %s "
1513 "If you are using a DSO version of mod_proxy, make sure "
1514 "the proxy submodules are included in the configuration "
1515 "using LoadModule.",
r->
uri, scheme);
1569 ps->map_encoded_one = 0;
1570 ps->map_encoded_all = 1;
1572 ps->viaopt = via_off;
1575 ps->max_balancers = 0;
1576 ps->bal_persist = 0;
1578 ps->inherit_set = 0;
1580 ps->ppinherit_set = 0;
1582 ps->bgrowth_set = 0;
1584 ps->recv_buffer_size = 0;
1585 ps->recv_buffer_size_set = 0;
1587 ps->io_buffer_size_set = 0;
1591 ps->timeout_set = 0;
1592 ps->badopt = bad_error;
1594 ps->source_address =
NULL;
1595 ps->source_address_set = 0;
1618 for (
y = 0;
y <
base->nelts;
y++) {
1621 if (
b1->hash.def ==
b2->hash.def &&
b1->hash.fnv ==
b2->hash.fnv) {
1629 if (*
b2->s->sticky == 0 && *
b1->s->sticky) {
1633 if (!
b2->s->sticky_separator_set
1634 &&
b1->s->sticky_separator_set) {
1635 b2->s->sticky_separator_set =
b1->s->sticky_separator_set;
1636 b2->s->sticky_separator =
b1->s->sticky_separator;
1638 if (!
b2->s->timeout &&
b1->s->timeout) {
1639 b2->s->timeout =
b1->s->timeout;
1641 if (!
b2->s->max_attempts_set &&
b1->s->max_attempts_set) {
1642 b2->s->max_attempts_set =
b1->s->max_attempts_set;
1643 b2->s->max_attempts =
b1->s->max_attempts;
1645 if (!
b2->s->nonce_set &&
b1->s->nonce_set) {
1646 b2->s->nonce_set =
b1->s->nonce_set;
1649 if (!
b2->s->sticky_force_set &&
b1->s->sticky_force_set) {
1650 b2->s->sticky_force_set =
b1->s->sticky_force_set;
1651 b2->s->sticky_force =
b1->s->sticky_force;
1653 if (!
b2->s->scolonsep_set &&
b1->s->scolonsep_set) {
1654 b2->s->scolonsep_set =
b1->s->scolonsep_set;
1655 b2->s->scolonsep =
b1->s->scolonsep;
1657 if (!
b2->s->forcerecovery_set &&
b1->s->forcerecovery_set) {
1658 b2->s->forcerecovery_set =
b1->s->forcerecovery_set;
1659 b2->s->forcerecovery =
b1->s->forcerecovery;
1707 if (
ps->ppinherit) {
1717 if (
ps->inherit ||
ps->ppinherit) {
1728 ps->map_encoded_one =
overrides->map_encoded_one ||
base->map_encoded_one;
1729 ps->map_encoded_all =
overrides->map_encoded_all &&
base->map_encoded_all;
1741 ps->recv_buffer_size = (
overrides->recv_buffer_size_set == 0) ?
base->recv_buffer_size :
overrides->recv_buffer_size;
1742 ps->recv_buffer_size_set =
overrides->recv_buffer_size_set ||
base->recv_buffer_size_set;
1744 ps->io_buffer_size_set =
overrides->io_buffer_size_set ||
base->io_buffer_size_set;
1752 ps->proxy_status_set =
overrides->proxy_status_set ||
base->proxy_status_set;
1754 ps->source_address_set =
overrides->source_address_set ||
base->source_address_set;
1768 psf->source_address_set = 1;
1771 return "ProxySourceAddress invalid value";
1789 new->preserve_host_set = 0;
1790 new->preserve_host = 0;
1791 new->interpolate_env = -1;
1792 new->error_override = 0;
1793 new->error_override_set = 0;
1794 new->add_forwarded_headers = 1;
1795 new->add_forwarded_headers_set = 0;
1796 new->forward_100_continue = 1;
1797 new->forward_100_continue_set = 0;
1799 return (
void *)
new;
1804 return *(
const int *)
i1 - *(
const int *)
i2;
1816 new->refs = add->
refs;
1824 new->error_override_codes
1829 if (
base->error_override_codes->nelts
1831 qsort(
new->error_override_codes->elts,
1832 new->error_override_codes->nelts,
1845 new->add_forwarded_headers =
1849 ||
base->add_forwarded_headers_set;
1850 new->forward_100_continue =
1854 ||
base->forward_100_continue_set;
1860 const char *
r1,
const char *creds,
int regex)
1875 if (
p ==
NULL ||
p[1] !=
'/' ||
p[2] !=
'/' ||
p[3] ==
'\0') {
1877 return "ProxyRemoteMatch: Bad syntax for a remote proxy server";
1879 return "ProxyRemote: Bad syntax for a remote proxy server";
1888 return "ProxyRemoteMatch: Bad syntax for a remote proxy server (bad port number)";
1890 return "ProxyRemote: Bad syntax for a remote proxy server (bad port number)";
1900 return "Regular expression for ProxyRemoteMatch could not be compiled.";
1917 new->use_regex =
regex;
1927 const char *
r1,
const char *
creds)
1933 const char *
r1,
const char *
creds)
1948 const char *
ret, *
c;
1976 char *
f =
cmd->path;
1986 unsigned int flags = 0;
1999 return "ProxyPassMatch invalid syntax ('~' usage).";
2023 return "ProxyPass|ProxyPassMatch can not have a path when defined in "
2027 return "Invalid ProxyPass|ProxyPassMatch parameter. Parameter must "
2028 "be in the form 'key=value'.";
2032 return "Invalid ProxyPass|ProxyPassMatch parameter. Parameter must be "
2033 "in the form 'key=value'.";
2047 return "unknown mapping";
2063 return "ProxyPass|ProxyPassMatch needs a path when not defined in a location";
2066 return "ProxyPass|ProxyPassMatch uses an invalid \"unix:\" URL";
2090 return "Regular expression could not be compiled.";
2096 if (
r[0] ==
'!' &&
r[1] ==
'\0')
2150 "Sharing worker '%s' instead of creating new worker '%s'",
2157 "Ignoring parameter '%s=%s' for worker '%s' because of worker sharing",
2184 const char *
r,
const char *
i)
2200 return "ProxyPassReverse needs a path when not defined in a location";
2208 return "ProxyPassReverse can not have a path when defined in a location";
2223 const char *
r,
const char *interp)
2236 const char *
r,
const char *interp)
2321 "Parsed domain %s",
New->name);
2328 "Parsed host %s",
New->name);
2348 return "ProxyDomain: domain name must start with a dot.";
2382 return "ProxyErrorOverride: status codes to intercept must be numeric";
2384 return "ProxyErrorOverride: status codes must follow a value of 'on'";
2388 return "ProxyErrorOverride: status codes to intercept must be valid HTTP Status Codes >=400 && <600";
2405 return "ProxyErrorOverride first parameter must be one of: off | on";
2442 if (
s < 512 &&
s != 0) {
2443 return "ProxyReceiveBufferSize must be >= 512 bytes, or 0 for system default.";
2446 psf->recv_buffer_size =
s;
2447 psf->recv_buffer_size_set = 1;
2458 return "ProxyIOBufferSize must be >= 512 bytes, or 0 for system default.";
2461 psf->io_buffer_size_set = 1;
2473 psf->maxfwd_set = 1;
2485 return "Proxy Timeout must be at least 1 second.";
2487 psf->timeout_set = 1;
2500 psf->viaopt = via_off;
2502 psf->viaopt = via_on;
2504 psf->viaopt = via_block;
2506 psf->viaopt = via_full;
2508 return "ProxyVia must be one of: "
2509 "off | on | full | block";
2512 psf->viaopt_set = 1;
2523 psf->badopt = bad_error;
2525 psf->badopt = bad_ignore;
2527 psf->badopt = bad_body;
2529 return "ProxyBadHeader must be one of: "
2530 "IsError | Ignore | StartBody";
2533 psf->badopt_set = 1;
2544 psf->proxy_status = status_off;
2546 psf->proxy_status = status_on;
2548 psf->proxy_status = status_full;
2550 return "ProxyStatus must be one of: "
2554 psf->proxy_status_set = 1;
2565 return "BalancerGrowth must be between 0 and 1000";
2567 psf->bgrowth = growth;
2568 psf->bgrowth_set = 1;
2588 psf->inherit_set = 1;
2598 psf->ppinherit_set = 1;
2638 return "BalancerMember can not have a balancer name when defined in a location";
2640 return "Invalid BalancerMember parameter. Parameter must "
2641 "be in the form 'key=value'";
2649 return "BalancerMember must define balancer name when outside <Proxy > section";
2651 return "BalancerMember must define remote proxy server";
2653 return "BalancerMember uses an invalid \"unix:\" URL";
2670 "Defining worker '%s' for balancer '%s'",
2675 "Defined worker '%s' for balancer '%s'",
2681 "Sharing worker '%s' instead of creating new worker '%s'",
2693 "Ignoring parameter '%s=%s' for worker '%s' because of worker sharing",
2723 if (
cmd->directive->parent &&
2725 "<Proxy", 6) == 0) {
2726 const char *
pargs =
cmd->directive->parent->args;
2767 return "ProxySet uses an invalid \"unix:\" URL";
2790 return "Invalid ProxySet parameter. Parameter must be "
2791 "in the form 'key=value'";
2840 "> directive missing closing '>'",
NULL);
2847 return "<ProxyMatch > block must specify a path";
2849 return "<Proxy > block must specify a path";
2865 return "Regex could not be compiled";
2872 &proxy_module,
cmd->pool);
2879 conf->
p =
cmd->path;
2891 return "Multiple <ProxyMatch> arguments not (yet) supported.";
2894 "> arguments are not supported for wildchar url.",
2898 "> arguments are not supported for non url.",
2917 return "<Proxy/ProxyMatch > uses an invalid \"unix:\" URL";
2933 if (worker ==
NULL && balancer ==
NULL) {
2935 "> arguments are supported only for workers.",
2942 return "Invalid Proxy parameter. Parameter must be "
2943 "in the form 'key=value'";
2967 "Container for directives affecting resources located in the proxied "
2970 "Container for directives affecting resources located in the proxied "
2971 "location, in regular expression syntax"),
2973 "on if the true proxy requests should be accepted"),
2975 "a scheme, partial URL or '*' and a proxy server"),
2977 "a regex pattern and a proxy server"),
2982 "a virtual path and a URL"),
2984 "a virtual path and a URL"),
2986 "a virtual path and a URL for reverse proxy behaviour"),
2992 "A list of names, hosts or domains to which the proxy will not connect"),
2994 "Receive buffer size for outgoing HTTP and FTP connections in bytes"),
2996 "IO buffer size for outgoing HTTP and FTP connections in bytes"),
2998 "The maximum number of proxies a request may be forwarded through."),
3000 "A list of domains, hosts, or subnets to which the proxy will connect directly"),
3002 "The default intranet domain name (in absence of a domain in the URL)"),
3004 "Configure Via: proxy header header to one of: on | off | block | full"),
3006 "use our error handling pages instead of the servers' we are proxying"),
3008 "on if we should preserve host header while proxying"),
3010 "Set the timeout (in seconds) for a proxied connection. "
3011 "This overrides the server timeout"),
3013 "How to handle bad header line in response: IsError | Ignore | StartBody"),
3015 "A balancer name and scheme with list of params"),
3017 "Number of additional Balancers that can be added post-config"),
3019 "on if the balancer should persist changes on reboot/restart made via the Balancer Manager"),
3021 "on if this server should inherit Balancers and Workers defined in the main server "
3022 "(Setting to off recommended if using the Balancer Manager)"),
3024 "on if this server should inherit all ProxyPass directives defined in the main server "
3025 "(Setting to off recommended if using the Balancer Manager)"),
3027 "Configure Status: proxy status to one of: on | off | full"),
3029 "A balancer or worker name with list of params"),
3031 "Configure local source IP used for request forward"),
3033 "on if X-Forwarded-* headers should be added or completed"),
3035 "on if 100-Continue should be forwarded to the origin server, off if the "
3036 "proxy should handle it by itself"),
3095 "failed to create %s mutex",
proxy_id);
3105 for (;
s;
s =
s->next) {
3112 for (
i = 0;
i <
sconf->sec_proxy->nelts; ++
i) {
3143 ap_rputs(
"<hr />\n<h1>Proxy LoadBalancer Status for ",
r);
3145 ap_rputs(
"\n\n<table border=\"0\"><tr>"
3146 "<th>SSes</th><th>Timeout</th><th>Method</th>"
3165 ap_rputs(
"\n\n<table border=\"0\"><tr>"
3166 "<th>Sch</th><th>Host</th><th>Stat</th>"
3167 "<th>Route</th><th>Redir</th>"
3168 "<th>F</th><th>Set</th><th>Acc</th><th>Busy</th><th>Wr</th><th>Rd</th>"
3180 ap_rvputs(
r,
"<td>", (*worker)->s->hostname_ex,
"</td><td>",
NULL);
3184 ap_rprintf(
r,
"</td><td>%.2f</td>", (
float)((*worker)->s->lbfactor)/100.0);
3185 ap_rprintf(
r,
"<td>%d</td>", (*worker)->s->lbset);
3187 (*worker)->s->elected);
3189 (*worker)->s->busy);
3199 ap_rprintf(
r,
"ProxyBalancer[%d]Worker[%d]Name: %s\n",
3200 i,
n, (*worker)->s->name_ex);
3201 ap_rprintf(
r,
"ProxyBalancer[%d]Worker[%d]Status: %s\n",
3203 ap_rprintf(
r,
"ProxyBalancer[%d]Worker[%d]Elected: %"
3205 i,
n, (*worker)->s->elected);
3206 ap_rprintf(
r,
"ProxyBalancer[%d]Worker[%d]Busy: %"
3208 i,
n, (*worker)->s->busy);
3209 ap_rprintf(
r,
"ProxyBalancer[%d]Worker[%d]Sent: %"
3211 i,
n, (*worker)->s->transferred >> 10);
3212 ap_rprintf(
r,
"ProxyBalancer[%d]Worker[%d]Rcvd: %"
3214 i,
n, (*worker)->s->read >> 10);
3228 "<tr><th>SSes</th><td>Sticky session name</td></tr>\n"
3229 "<tr><th>Timeout</th><td>Balancer Timeout</td></tr>\n"
3230 "<tr><th>Sch</th><td>Connection scheme</td></tr>\n"
3231 "<tr><th>Host</th><td>Backend Hostname</td></tr>\n"
3232 "<tr><th>Stat</th><td>Worker status</td></tr>\n"
3233 "<tr><th>Route</th><td>Session Route</td></tr>\n"
3234 "<tr><th>Redir</th><td>Session Route Redirection</td></tr>\n"
3235 "<tr><th>F</th><td>Load Balancer Factor</td></tr>\n"
3236 "<tr><th>Acc</th><td>Number of uses</td></tr>\n"
3237 "<tr><th>Wr</th><td>Number of bytes transferred</td></tr>\n"
3238 "<tr><th>Rd</th><td>Number of bytes read</td></tr>\n"
3254 "could not init proxy_mutex in child");
3260 void *
sconf =
s->module_config;
3278 "http://www.apache.org", 0);
3299 "http://www.apache.org", 0);
3316 reverse->s->is_address_reusable = 0;
3334 "failed to register %s mutex",
proxy_id);
3350 static const char *
const aszSucc[] = {
"mod_rewrite.c",
NULL};
3355 static const char *
const aszPred[] = {
"mpm_winnt.c",
"mod_proxy_balancer.c",
3356 "mod_proxy_hcheck.c",
NULL};
3418 char **
url),(worker,balancer,
3430 (
p, ptemp,
plog,
s, section_config),
int int const char ** match
const char apr_size_t ap_regmatch_t * pmatch
const char apr_size_t len
const char apr_size_t nmatch
#define AP_PROXY_RUN_FINISHED(arg0, arg1, arg2)
#define AP_PROXY_RUN(arg0, arg1, arg2, arg3, arg4)
APR-UTIL registration of functions exported by modules.
apr_array_append(apr_pool_t *p, const apr_array_header_t *first, const apr_array_header_t *second)
ap_conf_vector_t * ap_merge_per_dir_configs(apr_pool_t *p, ap_conf_vector_t *base, ap_conf_vector_t *new_conf)
void * ap_set_config_vectors(server_rec *server, ap_conf_vector_t *section_vector, const char *section, module *mod, apr_pool_t *pconf)
ap_conf_vector_t * ap_create_per_dir_config(apr_pool_t *p)
static apr_pool_t * pconf
static void reverse(const char **argv, int start, int len)
#define AP_INIT_TAKE123(directive, func, mconfig, where, help)
#define AP_INIT_TAKE1(directive, func, mconfig, where, help)
#define ap_get_module_config(v, m)
void ap_hook_post_config(ap_HOOK_post_config_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
struct ap_conf_vector_t ap_conf_vector_t
#define AP_DECLARE_MODULE(foo)
#define AP_INIT_FLAG(directive, func, mconfig, where, help)
#define AP_INIT_ITERATE(directive, func, mconfig, where, help)
const char * ap_set_flag_slot_char(cmd_parms *cmd, void *struct_ptr, int arg)
#define AP_INIT_RAW_ARGS(directive, func, mconfig, where, help)
void ap_hook_handler(ap_HOOK_handler_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
void ap_hook_pre_config(ap_HOOK_pre_config_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
request_rec int int apr_table_t const char * path
const char server_rec server_rec ** ps
const char * ap_walk_config(ap_directive_t *conftree, cmd_parms *parms, ap_conf_vector_t *section_vector)
void ap_hook_child_init(ap_HOOK_child_init_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
#define AP_INIT_TAKE23(directive, func, mconfig, where, help)
#define ap_default_port(r)
#define ap_http_scheme(r)
#define ap_get_core_module_config(v)
apr_status_t ap_global_mutex_create(apr_global_mutex_t **mutex, const char **name, const char *type, const char *instance_id, server_rec *server, apr_pool_t *pool, apr_int32_t options)
apr_status_t ap_mutex_register(apr_pool_t *pconf, const char *type, const char *default_dir, apr_lockmech_e default_mech, apr_int32_t options)
int ap_rvputs(request_rec *r,...)
int ap_rprintf(request_rec *r, const char *fmt,...) __attribute__((format(printf
int ap_ssl_bind_outgoing(conn_rec *c, struct ap_conf_vector_t *dir_conf, int require_ssl)
static APR_INLINE int ap_rputs(const char *str, request_rec *r)
void ap_hook_post_read_request(ap_HOOK_post_read_request_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
const char * ap_ssl_var_lookup(apr_pool_t *p, server_rec *s, conn_rec *c, request_rec *r, const char *name)
int ap_ssl_has_outgoing_handlers(void)
int ap_ssl_conn_is_ssl(conn_rec *c)
void * ap_lookup_provider(const char *provider_group, const char *provider_name, const char *provider_version)
void ap_hook_pre_translate_name(ap_HOOK_pre_translate_name_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
void ap_hook_translate_name(ap_HOOK_translate_name_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
void ap_hook_map_to_storage(ap_HOOK_map_to_storage_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
void ap_hook_fixups(ap_HOOK_fixups_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
void ap_die(int type, request_rec *r)
const char apr_port_t port
apr_dbd_transaction_t int mode
apr_pool_t const char * params
const char apr_ssize_t int flags
#define APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(ns, link, ret, name, args_decl, args_use, decline)
const char *const const char *const * aszSucc
#define APR_HOOK_LINK(name)
#define APR_HOOK_STRUCT(members)
#define APR_IMPLEMENT_OPTIONAL_HOOK_RUN_ALL(ns, link, ret, name, args_decl, args_use, ok, decline)
#define APR_OPTIONAL_HOOK(ns, name, pfn, aszPre, aszSucc, nOrder)
#define APR_RETRIEVE_OPTIONAL_FN(name)
#define APR_OPTIONAL_FN_TYPE(name)
#define APR_DECLARE_OPTIONAL_FN(ret, name, args)
#define APR_URI_UNP_REVEALPASSWORD
#define APR_URI_UNP_OMITUSERINFO
#define ap_is_HTTP_VALID_RESPONSE(x)
#define HTTP_SERVICE_UNAVAILABLE
#define HTTP_INTERNAL_SERVER_ERROR
#define ap_is_HTTP_REDIRECT(x)
#define ap_is_HTTP_ERROR(x)
#define HTTP_METHOD_NOT_ALLOWED
#define HTTP_REQUEST_ENTITY_TOO_LARGE
#define HTTP_MOVED_PERMANENTLY
int ap_send_http_trace(request_rec *r)
int ap_send_http_options(request_rec *r)
const apr_strmatch_pattern * ap_proxy_strmatch_path
const apr_strmatch_pattern * ap_proxy_strmatch_domain
void proxy_util_register_hooks(apr_pool_t *p)
int proxy_run_section_post_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s, ap_conf_vector_t *section_config)
#define PROXY_DECLARE_DATA
int ap_proxy_ssl_engine(conn_rec *c, ap_conf_vector_t *per_dir_config, int enable)
#define PROXYPASS_MAP_ENCODED
#define PROXY_WORKER_IS_USABLE(f)
#define PROXYPASS_MAP_SERVLET
int proxy_run_request_status(int *status, request_rec *r)
int ap_proxy_ssl_disable(conn_rec *c)
#define PROXY_WORKER_DRAIN_FLAG
apr_status_t ap_proxy_set_wstatus(char c, int set, proxy_worker *w)
#define PROXY_WORKER_DISABLED_FLAG
#define PROXY_DECLARE(type)
#define PROXY_WORKER_STOPPED
#define PROXY_STRNCPY(dst, src)
#define PROXY_WORKER_GENERIC_FLAG
#define PROXY_WORKER_IN_ERROR
#define PROXY_WORKER_HC_FAIL
char * ap_proxy_define_balancer(apr_pool_t *p, proxy_balancer **balancer, proxy_server_conf *conf, const char *url, const char *alias, int do_malloc)
#define PROXY_WORKER_HOT_SPARE_FLAG
proxy_worker * ap_proxy_get_worker(apr_pool_t *p, proxy_balancer *balancer, proxy_server_conf *conf, const char *url)
#define PROXY_WORKER_IGNORE_ERRORS
char * ap_proxy_define_worker(apr_pool_t *p, proxy_worker **worker, proxy_balancer *balancer, proxy_server_conf *conf, const char *url, int do_malloc)
const char * ap_proxy_de_socketfy(apr_pool_t *p, const char *url)
#define PROXY_COPY_CONF_PARAMS(w, c)
int proxy_run_scheme_handler(request_rec *r, proxy_worker *worker, proxy_server_conf *conf, char *url, const char *proxyhost, apr_port_t proxyport)
int ap_proxy_trans_match(request_rec *r, struct proxy_alias *ent, proxy_dir_conf *dconf)
#define PROXYPASS_INTERPOLATE
#define PROXY_WORKER_INITIALIZED
#define PROXY_WORKER_IGNORE_ERRORS_FLAG
#define DEFAULT_MAX_FORWARDS
#define PROXY_WORKER_STOPPED_FLAG
char * ap_proxy_define_worker_ex(apr_pool_t *p, proxy_worker **worker, proxy_balancer *balancer, proxy_server_conf *conf, const char *url, unsigned int mask)
int ap_proxy_post_request(proxy_worker *worker, proxy_balancer *balancer, request_rec *r, proxy_server_conf *conf)
#define PROXYPASS_NOCANON
#define PROXY_WORKER_HOT_STANDBY
proxy_worker * ap_proxy_get_worker_ex(apr_pool_t *p, proxy_balancer *balancer, proxy_server_conf *conf, const char *url, unsigned int mask)
proxy_balancer * ap_proxy_get_balancer(apr_pool_t *p, proxy_server_conf *conf, const char *url, int careactive)
#define PROXY_WORKER_HOT_SPARE
int ap_proxy_valid_balancer_name(char *name, int i)
#define AP_PROXY_WORKER_IS_MATCH
#define PROXY_WORKER_INITIALIZED_FLAG
#define PROXY_WORKER_IN_SHUTDOWN
int ap_proxy_conn_is_https(conn_rec *c)
#define PROXY_WORKER_GENERIC
proxy_wstat_t proxy_wstat_tbl[]
int ap_proxy_pre_request(proxy_worker **worker, proxy_balancer **balancer, request_rec *r, proxy_server_conf *conf, char **url)
#define PROXY_WORKER_IN_SHUTDOWN_FLAG
char * ap_proxy_parse_wstatus(apr_pool_t *p, proxy_worker *w)
int proxy_run_check_trans(request_rec *r, const char *url)
unsigned int ap_proxy_hashfunc(const char *str, proxy_hash_t method)
apr_status_t ap_proxy_initialize_worker(proxy_worker *worker, server_rec *s, apr_pool_t *p)
#define PROXY_WORKER_HOT_STANDBY_FLAG
int ap_proxyerror(request_rec *r, int statuscode, const char *message)
#define PROXYPASS_NOQUERY
#define PROXY_WORKER_DRAIN
#define PROXY_WORKER_HC_FAIL_FLAG
#define PROXY_WORKER_FREE
int ap_proxy_ssl_enable(conn_rec *c)
#define PROXY_WORKER_DISABLED
#define PROXY_WORKER_IN_ERROR_FLAG
#define PROXY_WORKER_FREE_FLAG
proxy_hcmethods_t proxy_hcmethods[]
char * ap_proxy_worker_name(apr_pool_t *p, proxy_worker *worker)
#define AP_PROXY_WORKER_IS_PREFIX
const char * ap_proxy_ssl_val(apr_pool_t *p, server_rec *s, conn_rec *c, request_rec *r, const char *var)
char * ap_proxy_update_balancer(apr_pool_t *p, proxy_balancer *balancer, const char *url)
#define STANDARD20_MODULE_STUFF
int ap_cstr_casecmp(const char *s1, const char *s2)
char * ap_pbase64encode(apr_pool_t *p, char *string)
#define ap_strrchr_c(s, c)
#define ap_strchr_c(s, c)
char * ap_pregsub(apr_pool_t *p, const char *input, const char *source, apr_size_t nmatch, ap_regmatch_t pmatch[])
#define AP_DEBUG_ASSERT(exp)
int ap_cstr_casecmpn(const char *s1, const char *s2, apr_size_t n)
void ap_str_tolower(char *s)
int ap_parse_strict_length(apr_off_t *len, const char *str)
ap_regex_t * ap_pregcomp(apr_pool_t *p, const char *pattern, int cflags)
apr_status_t ap_timeout_parameter_parse(const char *timeout_parameter, apr_interval_time_t *timeout, const char *default_time_unit)
char * ap_getword_conf(apr_pool_t *p, const char **line)
#define NOT_IN_DIR_CONTEXT
const char * ap_check_cmd_context(cmd_parms *cmd, unsigned forbidden)
const apr_array_header_t * list
const char apr_int32_t flag
void const char apr_status_t(* cleanup)(void *))
int strcasecmp(const char *a, const char *b)
int strncasecmp(const char *a, const char *b, size_t n)
apr_vformatter_buff_t * c
apr_vformatter_buff_t const char va_list ap
#define apr_pool_create(newpool, parent)
#define apr_pcalloc(p, size)
#define APR_ARRAY_PUSH(ary, type)
const apr_array_header_t * arr
#define APR_ARRAY_IDX(ary, i, type)
apr_int32_t apr_int32_t apr_int32_t err
apr_int64_t apr_interval_time_t
#define apr_time_sec(time)
#define apr_time_from_sec(sec)
#define AP_TRACE_EXTENDED
mod_core private header file
int ssl_proxy_enable(conn_rec *c)
int ssl_engine_disable(conn_rec *c)
static int proxy_needsdomain(request_rec *r, const char *url, const char *domain)
static const char *const proxy_id
static const char * set_io_buffer_size(cmd_parms *parms, void *dummy, const char *arg)
static void * merge_proxy_config(apr_pool_t *p, void *basev, void *overridesv)
static const char * set_inherit(cmd_parms *parms, void *dummy, int flag)
static int proxy_detect(request_rec *r)
static const char * add_proxy_http_headers(cmd_parms *parms, void *dconf, int flag)
static int proxy_fixup(request_rec *r)
static const command_rec proxy_cmds[]
static const char * add_pass_noregex(cmd_parms *cmd, void *dummy, const char *arg)
static const char * add_pass_regex(cmd_parms *cmd, void *dummy, const char *arg)
static const char * set_status_opt(cmd_parms *parms, void *dummy, const char *arg)
static const char * add_proxy_noregex(cmd_parms *cmd, void *dummy, const char *f1, const char *r1, const char *creds)
static apr_OFN_set_worker_hc_param_t * set_worker_hc_param_f
static const char * set_proxy_exclude(cmd_parms *parms, void *dummy, const char *arg)
static const char * set_proxy_error_override(cmd_parms *parms, void *dconf, const char *arg)
static const char * set_preserve_host(cmd_parms *parms, void *dconf, int flag)
static const char * set_bad_opt(cmd_parms *parms, void *dummy, const char *arg)
static const char * set_balancer_param(proxy_server_conf *conf, apr_pool_t *p, proxy_balancer *balancer, const char *key, const char *val)
static int proxy_pre_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp)
static const char * forward_100_continue(cmd_parms *parms, void *dconf, int flag)
static int proxy_handler(request_rec *r)
static const char * set_ppinherit(cmd_parms *parms, void *dummy, int flag)
static int alias_match(const char *uri, const char *alias_fakename)
static const char * cookie_path(cmd_parms *cmd, void *dconf, const char *f, const char *r, const char *interp)
static const char * add_proxy(cmd_parms *cmd, void *dummy, const char *f1, const char *r1, const char *creds, int regex)
static int int_order(const void *i1, const void *i2)
static const char * cookie_domain(cmd_parms *cmd, void *dconf, const char *f, const char *r, const char *interp)
static const char * set_persist(cmd_parms *parms, void *dummy, int flag)
static const char * set_max_forwards(cmd_parms *parms, void *dummy, const char *arg)
static const char * proxysection(cmd_parms *cmd, void *mconfig, const char *arg)
static const char * set_proxy_param(cmd_parms *cmd, void *dummy, const char *arg)
static const char * set_proxy_dirconn(cmd_parms *parms, void *dummy, const char *arg)
static void * create_proxy_dir_config(apr_pool_t *p, char *dummy)
static apr_OFN_ssl_engine_disable_t * proxy_ssl_disable
static int alias_match_servlet(apr_pool_t *p, const char **urip, const char *alias)
static apr_OFN_ssl_engine_set_t * proxy_ssl_engine
static const char * set_proxy_timeout(cmd_parms *parms, void *dummy, const char *arg)
static void register_hooks(apr_pool_t *p)
static int proxy_pre_translate_name(request_rec *r)
static int proxy_walk(request_rec *r)
static void * create_proxy_config(apr_pool_t *p, server_rec *s)
apr_global_mutex_t * proxy_mutex
static const char * add_pass(cmd_parms *cmd, void *dummy, const char *arg, int is_regex)
static int proxy_status_hook(request_rec *r, int flags)
static const char * set_proxy_req(cmd_parms *parms, void *dummy, int flag)
static void ap_add_per_proxy_conf(server_rec *s, ap_conf_vector_t *dir_config)
static int proxy_trans(request_rec *r, int pre_trans)
static const char * add_proxy_regex(cmd_parms *cmd, void *dummy, const char *f1, const char *r1, const char *creds)
static void child_init(apr_pool_t *p, server_rec *s)
static apr_array_header_t * merge_balancers(apr_pool_t *p, apr_array_header_t *base, apr_array_header_t *overrides)
static int proxy_map_location(request_rec *r)
static const char * set_source_address(cmd_parms *parms, void *dummy, const char *arg)
static apr_OFN_ssl_proxy_enable_t * proxy_ssl_enable
static const char * add_member(cmd_parms *cmd, void *dummy, const char *arg)
static const char * set_proxy_domain(cmd_parms *parms, void *dummy, const char *arg)
static const char * set_bgrowth(cmd_parms *parms, void *dummy, const char *arg)
static void * merge_proxy_dir_config(apr_pool_t *p, void *basev, void *addv)
static const char * add_pass_reverse(cmd_parms *cmd, void *dconf, const char *f, const char *r, const char *i)
static const char * set_via_opt(cmd_parms *parms, void *dummy, const char *arg)
static int proxy_post_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *main_s)
static int proxy_translate_name(request_rec *r)
static const char * set_worker_param(apr_pool_t *p, server_rec *s, proxy_worker *worker, const char *key, const char *val)
static const char * set_recv_buffer_size(cmd_parms *parms, void *dummy, const char *arg)
Proxy Extension Module for Apache.
static const char * set_worker_hc_param(apr_pool_t *p, server_rec *s, proxy_worker *worker, const char *key, const char *val, void *v)
SSL extension module for Apache.
Status Report Extension Module to Apache.
int ap_proxy_is_domainname(struct dirconn_entry *This, apr_pool_t *p)
int ap_proxy_is_ipaddr(struct dirconn_entry *This, apr_pool_t *p)
int ap_proxy_is_word(struct dirconn_entry *This, apr_pool_t *p)
const char * ap_proxy_interpolate(request_rec *r, const char *str)
int ap_proxy_canon_url(request_rec *r)
int ap_proxy_is_hostname(struct dirconn_entry *This, apr_pool_t *p)
Internal interfaces private to mod_proxy.
Apache scoreboard library.
static int ssl_engine_set(conn_rec *c, ap_conf_vector_t *per_dir_config, int proxy, int enable)
Structure to store things which are per connection.
proxy_balancer * balancer
unsigned int forcerecovery
unsigned int max_attempts_set
unsigned int sticky_separator_set
unsigned int forcerecovery_set
unsigned int sticky_force
apr_interval_time_t timeout
unsigned int sticky_force_set
unsigned int scolonsep_set
unsigned int failontimeout_set
ap_conf_vector_t * section_config
proxy_balancer_shared * s
unsigned int lbmethod_set
apr_array_header_t * errstatuses
proxy_balancer_method * lbmethod
apr_array_header_t * workers
apr_array_header_t * cookie_domains
signed char interpolate_env
unsigned int add_forwarded_headers_set
apr_array_header_t * raliases
unsigned int error_override_set
unsigned int error_override
apr_array_header_t * refs
struct proxy_alias * alias
unsigned int forward_100_continue
unsigned int preserve_host_set
unsigned int preserve_host
apr_array_header_t * cookie_paths
unsigned int forward_100_continue_set
unsigned int add_forwarded_headers
apr_array_header_t * error_override_codes
unsigned int map_encoded_all
apr_array_header_t * workers
apr_array_header_t * aliases
apr_array_header_t * proxies
enum proxy_server_conf::@34 proxy_status
apr_array_header_t * dirconn
unsigned int map_encoded_one
apr_array_header_t * balancers
apr_array_header_t * noproxies
unsigned int conn_timeout_set
apr_size_t recv_buffer_size
apr_interval_time_t timeout
apr_interval_time_t retry
unsigned int ping_timeout_set
unsigned int disablereuse_set
enum proxy_worker_shared::@35 flush_packets
apr_size_t response_field_size
unsigned int io_buffer_size_set
unsigned int keepalive_set
apr_size_t io_buffer_size
unsigned int address_ttl_set
apr_interval_time_t conn_timeout
unsigned int response_field_size_set
apr_interval_time_t ping_timeout
unsigned int recv_buffer_size_set
unsigned int is_address_reusable
unsigned int disablereuse
apr_interval_time_t acquire
ap_conf_vector_t * section_config
A structure that represents the current request.
apr_table_t * subprocess_env
struct ap_conf_vector_t * per_dir_config
apr_table_t * headers_out
A structure to store information for each virtual server.
apr_interval_time_t timeout
struct ap_conf_vector_t * module_config
int ap_matches_request_vhost(request_rec *r, const char *host, apr_port_t port)