diff options
author | jsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68> | 2010-08-22 05:02:05 +0000 |
---|---|---|
committer | jsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68> | 2010-08-22 05:02:05 +0000 |
commit | b70da6b982209e43079708df1da43ae4054f3d80 (patch) | |
tree | 771373588a59d5ab895bdd15f1f97e3ec65a398d /sca-cpp | |
parent | 8eee1434bbc9b66bf5f005cefc88306c9bf999dd (diff) |
Refactor store-cluster sample components to allow vhosts to share common cache and database components. Minor fixes to config scripts and wiring code to get that combination working.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@987844 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'sca-cpp')
-rwxr-xr-x | sca-cpp/trunk/modules/http/httpd-ssl-conf | 21 | ||||
-rw-r--r-- | sca-cpp/trunk/modules/http/httpd.hpp | 20 | ||||
-rwxr-xr-x | sca-cpp/trunk/modules/http/proxy-ssl-conf | 16 | ||||
-rw-r--r-- | sca-cpp/trunk/modules/server/mod-wiring.cpp | 16 | ||||
-rw-r--r-- | sca-cpp/trunk/samples/store-cluster/Makefile.am | 2 | ||||
-rw-r--r-- | sca-cpp/trunk/samples/store-cluster/domains/jane/store.composite | 39 | ||||
-rw-r--r-- | sca-cpp/trunk/samples/store-cluster/domains/joe/store.composite | 39 | ||||
-rwxr-xr-x | sca-cpp/trunk/samples/store-cluster/proxy-ssl-conf | 5 | ||||
-rwxr-xr-x | sca-cpp/trunk/samples/store-cluster/server-conf | 4 | ||||
-rwxr-xr-x | sca-cpp/trunk/samples/store-cluster/server-ssl-conf | 5 | ||||
-rw-r--r-- | sca-cpp/trunk/samples/store-cluster/shared/shared.composite | 62 | ||||
-rwxr-xr-x | sca-cpp/trunk/samples/store-cluster/stop | 11 |
12 files changed, 137 insertions, 103 deletions
diff --git a/sca-cpp/trunk/modules/http/httpd-ssl-conf b/sca-cpp/trunk/modules/http/httpd-ssl-conf index a6da987345..a965bd859c 100755 --- a/sca-cpp/trunk/modules/http/httpd-ssl-conf +++ b/sca-cpp/trunk/modules/http/httpd-ssl-conf @@ -102,6 +102,14 @@ SSLOptions -StrictRequire +OptRenegotiate SSLVerifyClient optional SSLVerifyDepth 1 +# Enable SSL proxy engine +SSLProxyEngine on +SSLProxyCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL + +# Verify server certificates +SSLProxyVerify require +SSLProxyVerifyDepth 1 + # Log SSL requests LogFormat "[%{%a %b %d %H:%M:%S %Y}t] [sslaccess] %h %l %u %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\" \"%{SSL_CLIENT_I_DN}x\" \"%{SSL_CLIENT_S_DN}x\"" sslcombined CustomLog $root/logs/ssl_access_log sslcombined @@ -201,6 +209,11 @@ cat >>$root/conf/vhost-ssl.conf <<EOF EOF +proxycert="server" +if [ "$proxyconf" != "" ]; then + proxycert="proxy" +fi + cat >$root/conf/svhost-ssl.conf <<EOF # Generated by: httpd-ssl-conf $* # Static virtual host configuration @@ -212,6 +225,10 @@ SSLCertificateChainFile "$root/cert/ca.crt" SSLCertificateFile "$root/cert/server.crt" SSLCertificateKeyFile "$root/cert/server.key" +# Declare proxy SSL client certificates +SSLProxyCACertificateFile "$root/cert/ca.crt" +SSLProxyMachineCertificateFile "$root/cert/$proxycert.pem" + EOF cat >$root/conf/dvhost-ssl.conf <<EOF @@ -225,5 +242,9 @@ SSLCertificateChainFile "$root/cert/ca.crt" SSLCertificateFile "$root/cert/vhost.crt" SSLCertificateKeyFile "$root/cert/vhost.key" +# Declare proxy SSL client certificates +SSLProxyCACertificateFile "$root/cert/ca.crt" +SSLProxyMachineCertificateFile "$root/cert/$proxycert.pem" + EOF diff --git a/sca-cpp/trunk/modules/http/httpd.hpp b/sca-cpp/trunk/modules/http/httpd.hpp index ef89cbda0a..3c759d770c 100644 --- a/sca-cpp/trunk/modules/http/httpd.hpp +++ b/sca-cpp/trunk/modules/http/httpd.hpp @@ -128,7 +128,21 @@ const string subdomain(const string& host) { * Return true if a request is targeting a virtual host. */ const bool isVirtualHostRequest(const server_rec* s, request_rec* r) { - return serverName(r) != serverName(s); + return hostName(r) != hostName(s); +} + +/** + * Return the protocol scheme for a server. + */ +const string scheme(const server_rec* s, const string& def = "http") { + return s->server_scheme != NULL? s->server_scheme : def; +} + +/** + * Return the protocol scheme from an HTTP request. + */ +const string scheme(request_rec* r, const string& def = "http") { + return r->server->server_scheme != NULL? r->server->server_scheme : def; } /** @@ -306,10 +320,11 @@ const failable<request_rec*, int> internalRedirectRequest(const string& nr_uri, nr->method_number = r->method_number; nr->allowed_methods = ap_make_method_list(nr->pool, 2); ap_parse_uri(nr, apr_pstrdup(nr->pool, c_str(nr_uri))); + nr->filename = apr_pstrdup(nr->pool, c_str(string("/redirected:") + nr_uri)); nr->request_config = ap_create_request_config(r->pool); nr->per_dir_config = r->server->lookup_defaults; nr->prev = r; - r->next = nr; + r->next = nr; // Run create request hook ap_run_create_request(nr); @@ -382,6 +397,7 @@ const int internalRedirect(request_rec* nr) { * Create and process an HTTPD internal redirect request. */ const int internalRedirect(const string& uri, request_rec* r) { + debug(uri, "httpd::internalRedirect"); const failable<request_rec*, int> nr = httpd::internalRedirectRequest(uri, r); if (!hasContent(nr)) return reason(nr); diff --git a/sca-cpp/trunk/modules/http/proxy-ssl-conf b/sca-cpp/trunk/modules/http/proxy-ssl-conf index f5e70e12f9..8f8d51c7a4 100755 --- a/sca-cpp/trunk/modules/http/proxy-ssl-conf +++ b/sca-cpp/trunk/modules/http/proxy-ssl-conf @@ -48,21 +48,5 @@ Allow from all Require user admin </Location> -# Enable SSL proxy engine -SSLProxyEngine on -SSLProxyCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL - -# Verify server certificates -SSLProxyVerify require -SSLProxyVerifyDepth 1 - -EOF - -cat >>$root/conf/vhost-ssl.conf <<EOF -# Generated by: proxy-ssl-conf $* -# Declare the proxy SSL client certificates -SSLProxyCACertificateFile "$root/cert/ca.crt" -SSLProxyMachineCertificateFile "$root/cert/proxy.pem" - EOF diff --git a/sca-cpp/trunk/modules/server/mod-wiring.cpp b/sca-cpp/trunk/modules/server/mod-wiring.cpp index 32217172fd..17cfcaae0e 100644 --- a/sca-cpp/trunk/modules/server/mod-wiring.cpp +++ b/sca-cpp/trunk/modules/server/mod-wiring.cpp @@ -109,7 +109,9 @@ int translateReference(const ServerConf& sc, request_rec *r) { // Route to an absolute target URI using mod_proxy or an HTTP client redirect if (isAbsolute(target)) { if (useModProxy) { - r->filename = apr_pstrdup(r->pool, c_str(string("proxy:") + target)); + // Build proxy URI using current request's protocol scheme + r->filename = apr_pstrdup(r->pool, c_str(string("proxy:") + httpd::scheme(r) + substr(target, find(target, "://")))); + debug(r->filename, "modwiring::translateReference::filename"); r->proxyreq = PROXYREQ_REVERSE; r->handler = "proxy-server"; return OK; @@ -117,12 +119,15 @@ int translateReference(const ServerConf& sc, request_rec *r) { r->status = HTTP_MOVED_TEMPORARILY; apr_table_setn(r->headers_out, "Location", apr_pstrdup(r->pool, c_str(target))); + r->filename = apr_pstrdup(r->pool, c_str(string("/redirect:/") + target)); + debug(target, "modwiring::translateReference::location"); r->handler = "mod_tuscany_wiring"; return OK; } // Route to a relative target URI using a local internal redirect r->filename = apr_pstrdup(r->pool, c_str(string("/redirect:/components/") + substr(target, 0, find(target, '/')))); + debug(r->filename, "modwiring::translateReference::filename"); r->handler = "mod_tuscany_wiring"; return OK; } @@ -310,7 +315,7 @@ int translate(request_rec *r) { gc_scoped_pool pool(r->pool); const ServerConf& sc = httpd::serverConf<ServerConf>(r, &mod_tuscany_wiring); - // Process dynamic virtual host configuration, if any + // Process dynamic virtual host configuration VirtualHostConf vhc(sc); const bool usevh = hasVirtualCompositeConf(vhc.sc) && httpd::isVirtualHostRequest(sc.server, r); if (usevh) { @@ -338,14 +343,17 @@ int handler(request_rec *r) { if (r->filename == NULL || strncmp(r->filename, "/redirect:", 10) != 0) return DECLINED; + // Nothing to do for an external redirect + if (r->status == HTTP_MOVED_TEMPORARILY) + return OK; + + // Do an internal redirect gc_scoped_pool pool(r->pool); httpdDebugRequest(r, "modwiring::handler::input"); - // Do an internal redirect debug(r->uri, "modwiring::handler::uri"); debug(r->filename, "modwiring::handler::filename"); debug(r->path_info, "modwiring::handler::path info"); - if (r->args == NULL) return httpd::internalRedirect(httpd::redirectURI(string(r->filename + 10), string(r->path_info)), r); return httpd::internalRedirect(httpd::redirectURI(string(r->filename + 10), string(r->path_info), string(r->args)), r); diff --git a/sca-cpp/trunk/samples/store-cluster/Makefile.am b/sca-cpp/trunk/samples/store-cluster/Makefile.am index 2f18d95983..f5e8c988eb 100644 --- a/sca-cpp/trunk/samples/store-cluster/Makefile.am +++ b/sca-cpp/trunk/samples/store-cluster/Makefile.am @@ -24,7 +24,7 @@ if WANT_QUEUE dist_sample_SCRIPTS = start stop ssl-start ssl-stop proxy-conf proxy-ssl-conf server-conf server-ssl-conf tunnel-ssl-conf sqldb-master-conf sqldb-standby-conf sampledir = $(prefix)/samples/store-cluster -nobase_dist_sample_DATA = htdocs/*.html htdocs/domains/*/*.html domains/*/*.py domains/*/*.composite +nobase_dist_sample_DATA = htdocs/*.html htdocs/domains/*/*.html domains/*/*.py domains/*/*.composite shared/*.composite dist_noinst_SCRIPTS = server-test #TESTS = server-test diff --git a/sca-cpp/trunk/samples/store-cluster/domains/jane/store.composite b/sca-cpp/trunk/samples/store-cluster/domains/jane/store.composite index 85d6aa3a9b..eeb5387588 100644 --- a/sca-cpp/trunk/samples/store-cluster/domains/jane/store.composite +++ b/sca-cpp/trunk/samples/store-cluster/domains/jane/store.composite @@ -51,7 +51,7 @@ <service name="Total"> <t:binding.jsonrpc uri="total"/> </service> - <reference name="cache" target="Cache"/> + <reference name="cache" target="http://sca-store.com/cache"/> </component> <component name="CurrencyConverter"> @@ -61,41 +61,4 @@ </service> </component> - <component name="Cache"> - <implementation.cpp path="../../../../components/cache" library="libfrontcache"/> - <service name="Cache"> - <t:binding.atom uri="cache"/> - </service> - <reference name="l1reader" target="Memcache"/> - <reference name="l1writer" target="Memcache"/> - <reference name="l2reader" target="Standbydb"/> - <reference name="l2writer" target="Masterdb"/> - </component> - - <component name="Memcache"> - <implementation.cpp path="../../../../components/cache" library="libmemcache"/> - <service name="Memcache"> - <t:binding.atom uri="memcache"/> - </service> - <property name="servers">localhost:11211,localhost:11212,localhost:11213</property> - </component> - - <component name="Masterdb"> - <implementation.cpp path="../../../../components/sqldb" library="libsqldb"/> - <property name="conninfo">host=localhost port=5432 dbname=db</property> - <property name="table">store</property> - <service name="Masterdb"> - <t:binding.atom uri="masterdb"/> - </service> - </component> - - <component name="Standbydb"> - <implementation.cpp path="../../../../components/sqldb" library="libsqldb"/> - <property name="conninfo">host=localhost port=5433 dbname=db</property> - <property name="table">store</property> - <service name="Standbydb"> - <t:binding.atom uri="standbydb"/> - </service> - </component> - </composite> diff --git a/sca-cpp/trunk/samples/store-cluster/domains/joe/store.composite b/sca-cpp/trunk/samples/store-cluster/domains/joe/store.composite index ca7815d573..eeb5387588 100644 --- a/sca-cpp/trunk/samples/store-cluster/domains/joe/store.composite +++ b/sca-cpp/trunk/samples/store-cluster/domains/joe/store.composite @@ -51,7 +51,7 @@ <service name="Total"> <t:binding.jsonrpc uri="total"/> </service> - <reference name="cache" target="Cache"/> + <reference name="cache" target="http://sca-store.com/cache"/> </component> <component name="CurrencyConverter"> @@ -61,41 +61,4 @@ </service> </component> - <component name="Cache"> - <implementation.cpp path="../../../../components/cache" library="libfrontcache"/> - <service name="Cache"> - <t:binding.atom uri="cache"/> - </service> - <reference name="l1reader" target="Memcache"/> - <reference name="l1writer" target="Memcache"/> - <reference name="l2reader" target="Standbydb"/> - <reference name="l2writer" target="Masterdb"/> - </component> - - <component name="Memcache"> - <implementation.cpp path="../../../../components/cache" library="libmemcache"/> - <service name="Memcache"> - <t:binding.atom uri="memcache"/> - </service> - <property name="servers">localhost:11211,localhost:11212,localhost:11213</property> - </component> - - <component name="Masterdb"> - <implementation.cpp path="../../../../components/sqldb" library="libsqldb"/> - <property name="conninfo">host=localhost port=5432 dbname=db</property> - <property name="table">store</property> - <service name="Masterdb"> - <t:binding.atom uri="masterdb"/> - </service> - </component> - - <component name="Standbydb"> - <implementation.cpp path="../../../../components/sqldb" library="libsqldb"/> - <property name="conninfo">host=localhost port=5434 dbname=db</property> - <property name="table">store</property> - <service name="Standbydb"> - <t:binding.atom uri="standbydb"/> - </service> - </component> - </composite> diff --git a/sca-cpp/trunk/samples/store-cluster/proxy-ssl-conf b/sca-cpp/trunk/samples/store-cluster/proxy-ssl-conf index cddadc95f4..d2a12e3ca0 100755 --- a/sca-cpp/trunk/samples/store-cluster/proxy-ssl-conf +++ b/sca-cpp/trunk/samples/store-cluster/proxy-ssl-conf @@ -30,3 +30,8 @@ tar -C tmp/ssl -c `../../modules/http/ssl-cert-find tmp/ssl` | tar -C $root -x ../../modules/http/vhost-ssl-conf $root ../../modules/http/proxy-ssl-conf $root +# Aggregate proxy balancer logs +category=`basename $root` +../../components/log/scribe-tail-start $category $root/logs/error_log +../../components/log/scribe-tail-start $category $root/logs/access_log + diff --git a/sca-cpp/trunk/samples/store-cluster/server-conf b/sca-cpp/trunk/samples/store-cluster/server-conf index 66b9639eeb..a2aa7dbad9 100755 --- a/sca-cpp/trunk/samples/store-cluster/server-conf +++ b/sca-cpp/trunk/samples/store-cluster/server-conf @@ -26,6 +26,10 @@ port=$2 ../../modules/server/server-conf $root ../../modules/python/python-conf $root cat >>$root/conf/httpd.conf <<EOF +# Configure SCA Composite +SCAContribution `pwd`/shared/ +SCAComposite shared.composite + # Configure SCA Composite for mass dynamic virtual hosting SCAVirtualContribution `pwd`/domains/ SCAVirtualComposite store.composite diff --git a/sca-cpp/trunk/samples/store-cluster/server-ssl-conf b/sca-cpp/trunk/samples/store-cluster/server-ssl-conf index 39fe830f19..13d0caa253 100755 --- a/sca-cpp/trunk/samples/store-cluster/server-ssl-conf +++ b/sca-cpp/trunk/samples/store-cluster/server-ssl-conf @@ -27,11 +27,16 @@ sslport=$3 tar -C tmp/ssl -c `../../modules/http/ssl-cert-find tmp/ssl` | tar -C $root -x ../../modules/http/httpd-ssl-conf $root $sslport/443 ../../modules/http/vhost-ssl-conf $root +#../../modules/http/httpd-auth-conf $root ../../modules/openid/openid-conf $root ../../modules/openid/openid-step2-conf $root ../../modules/server/server-conf $root ../../modules/python/python-conf $root cat >>$root/conf/httpd.conf <<EOF +# Configure SCA Composite +SCAContribution `pwd`/shared/ +SCAComposite shared.composite + # Configure SCA Composite for mass dynamic virtual hosting SCAVirtualContribution `pwd`/domains/ SCAVirtualComposite store.composite diff --git a/sca-cpp/trunk/samples/store-cluster/shared/shared.composite b/sca-cpp/trunk/samples/store-cluster/shared/shared.composite new file mode 100644 index 0000000000..714668af3a --- /dev/null +++ b/sca-cpp/trunk/samples/store-cluster/shared/shared.composite @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. +--> +<composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912" + xmlns:t="http://tuscany.apache.org/xmlns/sca/1.1" + targetNamespace="http://shared" + name="shared"> + + <component name="Cache"> + <implementation.cpp path="../../../components/cache" library="libfrontcache"/> + <service name="Cache"> + <t:binding.atom uri="cache"/> + </service> + <reference name="l1reader" target="Memcache"/> + <reference name="l1writer" target="Memcache"/> + <reference name="l2reader" target="Standbydb"/> + <reference name="l2writer" target="Masterdb"/> + </component> + + <component name="Memcache"> + <implementation.cpp path="../../../components/cache" library="libmemcache"/> + <service name="Memcache"> + <t:binding.atom uri="memcache"/> + </service> + <property name="servers">localhost:11211,localhost:11212,localhost:11213</property> + </component> + + <component name="Masterdb"> + <implementation.cpp path="../../../components/sqldb" library="libsqldb"/> + <property name="conninfo">host=localhost port=5432 dbname=db</property> + <property name="table">store</property> + <service name="Masterdb"> + <t:binding.atom uri="masterdb"/> + </service> + </component> + + <component name="Standbydb"> + <implementation.cpp path="../../../components/sqldb" library="libsqldb"/> + <property name="conninfo">host=localhost port=5433 dbname=db</property> + <property name="table">store</property> + <service name="Standbydb"> + <t:binding.atom uri="standbydb"/> + </service> + </component> + +</composite> diff --git a/sca-cpp/trunk/samples/store-cluster/stop b/sca-cpp/trunk/samples/store-cluster/stop index 4a6de4ffd7..b2fa11b7c4 100755 --- a/sca-cpp/trunk/samples/store-cluster/stop +++ b/sca-cpp/trunk/samples/store-cluster/stop @@ -19,10 +19,6 @@ set -x -../../components/sqldb/pgsql-stop tmp/server2 -../../components/sqldb/pgsql-stop tmp/server3 -../../components/sqldb/pgsql-stop tmp/server1 - ../../modules/http/httpd-stop tmp/server1 ../../modules/http/httpd-stop tmp/server2 ../../modules/http/httpd-stop tmp/server3 @@ -34,6 +30,13 @@ set -x ../../components/cache/memcached-stop 11212 ../../components/cache/memcached-stop 11213 +../../components/sqldb/pgsql-stop tmp/sqldb3 +../../modules/http/httpd-stop tmp/sqldb3 +../../components/sqldb/pgsql-stop tmp/sqldb2 +../../modules/http/httpd-stop tmp/sqldb2 +../../components/sqldb/pgsql-stop tmp/sqldb1 +../../modules/http/httpd-stop tmp/sqldb1 + ../../components/log/scribed-client-stop tmp/monitor ../../components/log/scribed-central-stop tmp/monitor ../../components/log/scribe-tail-stop tmp |