summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68>2010-08-22 05:02:05 +0000
committerjsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68>2010-08-22 05:02:05 +0000
commitb70da6b982209e43079708df1da43ae4054f3d80 (patch)
tree771373588a59d5ab895bdd15f1f97e3ec65a398d
parent8eee1434bbc9b66bf5f005cefc88306c9bf999dd (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
-rwxr-xr-xsca-cpp/trunk/modules/http/httpd-ssl-conf21
-rw-r--r--sca-cpp/trunk/modules/http/httpd.hpp20
-rwxr-xr-xsca-cpp/trunk/modules/http/proxy-ssl-conf16
-rw-r--r--sca-cpp/trunk/modules/server/mod-wiring.cpp16
-rw-r--r--sca-cpp/trunk/samples/store-cluster/Makefile.am2
-rw-r--r--sca-cpp/trunk/samples/store-cluster/domains/jane/store.composite39
-rw-r--r--sca-cpp/trunk/samples/store-cluster/domains/joe/store.composite39
-rwxr-xr-xsca-cpp/trunk/samples/store-cluster/proxy-ssl-conf5
-rwxr-xr-xsca-cpp/trunk/samples/store-cluster/server-conf4
-rwxr-xr-xsca-cpp/trunk/samples/store-cluster/server-ssl-conf5
-rw-r--r--sca-cpp/trunk/samples/store-cluster/shared/shared.composite62
-rwxr-xr-xsca-cpp/trunk/samples/store-cluster/stop11
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