Modified: portals/site-live/applications/webcontent/rproxy.html
URL: 
http://svn.apache.org/viewvc/portals/site-live/applications/webcontent/rproxy.html?rev=1901430&r1=1901429&r2=1901430&view=diff
==============================================================================
--- portals/site-live/applications/webcontent/rproxy.html (original)
+++ portals/site-live/applications/webcontent/rproxy.html Tue May 31 02:23:06 
2022
@@ -1,1066 +1,1320 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<!-- Generated by Apache Maven Doxia Site Renderer 1.4 at 26 May 2022 -->
+<html xmlns="http://www.w3.org/1999/xhtml"; xml:lang="en" lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+    <title>Apache Portals Applications - 
+    Introduction to Reverse Proxy Service</title>
+    <style type="text/css" media="all">
+      @import url("../css/maven-base.css");
+      @import url("../css/maven-theme.css");
+      @import url("../css/site.css");
+    </style>
+    <link rel="stylesheet" href="../css/print.css" type="text/css" 
media="print" />
+    <meta name="Date-Revision-yyyymmdd" content="20220526" />
+    <meta http-equiv="Content-Language" content="en" />
+        
+        </head>
+  <body class="composite">
+    <div id="banner">
+                        <a href="http://portals.apache.org/"; id="bannerLeft">
+                                                <img 
src="../images/apache-portals.gif" alt="Apache Software Foundation" />
+                </a>
+                              <a 
href="http://portals.apache.org/applications/"; id="bannerRight">
+                Apache Portals Applications
+                </a>
+            <div class="clear">
+        <hr/>
+      </div>
+    </div>
+    <div id="breadcrumbs">
+            
+                    
+                <div class="xleft">
+        <span id="publishDate">Last Published: 26 May 2022</span>
+                  &nbsp;| <span id="projectVersion">Version: 1.0</span>
+                      </div>
+            <div class="xright">                    <a 
href="http://portals.apache.org/"; class="externalLink" target="_nw" 
title="Portals">Portals</a>
+            |
+                        <a href="http://portals.apache.org/jetspeed-2"; 
class="externalLink" target="_nw" title="Jetspeed-2">Jetspeed-2</a>
+            |
+                        <a href="http://portals.apache.org/bridges"; 
class="externalLink" target="_nw" title="Bridges">Bridges</a>
+              
+                    
+      </div>
+      <div class="clear">
+        <hr/>
+      </div>
+    </div>
+    <div id="leftColumn">
+      <div id="navcolumn">
+             
+                    
+                                <h5>Essentials</h5>
+                  <ul>
+                  <li class="none">
+                          <a href="../index.html" title="Welcome">Welcome</a>
+            </li>
+                  <li class="none">
+                          <a href="../news.html" title="News and Status">News 
and Status</a>
+            </li>
+                  <li class="none">
+                          <a href="../download.html" 
title="Download">Download</a>
+            </li>
+                  <li class="none">
+                          <a href="../getting-started.html" title="Getting 
Started">Getting Started</a>
+            </li>
+          </ul>
+                       <h5>Subprojects</h5>
+                  <ul>
+                  <li class="none">
+                          <a href=".././portals-gems/index.html" 
title="Gems">Gems</a>
+            </li>
+                  <li class="none">
+                          <a href=".././demo/index.html" title="Demo">Demo</a>
+            </li>
+                  <li class="none">
+                          <a href=".././rss-main/index.html" 
title="RSS">RSS</a>
+            </li>
+                                                                               
                                                                                
                             <li class="expanded">
+                          <a href=".././webcontent2/index.html" 
title="WebContent-2">WebContent-2</a>
+                    <ul>
+                      <li class="none">
+                          <a href=".././webcontent2/modules-overview.html" 
title="Modules Overview">Modules Overview</a>
+            </li>
+                      <li class="none">
+                          <a 
href=".././webcontent2/content-rewriter-module.html" title="Content Rewriter 
Module">Content Rewriter Module</a>
+            </li>
+                      <li class="none">
+                          <a href=".././webcontent2/reverse-proxy-module.html" 
title="Reverse Proxy Module">Reverse Proxy Module</a>
+            </li>
+                      <li class="none">
+                          <a href=".././webcontent2/portlets-module.html" 
title="Portlets Module">Portlets Module</a>
+            </li>
+                      <li class="none">
+                          <a href=".././webcontent2/war-module.html" 
title="WAR Module">WAR Module</a>
+            </li>
+                      <li class="none">
+                          <a href=".././webcontent2/build-from-source.html" 
title="Build from source">Build from source</a>
+            </li>
+                      <li class="none">
+                          <a href=".././webcontent2/apidocs/index.html" 
title="JavaDocs">JavaDocs</a>
+            </li>
+                      <li class="none">
+                          <a href=".././webcontent2/faq.html" 
title="FAQ">FAQ</a>
+            </li>
+              </ul>
+        </li>
+                  <li class="none">
+                          <a href=".././webcontent/index.html" 
title="WebContent-1">WebContent-1</a>
+            </li>
+                  <li class="none">
+                          <a href=".././dbbrowser/index.html" title="DB 
Browser">DB Browser</a>
+            </li>
+                  <li class="none">
+                          <a href=".././logging/index.html" 
title="Logging">Logging</a>
+            </li>
+          </ul>
+                       <h5>Support</h5>
+                  <ul>
+                  <li class="none">
+                          <a href="../team-list.html" title="Project 
Team">Project Team</a>
+            </li>
+                  <li class="none">
+                          <a href="../license.html" title="Project 
License">Project License</a>
+            </li>
+                  <li class="none">
+                          <a 
href="http://wiki.apache.org/portals/applications"; class="externalLink" 
title="Project Wiki">Project Wiki</a>
+            </li>
+                  <li class="none">
+                          <a href="../mail-lists.html" title="Mailing 
List">Mailing List</a>
+            </li>
+                  <li class="none">
+                          <a href="../issue-tracking.html" title="Issue 
Tracking">Issue Tracking</a>
+            </li>
+          </ul>
+                             <a href="http://maven.apache.org/"; title="Built 
by Maven" class="poweredBy">
+        <img class="poweredBy" alt="Built by Maven" 
src="../images/logos/maven-feather.png" />
+      </a>
+                   
+                    
+            </div>
+    </div>
+    <div id="bodyColumn">
+      <div id="contentBox">
+        <!-- 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
 
-
-
-
-
-
-
-
-
-
-
-<html xmlns="http://www.w3.org/1999/xhtml";>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-    <title>Apache Portals Applications - Introduction to Reverse Proxy 
Service</title>
-    <style type="text/css" media="all">
-      @import url("../css/maven-base.css");
-      @import url("../css/maven-theme.css");
-      @import url("../css/site.css");
-    </style>
-    <link rel="stylesheet" href="../css/print.css" type="text/css" 
media="print" />
-          </head>
-  <body class="composite">
-    <div id="banner">
-                  <a href="http://portals.apache.org/"; id="bannerLeft">
-    
-                                            <img 
src="../images/apache-portals.gif" alt="" />
-    
-            </a>
-                        <a href="http://portals.apache.org/applications/"; 
id="bannerRight">
-    
-            Apache Portals Applications
-    
-            </a>
-            <div class="clear">
-        <hr/>
-      </div>
-    </div>
-    <div id="breadcrumbs">
-          
+    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. -->
   
+    <div class="section">
+<h2>Overview<a name="Overview"></a></h2>
+      
+<p>
+        The Reverse Proxy Service is a servlet component which can be used as 
a 
+        <a class="externalLink" 
href="http://en.wikipedia.org/wiki/Reverse_proxy";>Reverse Proxy</a>.
+        Normally, this reverse proxy service is used by the Reverse Proxy 
IFrame portlet by
+        replacing the orignial SRC URLs by proxied URLs to this reverse proxy 
service.
+      </p>
+      
+<p>
+        The Reverse Proxy Service is basically stateless like other normal 
proxy servers.
+        Client states such as cookies are just passed via the Reverse Proxy 
Service between clients and the target servers.
+        This is a difference from other HTTP Client based Web Content Portlets 
which normally manage client states in the server side.
+      </p>
+      
+<p>
+        By using Reverse Proxy service component, more sophisticated content 
can be
+        served by setting content rewriting configurations, and also 
Cross-Domain Scripting can be enabled. 
+        The Web Content Portlet Application includes Reverse Proxy Service 
servlet and related components.
+      </p>
+      
+      
+<p>
+        <i>
+          Note: The ReverseProxyService should be able to access application 
level session attribute
+                shared by a portlet of IFrameGenericPortlet or its descendant, 
which is conforming
+                with the Portlet Specification.
+                If you are using Tomcat, then be sure to set the following in 
the server.xml to enable
+                this proper Portlet API session management requirements.
+                Modify the Connector element (default on port 8080) by adding 
the folowing attribute:
+          </p>
+<div class="source">
+<pre>emptySessionPath=&quot;true&quot;</pre></div>
+        </i>
+      
+      
+<p>
+        The ReverseProxyService component is initialized by the 
ReverseProxyServlet configured in the web.xml as follows:
+        </p>
+<div class="source">
+<pre>
+&lt;!-- Default Reverse Proxy Servlet --&gt;
+&lt;servlet&gt;
+  &lt;servlet-name&gt;ReverseProxyServlet&lt;/servlet-name&gt;
+  
&lt;servlet-class&gt;org.apache.portals.applications.webcontent.proxy.impl.DefaultHttpReverseProxyServlet&lt;/servlet-class&gt;
+  &lt;init-param&gt;
+    &lt;param-name&gt;reverseproxy.configuration&lt;/param-name&gt;
+    
&lt;param-value&gt;/WEB-INF/conf/reverseproxy*.properties&lt;/param-value&gt;
+  &lt;/init-param&gt;
+  &lt;init-param&gt;
+    
&lt;param-name&gt;reverseproxy.configuration.refresh.delay&lt;/param-name&gt;
+    &lt;param-value&gt;60000&lt;/param-value&gt;
+  &lt;/init-param&gt;
+  &lt;load-on-startup&gt;11&lt;/load-on-startup&gt;
+&lt;/servlet&gt;
 
-  
-    
-  
-  
-    
-            <div class="xleft">
-        Last Published: 4 March 2015
-                      </div>
-            <div class="xright">            <a 
href="http://portals.apache.org/"; class="externalLink">Portals</a>
-            |
-                <a href="http://portals.apache.org/jetspeed-2"; 
class="externalLink">Jetspeed-2</a>
-            |
-                <a href="http://portals.apache.org/bridges"; 
class="externalLink">Bridges</a>
+&lt;!-- Map /rproxy path to the Default Reverse Proxy Servlet --&gt;
+&lt;servlet-mapping&gt;
+  &lt;servlet-name&gt;ReverseProxyServlet&lt;/servlet-name&gt;
+  &lt;url-pattern&gt;/rproxy/*&lt;/url-pattern&gt;
+&lt;/servlet-mapping&gt;
+          </pre></div>
+      
+      
+<p>
+        The above servlet can have the following init parameters:
+        </p>
+<table border="0" class="bodyTable">
+          
+<tr class="a">
             
-  
+<th>Name</th>
+            
+<th>Example Value</th>
+            
+<th>Description</th>
+          </tr>
+          
+<tr class="b">
+            
+<td>reverseproxy.configuration</td>
+            
+<td>
+              /WEB-INF/conf/reverseproxy.properties<br />
+              or<br />
+              /WEB-INF/conf/reverseproxy*.properties<br />
+              or<br />
+              file:///etc/portals/reverseproxy.properties<br />
+              or<br />
+              file:///etc/portals/reverseproxy*.properties<br />
+              or<br />
+              classpath:/META-INF/conf/reverseproxy.properties
+              or<br />
+              classpath:/META-INF/conf/reverseproxy*.properties
+            </td>
+            
+<td>
+              The context relative path of the configuration properties file.
+              <br />
+              The configuration path can be an absolute file path prefixed by 
'file:',
+              or it can be a classpath resource prefixed by 'classpath:'.
+              <br />
+              Also, the configuration path can contain glob expression, in 
which case
+              all configuration files matched to the glob expression are 
loaded.
+            </td>
+          </tr>
+          
+<tr class="a">
+            
+<td>reverseproxy.configuration.refresh.delay</td>
+            
+<td>60000</td>
+            
+<td>
+              The milliseconds of automatic refreshing interval.
+              If this value is set to a positive number, then
+              the servlet checks if the configuration file has been modified 
and
+              it tries to reload the configuration if there's any changes.
+              By default, this value is set to zero without automatic 
refreshment.
+            </td>
+          </tr>
+        </table>
+      
+      
+<p>
+        In the above servlet mapping configuration, 
+        the entry path mapping of this reverse proxy servlet is set to 
'/rproxy/*'.
+        So, the remaining local path info after the '/rproxy' is used to map 
the path
+        to the remote url.
+        This mapping configurations and other sophisticated http parameters 
are configured
+        in '/WEB-INF/conf/reverseproxy.properties' by default.
+        A simple configuration example can be as follows:
+        </p>
+<div class="source">
+<pre>
+# A very simple configuration of reverseproxy.properties
+#
+# Proxy Pass Reverse Mapping configurations for each category
+# ... Put the path item names here. Each path item will be evaluated by the 
order. 
+proxy.reverse.pass = apache, portals
 
-  
-    
-  
-  
-    
-  </div>
-      <div class="clear">
-        <hr/>
-      </div>
-    </div>
-    <div id="leftColumn">
-      <div id="navcolumn">
-           
-  
+proxy.reverse.pass.apache.local = /apache/
+proxy.reverse.pass.apache.remote = http://www.apache.org/
 
-  
+proxy.reverse.pass.portals.local = /portals/
+proxy.reverse.pass.portals.remote = http://portals.apache.org/
+          </pre></div>
+      
+      
+<p>
+        In the above example, just two path mappings are defined: 
+        One for http://www.apache.org/ and the other for 
http://portals.apache.org/.
+        For http://www.apache.org/, the local path, /apache/, is mapped.
+        And for http://portals.apache.org/, the local path, /portals/, is 
mapped.
+      </p>
+      
+<p>
+        That is, the servlet path mappings would be like the followings:
+        </p>
+<ul>
+          
+<li>/webcontent/rproxy/apache/* --&gt; http://www.apache.org/*</li>
+          
+<li>/webcontent/rproxy/portals/* --&gt; http://portals.apache.org/*</li>
+        </ul>
+        <i>Note: '/webcontent' is just a context path and '/rproxy' is just a 
servlet mapping for the reverse proxy servlet.</i>
+      
+      
+<p>
+        So, if you visit the reverse proxy url like 
'http://localhost:8080/webcontent/rproxy/portals/index.html
+        in your browser, then you can browse the Apache Portals homepage via 
the reverse proxy component!
+      </p>
+    </div>
     
-  
-  
     
-                   <h5>Essentials</h5>
-            <ul>
-              
-    <li class="none">
-                    <a href="../index.html">Welcome</a>
-          </li>
-              
-    <li class="none">
-                    <a href="../news.html">News and Status</a>
-          </li>
-              
-    <li class="none">
-                    <a href="../download.html">Download</a>
-          </li>
-              
-    <li class="none">
-                    <a href="../getting-started.html">Getting Started</a>
-          </li>
-          </ul>
-              <h5>Subprojects</h5>
-            <ul>
+<div class="section">
+<h2>Reverse Proxy Service Configurations<a 
name="Reverse_Proxy_Service_Configurations"></a></h2>
+      
+<p>
+        The Reverse Proxy Service uses <a class="externalLink" 
href="http://commons.apache.org/configuration/";>Commons Configuration</a> to 
read configuration properties files.
+        So, you can leverage the power of Commons Configurations to configure 
properties. Here are two useful tips for that:
+        </p>
+<ul>
+          
+<li>
+            <i>
+              Tip #1: Variables, which are previously defined, can be expanded 
when the configuration has
+                      the variable references wrapped by '${' and '}' like the 
following example:
               
-    <li class="none">
-                    <a href=".././portals-gems/index.html">Gems</a>
+<div class="source">
+<pre>
+my.cookie.policy = netscape
+proxy.http.client.param.cookiePolicy = ${my.cookie.policy}
+                </pre></div>
+            </i>
           </li>
+          
+<li>
+            <i>
+              Tip #2: String array typed configuration variables can be 
defined in one comma separated line or in multiple lines.
+                      The following two examples are equivalent each other:
               
-    <li class="none">
-                    <a href=".././demo/index.html">Demo</a>
-          </li>
+<div class="source">
+<pre>
+proxy.reverse.pass.site1.response.cookie.path.rewrite.include = JSESSIONID, 
PHPSESSIONID
+                </pre></div>
               
-    <li class="none">
-                    <a href=".././rss-main/index.html">RSS</a>
+<div class="source">
+<pre>
+proxy.reverse.pass.site1.response.cookie.path.rewrite.include = JSESSIONID
+proxy.reverse.pass.site1.response.cookie.path.rewrite.include = PHPSESSIONID
+                </pre></div>
+            </i>
           </li>
-              
-          
-              
+        </ul>
       
-            
       
+<p>
+        </p>
+<table border="0" class="bodyTable">
+          
+<tr class="a">
             
-      
+<th>Property</th>
             
-      
+<th>Default Value</th>
             
-      
+<th>Example Value</th>
             
-      
+<th>Description</th>
+          </tr>
+          
+<tr class="b">
+            
+<td>proxy.http.client.param.allowCircularRedirects</td>
+            
+<td>false</td>
+            
+<td>false</td>
+            
+<td>Flag whether the internal http client object should allow circular 
redirects.</td>
+          </tr>
+          
+<tr class="a">
+            
+<td>proxy.http.client.param.cookiePolicy</td>
             
+<td>best-match</td>
+            
+<td>netscape</td>
+            
+<td>
+              Flag whether the internal http client object should allow 
circular redirects.
+              Please see the documentation of httpclient 4.x on cookie 
policies.
+            </td>
+          </tr>
+          
+<tr class="b">
+            
+<td>proxy.http.client.default.proxy</td>
+            
+<td></td>
+            
+<td>proxyserver1, proxyserver2</td>
+            
+<td>
+              The system default comma delimited HTTP proxy names. Each proxy 
name should be used
+              in the following configuration properties to set detailed http 
connection options
+              for each proxy.
+            </td>
+          </tr>
+          
+<tr class="a">
+            
+<td>proxy.http.client.default.proxy.&lt;proxyname&gt;.hostname</td>
+            
+<td></td>
+            
+<td>proxyserver1</td>
+            
+<td>
+              &lt;proxyname&gt; should be replaced by the real proxy name.
+              With this example, you may use 'proxyserver1' or 'proxyserver2' 
for &lt;proxyname&gt;.
+              <br />
+              The host name of the target of this proxy.
+            </td>
+          </tr>
+          
+<tr class="b">
+            
+<td>proxy.http.client.default.proxy.&lt;proxyname&gt;.port</td>
+            
+<td></td>
+            
+<td>10080</td>
+            
+<td>
+              &lt;proxyname&gt; should be replaced by the real proxy name.
+              With this example, you may use 'proxyserver1' or 'proxyserver2' 
for &lt;proxyname&gt;.
+              <br />
+              The port number of the target of this proxy.
+              If you don't set this property, it means ANY port is allowed for 
this proxy.
+            </td>
+          </tr>
+          
+<tr class="a">
+            
+<td>proxy.http.client.default.proxy.&lt;proxyname&gt;.scheme</td>
+            
+<td></td>
+            
+<td>http</td>
+            
+<td>
+              &lt;proxyname&gt; should be replaced by the real proxy name.
+              With this example, you may use 'proxyserver1' or 'proxyserver2' 
for &lt;proxyname&gt;.
+              <br />
+              The scheme of the target of this proxy.
+              If you don't set this property, it means ANY scheme is allowed 
for this proxy.
+            </td>
+          </tr>
+          
+<tr class="b">
+            
+<td>proxy.http.connManager.param.maxTotalConnections</td>
+            
+<td>2</td>
+            
+<td>200</td>
+            
+<td>
+              The maximum http connection counts.
+              If there's any http connections available, then it will block 
the request until it gets a connection.
+            </td>
+          </tr>
+          
+<tr class="a">
+            
+<td>proxy.http.connManager.param.timeout</td>
+            
+<td>0</td>
+            
+<td>10000</td>
+            
+<td>
+              The maximum waiting time to create http connection.
+              If this is set to zero, it waits without timeout option, so it 
depends on the system configuration.
+            </td>
+          </tr>
+          
+<tr class="b">
+            
+<td>proxy.http.route.param.defaultMaxPerRoute</td>
+            
+<td></td>
+            
+<td>20</td>
+            
+<td>
+              The default maximum http connection count per route.
+            </td>
+          </tr>
+          
+<tr class="a">
+            
+<td>proxy.http.route.&lt;routename&gt;.target.hostname</td>
+            
+<td></td>
+            
+<td>portals.apache.org</td>
+            
+<td>
+              &lt;routename&gt; should be replaced by the real route name.
+              With this example, you may use 'apache' or 'portals'.
+              <br />
+              The host name of the target of this route.
+            </td>
+          </tr>
+          
+<tr class="b">
+            
+<td>proxy.http.route.&lt;routename&gt;.target.port</td>
+            
+<td></td>
+            
+<td>80</td>
+            
+<td>
+              &lt;routename&gt; should be replaced by the real route name.
+              With this example, you may use 'apache' or 'portals'.
+              <br />
+              The port number of the target of this route.
+              If you don't set this property, it means ANY port is allowed for 
this route.
+            </td>
+          </tr>
+          
+<tr class="a">
+            
+<td>proxy.http.route.&lt;routename&gt;.target.scheme</td>
+            
+<td></td>
+            
+<td>http</td>
+            
+<td>
+              &lt;routename&gt; should be replaced by the real route name.
+              With this example, you may use 'apache' or 'portals'.
+              <br />
+              The scheme of the target of this route.
+              If you don't set this property, it means ANY scheme is allowed 
for this route.
+            </td>
+          </tr>
+          
+<tr class="b">
+            
+<td>proxy.http.route.&lt;routename&gt;.maxConnections</td>
+            
+<td></td>
+            
+<td>40</td>
+            
+<td>
+              &lt;routename&gt; should be replaced by the real route name.
+              With this example, you may use 'apache' or 'portals'.
+              <br />
+              The maximum http connection count of the target of this route.
+            </td>
+          </tr>
+          
+<tr class="a">
+            
+<td>proxy.http.route.&lt;routename&gt;.local</td>
+            
+<td></td>
+            
+<td></td>
+            
+<td>
+              &lt;routename&gt; should be replaced by the real route name.
+              With this example, you may use 'apache' or 'portals'.
+              <br />
+              The local address to connect from.
+            </td>
+          </tr>
+          
+<tr class="b">
+            
+<td>proxy.http.route.&lt;routename&gt;.secure</td>
+            
+<td>false</td>
+            
+<td></td>
+            
+<td>
+              &lt;routename&gt; should be replaced by the real route name.
+              With this example, you may use 'apache' or 'portals'.
+              <br />
+              Whether the route is (supposed to be) secure.
+            </td>
+          </tr>
+          
+<tr class="a">
+            
+<td>proxy.http.route.&lt;routename&gt;.tunnelled</td>
+            
+<td>plain</td>
+            
+<td>tunneled</td>
+            
+<td>
+              &lt;routename&gt; should be replaced by the real route name.
+              With this example, you may use 'apache' or 'portals'.
+              <br />
+              Whether the the route is tunnelled through the proxy.
+            </td>
+          </tr>
+          
+<tr class="b">
+            
+<td>proxy.http.route.&lt;routename&gt;.layered</td>
+            
+<td>plain</td>
+            
+<td>layered</td>
+            
+<td>
+              &lt;routename&gt; should be replaced by the real route name.
+              With this example, you may use 'apache' or 'portals'.
+              <br />
+              Whether the route is layered.
+            </td>
+          </tr>
+          
+<tr class="a">
+            
+<td>proxy.http.route.&lt;routename&gt;.proxy</td>
+            
+<td></td>
+            
+<td>proxyserver1, proxyserver2</td>
+            
+<td>
+              The comma delimited HTTP proxy names. Each proxy name should be 
used
+              in the following configuration properties to set detailed http 
connection options
+              for each proxy.
+            </td>
+          </tr>
+          
+<tr class="b">
+            
+<td>proxy.http.route.&lt;routename&gt;.proxy.&lt;proxyname&gt;.hostname</td>
+            
+<td></td>
+            
+<td>proxyserver1</td>
+            
+<td>
+              &lt;routename&gt; and &lt;proxyname&gt; should be replaced by 
the real route name and proxy name.
+              With this example, you may use 'apache' or 'portals' for 
&lt;routename&gt;
+              and you may use 'proxyserver1' or 'proxyserver2' for 
&lt;proxyname&gt;.
+              <br />
+              The host name of the target of this proxy.
+            </td>
+          </tr>
+          
+<tr class="a">
+            
+<td>proxy.http.route.&lt;routename&gt;.proxy.&lt;proxyname&gt;.port</td>
+            
+<td></td>
+            
+<td>10080</td>
+            
+<td>
+              &lt;routename&gt; and &lt;proxyname&gt; should be replaced by 
the real route name and proxy name.
+              With this example, you may use 'apache' or 'portals' for 
&lt;routename&gt;
+              and you may use 'proxyserver1' or 'proxyserver2' for 
&lt;proxyname&gt;.
+              <br />
+              The port number of the target of this proxy.
+              If you don't set this property, it means ANY port is allowed for 
this proxy.
+            </td>
+          </tr>
+          
+<tr class="b">
+            
+<td>proxy.http.route.&lt;routename&gt;.proxy.&lt;proxyname&gt;.scheme</td>
+            
+<td></td>
+            
+<td>http</td>
+            
+<td>
+              &lt;routename&gt; and &lt;proxyname&gt; should be replaced by 
the real route name and proxy name.
+              With this example, you may use 'apache' or 'portals' for 
&lt;routename&gt;
+              and you may use 'proxyserver1' or 'proxyserver2' for 
&lt;proxyname&gt;.
+              <br />
+              The scheme of the target of this proxy.
+              If you don't set this property, it means ANY scheme is allowed 
for this proxy.
+            </td>
+          </tr>
+          
+<tr class="a">
+            
+<td>proxy.reverse.pass.dynamicProxyPathMapperCacheCount</td>
+            
+<td>1000</td>
+            
+<td>2000</td>
+            
+<td>
+              The cache count of proxy path mappers which are dynamically 
created by glob style mappings.
+            </td>
+          </tr>
+          
+<tr class="b">
+            
+<td>proxy.reverse.pass.maxMatchingPathPartCount</td>
+            
+<td>2</td>
+            
+<td>3</td>
+            
+<td>
+              The max matching path part count.
+            </td>
+          </tr>
+          
+<tr class="a">
+            
+<td>proxy.reverse.pass.reverseProxyRequestContextProviderClassName</td>
+            
+<td></td>
+            
+<td></td>
+            
+<td>
+              The request context information provider class name, which 
should implement 
org.apache.portals.applications.webcontent.proxy.ReverseProxyRequestContextProvider.
+              The reverse proxy service will use this provider to check if the 
user of the request is in the specific role when the reverse proxy path 
resource is secured and
+              so some specificed allowed roles are configured.
+              <br />
+              If not configured, then the default implementation checks if the 
user is in the specified role via the provided HttpServletRequest object.
+            </td>
+          </tr>
+          
+<tr class="b">
+            
+<td>proxy.reverse.pass.&lt;pathname&gt;.local</td>
+            
+<td></td>
+            
+<td>
+              /portals/<br />
+              or<br />
+              /*.apache/
+            </td>
+            
+<td>
+              &lt;pathname&gt; should be replaced by the real path name.
+              With this example, you may use 'apache' or 'portals' for 
&lt;pathname&gt;.
+              <br />
+              The base local path info of the reverse proxy mapping.
+              For example, if the relative url is 
'/webcontent/rproxy/portals/index.html', then
+              because the path info is '/portals/index.html', this path 
mapping is selected.
+              <br />
+              This property can have a glob expression with '*'. Each '*' 
expression is translated
+              into regular expression variable references in the remote URL 
values.
+            </td>
+          </tr>
+          
+<tr class="a">
+            
+<td>proxy.reverse.pass.&lt;pathname&gt;.remote</td>
+            
+<td></td>
+            
+<td>
+              http://portals.apache.org/<br />
+              or<br />
+              http://$1.apache.org/
+            </td>
+            
+<td>
+              &lt;pathname&gt; should be replaced by the real path name.
+              With this example, you may use 'apache' or 'portals' for 
&lt;pathname&gt;.
+              <br />
+              The base remote url of the reverse proxy mapping.
+              For example, if the relative url is 
'/webcontent/rproxy/portals/index.html', then
+              because the path info is '/portals/index.html', this path 
mapping is selected and
+              the translated remote url can be 
'http://portals.apache.org/index.html'.
+            </td>
+          </tr>
+          
+<tr class="b">
+            
+<td>proxy.reverse.pass.&lt;pathname&gt;.roles.allow</td>
+            
+<td></td>
+            
+<td>
+              dev<br />
+              or<br />
+              account, engineering
+            </td>
+            
+<td>
+              &lt;pathname&gt; should be replaced by the real path name.
+              With this example, you may use 'apache' or 'portals' for 
&lt;pathname&gt;.
+              <br />
+              When this property is set, the reverse proxy path resource is 
secured.
+              The request user should be in the specified roles to access this 
resource.
+              <br />
+              By default, it is checked via 
javax.servlet.http.HttpServletRequest#isUserInRole(role).
+              However, you could provide a customized request context provider 
implementation with 
+              proxy.reverse.pass.reverseProxyRequestContextProviderClassName 
property.
+            </td>
+          </tr>
+          
+<tr class="a">
+            
+<td>proxy.reverse.pass.&lt;pathname&gt;.rewriter.basic</td>
+            
+<td></td>
+            
+<td>
+              org.apache.portals.applications. webcontent.rewriter. 
WebContentRewriter
+            </td>
+            
+<td>
+              &lt;pathname&gt; should be replaced by the real path name.
+              With this example, you may use 'apache' or 'portals' for 
&lt;pathname&gt;.
+              <br />
+              The basic content rewriter class name.
+            </td>
+          </tr>
+          
+<tr class="b">
+            
+<td>proxy.reverse.pass.&lt;pathname&gt;.rewriter.basic.property.&lt;propertyName&gt;</td>
+            
+<td></td>
+            
+<td>propertyValue</td>
+            
+<td>
+              &lt;pathname&gt; and &gt;propertyName&lt; should be replaced by 
the real property name.
+              <br />
+              Sets property with the value on the basic rewriter bean 
instance. 
+            </td>
+          </tr>
+          
+<tr class="a">
+            
+<td>proxy.reverse.pass.&lt;pathname&gt;.rewriter.rulebased</td>
+            
+<td></td>
+            
+<td>
+              org.apache.portals.applications. webcontent.rewriter. 
WebContentRewriter
+            </td>
+            
+<td>
+              &lt;pathname&gt; should be replaced by the real path name.
+              With this example, you may use 'apache' or 'portals' for 
&lt;pathname&gt;.
+              <br />
+              The rule-based content rewriter class name.
+            </td>
+          </tr>
+          
+<tr class="b">
+            
+<td>proxy.reverse.pass.&lt;pathname&gt;.rewriter.rulebased.property.&lt;propertyName&gt;</td>
+            
+<td></td>
+            
+<td>propertyValue</td>
+            
+<td>
+              &lt;pathname&gt; and &gt;propertyName&lt; should be replaced by 
the real property name.
+              <br />
+              Sets property with the value on the rule-based rewriter bean 
instance. 
+            </td>
+          </tr>
+          
+<tr class="a">
+            
+<td>proxy.reverse.pass.&lt;pathname&gt;.rewriter.parserAdaptor</td>
+            
+<td></td>
+            
+<td>
+              html, xml
+            </td>
+            
+<td>
+              &lt;pathname&gt; should be replaced by the real path name.
+              With this example, you may use 'apache' or 'portals' for 
&lt;pathname&gt;.
+              <br />
+              The comma delimited parser adaptor names. Each parser adaptor 
name should be used
+              in the following configuration properties to set detailed parser 
adaptor properties.
+            </td>
+          </tr>
+          
+<tr class="b">
+            
+<td>proxy.reverse.pass.&lt;pathname&gt;.rewriter.parserAdaptor.&lt;parserAdaptorName&gt;</td>
+            
+<td></td>
+            
+<td>
+              org.apache.portals.applications .webcontent.rewriter.html.neko 
.NekoParserAdaptor
+            </td>
+            
+<td>
+              &lt;pathname&gt; and &lt;parserAdaptorName&gt; should be 
replaced by the real path name.
+              With this example, you may use 'apache' or 'portals' for 
&lt;pathname&gt;
+              and you may use 'html' or 'xml' for &lt;parserAdaptorName&gt;.
+              <br />
+              The parser adaptor class name.
+            </td>
+          </tr>
+          
+<tr class="a">
+            
+<td>proxy.reverse.pass.&lt;pathname&gt;.rewriter.parserAdaptor.&lt;parserAdaptorName&gt;.mimeType</td>
+            
+<td></td>
+            
+<td>
+              text/html
+            </td>
+            
+<td>
+              &lt;pathname&gt; and &lt;parserAdaptorName&gt; should be 
replaced by the real path name.
+              With this example, you may use 'apache' or 'portals' for 
&lt;pathname&gt;
+              and you may use 'html' or 'xml' for &lt;parserAdaptorName&gt;.
+              <br />
+              The mime type which this parser adaptor concerns.
+            </td>
+          </tr>
+          
+<tr class="b">
+            
+<td>proxy.reverse.pass.&lt;pathname&gt;.rewriter.parserAdaptor.&lt;parserAdaptorName&gt;.&lt;propertyName&gt;</td>
+            
+<td></td>
+            
+<td>propertyValue</td>
+            
+<td>
+              &lt;pathname&gt;, &lt;parserAdaptorName&gt; and 
&gt;propertyName&lt; should be replaced by the real property name.
+              <br />
+              Sets property with the value on the rule-based rewriter bean 
instance. 
+            </td>
+          </tr>
+          
+<tr class="a">
+            
+<td>proxy.reverse.pass.&lt;pathname&gt;.rewriter.ruleMappings</td>
+            
+<td></td>
+            
+<td>
+              /WEB-INF/conf/rewriter-rules-mapping.xml
+            </td>
+            
+<td>
+              &lt;pathname&gt; should be replaced by the real path name.
+              With this example, you may use 'apache' or 'portals' for 
&lt;pathname&gt;.
+              <br />
+              The rewriting rule mappings configuration and
+              rewriter rule definition.
+              <br />
+              The configuration path can be an absolute file path prefixed by 
'file:',
+              or it can be a classpath resource prefixed by 'classpath:'.
+            </td>
+          </tr>
+          
+<tr class="b">
+            
+<td>proxy.reverse.pass.&lt;pathname&gt;.rewriter.rules</td>
+            
+<td></td>
+            
+<td>
+              /WEB-INF/conf/default-rewriter-rules.xml
+            </td>
+            
+<td>
+              &lt;pathname&gt; should be replaced by the real path name.
+              With this example, you may use 'apache' or 'portals' for 
&lt;pathname&gt;.
+              <br />
+              The rewriter rules definition.
+              <br />
+              The configuration path can be an absolute file path prefixed by 
'file:',
+              or it can be a classpath resource prefixed by 'classpath:'.
+            </td>
+          </tr>
+          
+<tr class="a">
+            
+<td>proxy.reverse.pass.&lt;pathname&gt;.request.header.&lt;headerName&gt;</td>
+            
+<td></td>
+            
+<td>
+              proxy.reverse.pass.somewhere.request.header.Accept-Language = en
+            </td>
+            
+<td>
+              &lt;pathname&gt; and &lt;headerName&gt; should be replaced by 
the real path name and header name.
+              With this example, you may use 'apache' or 'portals' for 
&lt;pathname&gt;.
+              <br />
+              The default request header values which are sent to the target 
remote url.
+            </td>
+          </tr>
+          
+<tr class="b">
+            
+<td>proxy.reverse.pass.&lt;pathname&gt;.request.cookie.&lt;cookieName&gt;</td>
+            
+<td></td>
+            
+<td>
+              proxy.reverse.pass.somewhere.request.cookie.Custom1 = Value1
+            </td>
+            
+<td>
+              &lt;pathname&gt; and &lt;cookieName&gt; should be replaced by 
the real path name and cookie name.
+              With this example, you may use 'apache' or 'portals' for 
&lt;pathname&gt;.
+              <br />
+              The default request cookies which are sent to the target remote 
url.
+            </td>
+          </tr>
+          
+<tr class="a">
+            
+<td>proxy.reverse.pass.&lt;pathname&gt;.response.cookie.path.rewrite.include</td>
+            
+<td></td>
+            
+<td>
+              JSESSIONID, PHPSESSIONID
+            </td>
+            
+<td>
+              &lt;pathname&gt; should be replaced by the real path name.
+              With this example, you may use 'apache' or 'portals' for 
&lt;pathname&gt;.
+              <br />
+              The cookies which should have rewritten paths.
+              By default, every cookie path is rewritten if there's no 
inclusion/exclusion configuration.
+            </td>
+          </tr>
+          
+<tr class="b">
+            
+<td>proxy.reverse.pass.&lt;pathname&gt;.response.cookie.path.rewrite.exclude</td>
+            
+<td></td>
+            
+<td>
+              CUSTOM1, CUSTOM2 
+            </td>
+            
+<td>
+              &lt;pathname&gt; should be replaced by the real path name.
+              With this example, you may use 'apache' or 'portals' for 
&lt;pathname&gt;.
+              <br />
+              The cookies which should have the original path as provided by 
the target web site.
+              If a cookie name is configured as an exclusion one, then the 
path of the cookie is not rewritten.
+              By default, every cookie path is rewritten if there's no 
inclusion/exclusion configuration.
+            </td>
+          </tr>
+        </table>
       
+    </div>
+    
+    
+<div class="section">
+<h2>Example Reverse Proxy Mapping Configurations<a 
name="Example_Reverse_Proxy_Mapping_Configurations"></a></h2>
+      
+      
+<div class="section">
+<h3>Simple Reverse Proxy Mapping<a 
name="Simple_Reverse_Proxy_Mapping"></a></h3>
+        
+<p>
+          In this example, we configure a simple reverse proxy mapping from 
the local path, /apache/, to the remote target path, http://apache.org/.
+          With this example configuration, the mappings are like the following:
+          </p>
+<ul>
+            
+<li>/webcontent/rproxy/apache/index.html --&gt; 
http://apache.org/index.html</li>
+            
+<li>/webcontent/rproxy/apache/foundation/ --&gt; 
http://apahce.org/foundataion/</li>
             
+<li>...</li>
+          </ul>
+        
+        
+<div class="source">
+<pre>
+# Registers a mapping named 'apache' by the following line
+proxy.reverse.pass = apache
+# Sets the local path
+proxy.reverse.pass.apache.local = /apache/
+# Sets the remote target path
+proxy.reverse.pass.apache.remote = http://apache.org/
+# Sets the default web content rewriter to rewrite contents such as links
+proxy.reverse.pass.apache.rewriter.basic = 
org.apache.portals.applications.webcontent.rewriter.WebContentRewriter
+# Registers the mime type named 'html' for a parser adaptor 
+proxy.reverse.pass.apache.rewriter.parserAdaptor = html
+# Sets the parse adaptor for the html mime type name.
+proxy.reverse.pass.apache.rewriter.parserAdaptor.html = 
org.apache.portals.applications.webcontent.proxy.impl.DefaultReverseProxyLinkRewritingParserAaptor
+# Sets the mime type string for the registered 'html' mime type name
+proxy.reverse.pass.apache.rewriter.parserAdaptor.html.mimeType = text/html
+# Sets the flag if the content rewriter should check all reverse proxy 
mappings during link rewriting
+proxy.reverse.pass.apache.rewriter.parserAdaptor.html.property.lookUpAllMappings
 = true
+          </pre></div>
+        
+<p>
+          
+        </p>
+      </div>
       
-              
-        <li class="expanded">
-                    <a href=".././webcontent2/index.html">WebContent-2</a>
-                  <ul>
-                  
-    <li class="none">
-                    <a href=".././webcontent2/modules-overview.html">Modules 
Overview</a>
-          </li>
-                  
-    <li class="none">
-                    <a 
href=".././webcontent2/content-rewriter-module.html">Content Rewriter Module</a>
-          </li>
-                  
-    <li class="none">
-                    <a 
href=".././webcontent2/reverse-proxy-module.html">Reverse Proxy Module</a>
-          </li>
-                  
-    <li class="none">
-                    <a href=".././webcontent2/portlets-module.html">Portlets 
Module</a>
-          </li>
-                  
-    <li class="none">
-                    <a href=".././webcontent2/war-module.html">WAR Module</a>
-          </li>
-                  
-    <li class="none">
-                    <a href=".././webcontent2/build-from-source.html">Build 
from source</a>
-          </li>
-                  
-    <li class="none">
-                    <a href=".././webcontent2/apidocs/index.html">JavaDocs</a>
-          </li>
-                  
-    <li class="none">
-                    <a href=".././webcontent2/faq.html">FAQ</a>
-          </li>
-              </ul>
-        </li>
-              
-    <li class="none">
-                    <a href=".././webcontent/index.html">WebContent-1</a>
-          </li>
-              
-    <li class="none">
-                    <a href=".././dbbrowser/index.html">DB Browser</a>
-          </li>
-              
-    <li class="none">
-                    <a href=".././logging/index.html">Logging</a>
-          </li>
+      
+<div class="section">
+<h3>Secured Reverse Proxy Mapping<a 
name="Secured_Reverse_Proxy_Mapping"></a></h3>
+        
+<p>
+          In this example, we configure a secured reverse proxy mapping from 
the local path to the secured remote target path.
+          The only difference is that the remote target path starts with 
'https:' instead of 'http:'.
+          With this example configuration, the mappings are like the following:
+          </p>
+<ul>
+            
+<li>/webcontent/rproxy/secure/blogs/ --&gt; https://blogs.apache.org/</li>
+            
+<li>...</li>
           </ul>
-              <h5>Support</h5>
-            <ul>
-              
-    <li class="none">
-                    <a href="../team-list.html">Project Team</a>
-          </li>
-              
-    <li class="none">
-                    <a href="../license.html">Project License</a>
-          </li>
-              
-    <li class="none">
-                    <a href="http://wiki.apache.org/portals/applications"; 
class="externalLink">Project Wiki</a>
-          </li>
-              
-    <li class="none">
-                    <a href="../mail-lists.html">Mailing List</a>
-          </li>
-              
-    <li class="none">
-                    <a href="../issue-tracking.html">Issue Tracking</a>
-          </li>
+        
+        
+<div class="source">
+<pre>
+proxy.reverse.pass = secure_blogs
+proxy.reverse.pass.secure_blogs.local = /secure/blogs/
+proxy.reverse.pass.secure_blogs.remote = https://blogs.apache.org/
+proxy.reverse.pass.secure_blogs.rewriter.basic = 
org.apache.portals.applications.webcontent.rewriter.WebContentRewriter
+proxy.reverse.pass.secure_blogs.rewriter.parserAdaptor = html
+proxy.reverse.pass.secure_blogs.rewriter.parserAdaptor.html = 
org.apache.portals.applications.webcontent.proxy.impl.DefaultReverseProxyLinkRewritingParserAaptor
+proxy.reverse.pass.secure_blogs.rewriter.parserAdaptor.html.mimeType = 
text/html
+proxy.reverse.pass.secure_blogs.rewriter.parserAdaptor.html.property.lookUpAllMappings
 = true
+          </pre></div>
+        
+<p>
+          
+        </p>
+      </div>
+      
+      
+<div class="section">
+<h3>Glob-based Reverse Proxy Mapping<a 
name="Glob-based_Reverse_Proxy_Mapping"></a></h3>
+        
+<p>
+          In this example, we configure a glob-based reverse proxy mapping 
from the local paths to the remote target paths.
+          With this example configuration, you can add multiple mappings like 
the followings:
+          </p>
+<ul>
+            
+<li>/webcontent/rproxy/www_apache/* --&gt; http://www.apache.org/*</li>
+            
+<li>/webcontent/rproxy/projects_apache/* --&gt; 
http://projects.apache.org/*</li>
+            
+<li>/webcontent/rproxy/people_apache/* --&gt; http://people.apache.org/*</li>
+            
+<li>/webcontent/rproxy/blogs_apache/* --&gt; http://blogs.apache.org/*</li>
+            
+<li>...</li>
           </ul>
-                                           <a href="http://maven.apache.org/"; 
title="Built by Maven" class="poweredBy">
-            <img alt="Built by Maven" 
src="../images/logos/maven-feather.png"></img>
-          </a>
-                       
-  
-
-  
-    
-  
-  
-    
-        </div>
-    </div>
-    <div id="bodyColumn">
-      <div id="contentBox">
-        <subtitle></subtitle><div class="section"><h2><a 
name="Overview"></a>Overview</h2>
-<p>
-        The Reverse Proxy Service is a servlet component which can be used as 
a 
-        <a class="externalLink" 
href="http://en.wikipedia.org/wiki/Reverse_proxy";>Reverse Proxy</a>.
-        Normally, this reverse proxy service is used by the Reverse Proxy 
IFrame portlet by
-        replacing the orignial SRC URLs by proxied URLs to this reverse proxy 
service.
-      </p>
-<p>
-        The Reverse Proxy Service is basically stateless like other normal 
proxy servers.
-        Client states such as cookies are just passed via the Reverse Proxy 
Service between clients and the target servers.
-        This is a difference from other HTTP Client based Web Content Portlets 
which normally manage client states in the server side.
-      </p>
-<p>
-        By using Reverse Proxy service component, more sophisticated content 
can be
-        served by setting content rewriting configurations, and also 
Cross-Domain Scripting can be enabled. 
-        The Web Content Portlet Application includes Reverse Proxy Service 
servlet and related components.
-      </p>
-<p><em>
-          Note: The ReverseProxyService should be able to access application 
level session attribute
-                shared by a portlet of IFrameGenericPortlet or its descendant, 
which is conforming
-                with the Portlet Specification.
-                If you are using Tomcat, then be sure to set the following in 
the server.xml to enable
-                this proper Portlet API session management requirements.
-                Modify the Connector element (default on port 8080) by adding 
the folowing attribute:
-          <div class="source"><pre>emptySessionPath=&quot;true&quot;</pre>
-</div>
-</em></p>
-<p>
-        The ReverseProxyService component is initialized by the 
ReverseProxyServlet configured in the web.xml as follows:
-        <div class="source"><pre>
-&lt;!-- Default Reverse Proxy Servlet --&gt;
-&lt;servlet&gt;
-  &lt;servlet-name&gt;ReverseProxyServlet&lt;/servlet-name&gt;
-  
&lt;servlet-class&gt;org.apache.portals.applications.webcontent.proxy.impl.DefaultHttpReverseProxyServlet&lt;/servlet-class&gt;
-  &lt;init-param&gt;
-    &lt;param-name&gt;reverseproxy.configuration&lt;/param-name&gt;
-    
&lt;param-value&gt;/WEB-INF/conf/reverseproxy*.properties&lt;/param-value&gt;
-  &lt;/init-param&gt;
-  &lt;init-param&gt;
-    
&lt;param-name&gt;reverseproxy.configuration.refresh.delay&lt;/param-name&gt;
-    &lt;param-value&gt;60000&lt;/param-value&gt;
-  &lt;/init-param&gt;
-  &lt;load-on-startup&gt;11&lt;/load-on-startup&gt;
-&lt;/servlet&gt;
-
-&lt;!-- Map /rproxy path to the Default Reverse Proxy Servlet --&gt;
-&lt;servlet-mapping&gt;
-  &lt;servlet-name&gt;ReverseProxyServlet&lt;/servlet-name&gt;
-  &lt;url-pattern&gt;/rproxy/*&lt;/url-pattern&gt;
-&lt;/servlet-mapping&gt;
-          </pre>
-</div>
-</p>
-<p>
-        The above servlet can have the following init parameters:
-        <table class="bodyTable"><tr class="a"><th>Name</th>
-<th>Example Value</th>
-<th>Description</th>
-</tr>
-<tr class="b"><td>reverseproxy.configuration</td>
-<td>
-              /WEB-INF/conf/reverseproxy.properties<br />
-
-              or<br />
-
-              /WEB-INF/conf/reverseproxy*.properties<br />
-
-              or<br />
-
-              file:///etc/portals/reverseproxy.properties<br />
-
-              or<br />
-
-              file:///etc/portals/reverseproxy*.properties<br />
-
-              or<br />
-
-              classpath:/META-INF/conf/reverseproxy.properties
-              or<br />
-
-              classpath:/META-INF/conf/reverseproxy*.properties
-            </td>
-<td>
-              The context relative path of the configuration properties file.
-              <br />
-
-              The configuration path can be an absolute file path prefixed by 
'file:',
-              or it can be a classpath resource prefixed by 'classpath:'.
-              <br />
-
-              Also, the configuration path can contain glob expression, in 
which case
-              all configuration files matched to the glob expression are 
loaded.
-            </td>
-</tr>
-<tr class="a"><td>reverseproxy.configuration.refresh.delay</td>
-<td>60000</td>
-<td>
-              The milliseconds of automatic refreshing interval.
-              If this value is set to a positive number, then
-              the servlet checks if the configuration file has been modified 
and
-              it tries to reload the configuration if there's any changes.
-              By default, this value is set to zero without automatic 
refreshment.
-            </td>
-</tr>
-</table>
-</p>
-<p>
-        In the above servlet mapping configuration, 
-        the entry path mapping of this reverse proxy servlet is set to 
'/rproxy/*'.
-        So, the remaining local path info after the '/rproxy' is used to map 
the path
-        to the remote url.
-        This mapping configurations and other sophisticated http parameters 
are configured
-        in '/WEB-INF/conf/reverseproxy.properties' by default.
-        A simple configuration example can be as follows:
-        <div class="source"><pre>
-# A very simple configuration of reverseproxy.properties
-#
-# Proxy Pass Reverse Mapping configurations for each category
-# ... Put the path item names here. Each path item will be evaluated by the 
order. 
-proxy.reverse.pass = apache, portals
-
-proxy.reverse.pass.apache.local = /apache/
-proxy.reverse.pass.apache.remote = http://www.apache.org/
-
-proxy.reverse.pass.portals.local = /portals/
-proxy.reverse.pass.portals.remote = http://portals.apache.org/
-          </pre>
-</div>
-</p>
-<p>
-        In the above example, just two path mappings are defined: 
-        One for http://www.apache.org/ and the other for 
http://portals.apache.org/.
-        For http://www.apache.org/, the local path, /apache/, is mapped.
-        And for http://portals.apache.org/, the local path, /portals/, is 
mapped.
-      </p>
-<p>
-        That is, the servlet path mappings would be like the followings:
-        <ul><li>/webcontent/rproxy/apache/* --&gt; http://www.apache.org/*</li>
-<li>/webcontent/rproxy/portals/* --&gt; http://portals.apache.org/*</li>
-</ul>
-<em>Note: '/webcontent' is just a context path and '/rproxy' is just a servlet 
mapping for the reverse proxy servlet.</em></p>
-<p>
-        So, if you visit the reverse proxy url like 
'http://localhost:8080/webcontent/rproxy/portals/index.html
-        in your browser, then you can browse the Apache Portals homepage via 
the reverse proxy component!
-      </p>
-</div>
-<div class="section"><h2><a 
name="Reverse_Proxy_Service_Configurations"></a>Reverse Proxy Service 
Configurations</h2>
-<p>
-        The Reverse Proxy Service uses <a class="externalLink" 
href="http://commons.apache.org/configuration/";>Commons Configuration</a> to 
read configuration properties files.
-        So, you can leverage the power of Commons Configurations to configure 
properties. Here are two useful tips for that:
-        <ul><li><em>
-              Tip #1: Variables, which are previously defined, can be expanded 
when the configuration has
-                      the variable references wrapped by '${' and '}' like the 
following example:
-              <div class="source"><pre>
-my.cookie.policy = netscape
-proxy.http.client.param.cookiePolicy = ${my.cookie.policy}
-                </pre>
-</div>
-</em></li>
-<li><em>
-              Tip #2: String array typed configuration variables can be 
defined in one comma separated line or in multiple lines.
-                      The following two examples are equivalent each other:
-              <div class="source"><pre>
-proxy.reverse.pass.site1.response.cookie.path.rewrite.include = JSESSIONID, 
PHPSESSIONID
-                </pre>
-</div>
-<div class="source"><pre>
-proxy.reverse.pass.site1.response.cookie.path.rewrite.include = JSESSIONID
-proxy.reverse.pass.site1.response.cookie.path.rewrite.include = PHPSESSIONID
-                </pre>
-</div>
-</em></li>
-</ul>
-</p>
-<p><table class="bodyTable"><tr class="b"><th>Property</th>
-<th>Default Value</th>
-<th>Example Value</th>
-<th>Description</th>
-</tr>
-<tr class="a"><td>proxy.http.client.param.allowCircularRedirects</td>
-<td>false</td>
-<td>false</td>
-<td>Flag whether the internal http client object should allow circular 
redirects.</td>
-</tr>
-<tr class="b"><td>proxy.http.client.param.cookiePolicy</td>
-<td>best-match</td>
-<td>netscape</td>
-<td>
-              Flag whether the internal http client object should allow 
circular redirects.
-              Please see the documentation of httpclient 4.x on cookie 
policies.
-            </td>
-</tr>
-<tr class="a"><td>proxy.http.client.default.proxy</td>
-<td></td>
-<td>proxyserver1, proxyserver2</td>
-<td>
-              The system default comma delimited HTTP proxy names. Each proxy 
name should be used
-              in the following configuration properties to set detailed http 
connection options
-              for each proxy.
-            </td>
-</tr>
-<tr 
class="b"><td>proxy.http.client.default.proxy.&lt;proxyname&gt;.hostname</td>
-<td></td>
-<td>proxyserver1</td>
-<td>
-              &lt;proxyname&gt; should be replaced by the real proxy name.
-              With this example, you may use 'proxyserver1' or 'proxyserver2' 
for &lt;proxyname&gt;.
-              <br />
-
-              The host name of the target of this proxy.
-            </td>
-</tr>
-<tr class="a"><td>proxy.http.client.default.proxy.&lt;proxyname&gt;.port</td>
-<td></td>
-<td>10080</td>
-<td>
-              &lt;proxyname&gt; should be replaced by the real proxy name.
-              With this example, you may use 'proxyserver1' or 'proxyserver2' 
for &lt;proxyname&gt;.
-              <br />
-
-              The port number of the target of this proxy.
-              If you don't set this property, it means ANY port is allowed for 
this proxy.
-            </td>
-</tr>
-<tr class="b"><td>proxy.http.client.default.proxy.&lt;proxyname&gt;.scheme</td>
-<td></td>
-<td>http</td>
-<td>
-              &lt;proxyname&gt; should be replaced by the real proxy name.
-              With this example, you may use 'proxyserver1' or 'proxyserver2' 
for &lt;proxyname&gt;.
-              <br />
-
-              The scheme of the target of this proxy.
-              If you don't set this property, it means ANY scheme is allowed 
for this proxy.
-            </td>
-</tr>
-<tr class="a"><td>proxy.http.connManager.param.maxTotalConnections</td>
-<td>2</td>
-<td>200</td>
-<td>
-              The maximum http connection counts.
-              If there's any http connections available, then it will block 
the request until it gets a connection.
-            </td>
-</tr>
-<tr class="b"><td>proxy.http.connManager.param.timeout</td>
-<td>0</td>
-<td>10000</td>
-<td>
-              The maximum waiting time to create http connection.
-              If this is set to zero, it waits without timeout option, so it 
depends on the system configuration.
-            </td>
-</tr>
-<tr class="a"><td>proxy.http.route.param.defaultMaxPerRoute</td>
-<td></td>
-<td>20</td>
-<td>
-              The default maximum http connection count per route.
-            </td>
-</tr>
-<tr class="b"><td>proxy.http.route.&lt;routename&gt;.target.hostname</td>
-<td></td>
-<td>portals.apache.org</td>
-<td>
-              &lt;routename&gt; should be replaced by the real route name.
-              With this example, you may use 'apache' or 'portals'.
-              <br />
-
-              The host name of the target of this route.
-            </td>
-</tr>
-<tr class="a"><td>proxy.http.route.&lt;routename&gt;.target.port</td>
-<td></td>
-<td>80</td>
-<td>
-              &lt;routename&gt; should be replaced by the real route name.
-              With this example, you may use 'apache' or 'portals'.
-              <br />
-
-              The port number of the target of this route.
-              If you don't set this property, it means ANY port is allowed for 
this route.
-            </td>
-</tr>
-<tr class="b"><td>proxy.http.route.&lt;routename&gt;.target.scheme</td>
-<td></td>
-<td>http</td>
-<td>
-              &lt;routename&gt; should be replaced by the real route name.
-              With this example, you may use 'apache' or 'portals'.
-              <br />
-
-              The scheme of the target of this route.
-              If you don't set this property, it means ANY scheme is allowed 
for this route.
-            </td>
-</tr>
-<tr class="a"><td>proxy.http.route.&lt;routename&gt;.maxConnections</td>
-<td></td>
-<td>40</td>
-<td>
-              &lt;routename&gt; should be replaced by the real route name.
-              With this example, you may use 'apache' or 'portals'.
-              <br />
-
-              The maximum http connection count of the target of this route.
-            </td>
-</tr>
-<tr class="b"><td>proxy.http.route.&lt;routename&gt;.local</td>
-<td></td>
-<td></td>
-<td>
-              &lt;routename&gt; should be replaced by the real route name.
-              With this example, you may use 'apache' or 'portals'.
-              <br />
-
-              The local address to connect from.
-            </td>
-</tr>
-<tr class="a"><td>proxy.http.route.&lt;routename&gt;.secure</td>
-<td>false</td>
-<td></td>
-<td>
-              &lt;routename&gt; should be replaced by the real route name.
-              With this example, you may use 'apache' or 'portals'.
-              <br />
-
-              Whether the route is (supposed to be) secure.
-            </td>
-</tr>
-<tr class="b"><td>proxy.http.route.&lt;routename&gt;.tunnelled</td>
-<td>plain</td>
-<td>tunneled</td>
-<td>
-              &lt;routename&gt; should be replaced by the real route name.
-              With this example, you may use 'apache' or 'portals'.
-              <br />
-
-              Whether the the route is tunnelled through the proxy.
-            </td>
-</tr>
-<tr class="a"><td>proxy.http.route.&lt;routename&gt;.layered</td>
-<td>plain</td>
-<td>layered</td>
-<td>
-              &lt;routename&gt; should be replaced by the real route name.
-              With this example, you may use 'apache' or 'portals'.
-              <br />
-
-              Whether the route is layered.
-            </td>
-</tr>
-<tr class="b"><td>proxy.http.route.&lt;routename&gt;.proxy</td>
-<td></td>
-<td>proxyserver1, proxyserver2</td>
-<td>
-              The comma delimited HTTP proxy names. Each proxy name should be 
used
-              in the following configuration properties to set detailed http 
connection options
-              for each proxy.
-            </td>
-</tr>
-<tr 
class="a"><td>proxy.http.route.&lt;routename&gt;.proxy.&lt;proxyname&gt;.hostname</td>
-<td></td>
-<td>proxyserver1</td>
-<td>
-              &lt;routename&gt; and &lt;proxyname&gt; should be replaced by 
the real route name and proxy name.
-              With this example, you may use 'apache' or 'portals' for 
&lt;routename&gt;
-              and you may use 'proxyserver1' or 'proxyserver2' for 
&lt;proxyname&gt;.
-              <br />
-
-              The host name of the target of this proxy.
-            </td>
-</tr>
-<tr 
class="b"><td>proxy.http.route.&lt;routename&gt;.proxy.&lt;proxyname&gt;.port</td>
-<td></td>
-<td>10080</td>
-<td>
-              &lt;routename&gt; and &lt;proxyname&gt; should be replaced by 
the real route name and proxy name.
-              With this example, you may use 'apache' or 'portals' for 
&lt;routename&gt;
-              and you may use 'proxyserver1' or 'proxyserver2' for 
&lt;proxyname&gt;.
-              <br />
-
-              The port number of the target of this proxy.
-              If you don't set this property, it means ANY port is allowed for 
this proxy.
-            </td>
-</tr>
-<tr 
class="a"><td>proxy.http.route.&lt;routename&gt;.proxy.&lt;proxyname&gt;.scheme</td>
-<td></td>
-<td>http</td>
-<td>
-              &lt;routename&gt; and &lt;proxyname&gt; should be replaced by 
the real route name and proxy name.
-              With this example, you may use 'apache' or 'portals' for 
&lt;routename&gt;
-              and you may use 'proxyserver1' or 'proxyserver2' for 
&lt;proxyname&gt;.
-              <br />
-
-              The scheme of the target of this proxy.
-              If you don't set this property, it means ANY scheme is allowed 
for this proxy.
-            </td>
-</tr>
-<tr class="b"><td>proxy.reverse.pass.dynamicProxyPathMapperCacheCount</td>
-<td>1000</td>
-<td>2000</td>
-<td>
-              The cache count of proxy path mappers which are dynamically 
created by glob style mappings.
-            </td>
-</tr>
-<tr class="a"><td>proxy.reverse.pass.maxMatchingPathPartCount</td>
-<td>2</td>
-<td>3</td>
-<td>
-              The max matching path part count.
-            </td>
-</tr>
-<tr 
class="b"><td>proxy.reverse.pass.reverseProxyRequestContextProviderClassName</td>
-<td></td>
-<td></td>
-<td>
-              The request context information provider class name, which 
should implement 
org.apache.portals.applications.webcontent.proxy.ReverseProxyRequestContextProvider.
-              The reverse proxy service will use this provider to check if the 
user of the request is in the specific role when the reverse proxy path 
resource is secured and
-              so some specificed allowed roles are configured.
-              <br />
-
-              If not configured, then the default implementation checks if the 
user is in the specified role via the provided HttpServletRequest object.
-            </td>
-</tr>
-<tr class="a"><td>proxy.reverse.pass.&lt;pathname&gt;.local</td>
-<td></td>
-<td>
-              /portals/<br />
-
-              or<br />
-
-              /*.apache/
-            </td>
-<td>
-              &lt;pathname&gt; should be replaced by the real path name.
-              With this example, you may use 'apache' or 'portals' for 
&lt;pathname&gt;.
-              <br />
-
-              The base local path info of the reverse proxy mapping.
-              For example, if the relative url is 
'/webcontent/rproxy/portals/index.html', then
-              because the path info is '/portals/index.html', this path 
mapping is selected.
-              <br />
-
-              This property can have a glob expression with '*'. Each '*' 
expression is translated
-              into regular expression variable references in the remote URL 
values.
-            </td>
-</tr>
-<tr class="b"><td>proxy.reverse.pass.&lt;pathname&gt;.remote</td>
-<td></td>
-<td>
-              http://portals.apache.org/<br />
-
-              or<br />
-
-              http://$1.apache.org/
-            </td>
-<td>
-              &lt;pathname&gt; should be replaced by the real path name.
-              With this example, you may use 'apache' or 'portals' for 
&lt;pathname&gt;.
-              <br />
-
-              The base remote url of the reverse proxy mapping.
-              For example, if the relative url is 
'/webcontent/rproxy/portals/index.html', then
-              because the path info is '/portals/index.html', this path 
mapping is selected and
-              the translated remote url can be 
'http://portals.apache.org/index.html'.
-            </td>
-</tr>
-<tr class="a"><td>proxy.reverse.pass.&lt;pathname&gt;.roles.allow</td>
-<td></td>
-<td>
-              dev<br />
-
-              or<br />
-
-              account, engineering
-            </td>
-<td>
-              &lt;pathname&gt; should be replaced by the real path name.
-              With this example, you may use 'apache' or 'portals' for 
&lt;pathname&gt;.
-              <br />
-
-              When this property is set, the reverse proxy path resource is 
secured.
-              The request user should be in the specified roles to access this 
resource.
-              <br />
-
-              By default, it is checked via 
javax.servlet.http.HttpServletRequest#isUserInRole(role).
-              However, you could provide a customized request context provider 
implementation with 
-              
<CODE>proxy.reverse.pass.reverseProxyRequestContextProviderClassName</CODE> 
property.
-            </td>
-</tr>
-<tr class="b"><td>proxy.reverse.pass.&lt;pathname&gt;.rewriter.basic</td>
-<td></td>
-<td>
-              org.apache.portals.applications. webcontent.rewriter. 
WebContentRewriter
-            </td>
-<td>
-              &lt;pathname&gt; should be replaced by the real path name.
-              With this example, you may use 'apache' or 'portals' for 
&lt;pathname&gt;.
-              <br />
-
-              The basic content rewriter class name.
-            </td>
-</tr>
-<tr 
class="a"><td>proxy.reverse.pass.&lt;pathname&gt;.rewriter.basic.property.&lt;propertyName&gt;</td>
-<td></td>
-<td>propertyValue</td>
-<td>
-              &lt;pathname&gt; and &gt;propertyName&lt; should be replaced by 
the real property name.
-              <br />
-
-              Sets property with the value on the basic rewriter bean 
instance. 
-            </td>
-</tr>
-<tr class="b"><td>proxy.reverse.pass.&lt;pathname&gt;.rewriter.rulebased</td>
-<td></td>
-<td>
-              org.apache.portals.applications. webcontent.rewriter. 
WebContentRewriter
-            </td>
-<td>
-              &lt;pathname&gt; should be replaced by the real path name.
-              With this example, you may use 'apache' or 'portals' for 
&lt;pathname&gt;.
-              <br />
-
-              The rule-based content rewriter class name.
-            </td>
-</tr>
-<tr 
class="a"><td>proxy.reverse.pass.&lt;pathname&gt;.rewriter.rulebased.property.&lt;propertyName&gt;</td>
-<td></td>
-<td>propertyValue</td>
-<td>
-              &lt;pathname&gt; and &gt;propertyName&lt; should be replaced by 
the real property name.
-              <br />
-
-              Sets property with the value on the rule-based rewriter bean 
instance. 
-            </td>
-</tr>
-<tr 
class="b"><td>proxy.reverse.pass.&lt;pathname&gt;.rewriter.parserAdaptor</td>
-<td></td>
-<td>
-              html, xml
-            </td>
-<td>
-              &lt;pathname&gt; should be replaced by the real path name.
-              With this example, you may use 'apache' or 'portals' for 
&lt;pathname&gt;.
-              <br />
-
-              The comma delimited parser adaptor names. Each parser adaptor 
name should be used
-              in the following configuration properties to set detailed parser 
adaptor properties.
-            </td>
-</tr>
-<tr 
class="a"><td>proxy.reverse.pass.&lt;pathname&gt;.rewriter.parserAdaptor.&lt;parserAdaptorName&gt;</td>
-<td></td>
-<td>
-              org.apache.portals.applications .webcontent.rewriter.html.neko 
.NekoParserAdaptor
-            </td>
-<td>
-              &lt;pathname&gt; and &lt;parserAdaptorName&gt; should be 
replaced by the real path name.
-              With this example, you may use 'apache' or 'portals' for 
&lt;pathname&gt;
-              and you may use 'html' or 'xml' for &lt;parserAdaptorName&gt;.
-              <br />
-
-              The parser adaptor class name.
-            </td>
-</tr>
-<tr 
class="b"><td>proxy.reverse.pass.&lt;pathname&gt;.rewriter.parserAdaptor.&lt;parserAdaptorName&gt;.mimeType</td>
-<td></td>
-<td>
-              text/html
-            </td>
-<td>
-              &lt;pathname&gt; and &lt;parserAdaptorName&gt; should be 
replaced by the real path name.
-              With this example, you may use 'apache' or 'portals' for 
&lt;pathname&gt;
-              and you may use 'html' or 'xml' for &lt;parserAdaptorName&gt;.
-              <br />
-
-              The mime type which this parser adaptor concerns.
-            </td>
-</tr>
-<tr 
class="a"><td>proxy.reverse.pass.&lt;pathname&gt;.rewriter.parserAdaptor.&lt;parserAdaptorName&gt;.&lt;propertyName&gt;</td>
-<td></td>
-<td>propertyValue</td>
-<td>
-              &lt;pathname&gt;, &lt;parserAdaptorName&gt; and 
&gt;propertyName&lt; should be replaced by the real property name.
-              <br />
-
-              Sets property with the value on the rule-based rewriter bean 
instance. 
-            </td>
-</tr>
-<tr 
class="b"><td>proxy.reverse.pass.&lt;pathname&gt;.rewriter.ruleMappings</td>
-<td></td>
-<td>
-              /WEB-INF/conf/rewriter-rules-mapping.xml
-            </td>
-<td>
-              &lt;pathname&gt; should be replaced by the real path name.
-              With this example, you may use 'apache' or 'portals' for 
&lt;pathname&gt;.
-              <br />
-
-              The rewriting rule mappings configuration and
-              rewriter rule definition.
-              <br />
-
-              The configuration path can be an absolute file path prefixed by 
'file:',
-              or it can be a classpath resource prefixed by 'classpath:'.
-            </td>
-</tr>
-<tr class="a"><td>proxy.reverse.pass.&lt;pathname&gt;.rewriter.rules</td>
-<td></td>
-<td>
-              /WEB-INF/conf/default-rewriter-rules.xml
-            </td>
-<td>
-              &lt;pathname&gt; should be replaced by the real path name.
-              With this example, you may use 'apache' or 'portals' for 
&lt;pathname&gt;.
-              <br />
-
-              The rewriter rules definition.
-              <br />
-
-              The configuration path can be an absolute file path prefixed by 
'file:',
-              or it can be a classpath resource prefixed by 'classpath:'.
-            </td>
-</tr>
-<tr 
class="b"><td>proxy.reverse.pass.&lt;pathname&gt;.request.header.&lt;headerName&gt;</td>
-<td></td>
-<td>
-              proxy.reverse.pass.somewhere.request.header.Accept-Language = en
-            </td>
-<td>
-              &lt;pathname&gt; and &lt;headerName&gt; should be replaced by 
the real path name and header name.
-              With this example, you may use 'apache' or 'portals' for 
&lt;pathname&gt;.
-              <br />
-
-              The default request header values which are sent to the target 
remote url.
-            </td>
-</tr>
-<tr 
class="a"><td>proxy.reverse.pass.&lt;pathname&gt;.request.cookie.&lt;cookieName&gt;</td>
-<td></td>
-<td>
-              proxy.reverse.pass.somewhere.request.cookie.Custom1 = Value1
-            </td>
-<td>
-              &lt;pathname&gt; and &lt;cookieName&gt; should be replaced by 
the real path name and cookie name.
-              With this example, you may use 'apache' or 'portals' for 
&lt;pathname&gt;.
-              <br />
-
-              The default request cookies which are sent to the target remote 
url.
-            </td>
-</tr>
-<tr 
class="b"><td>proxy.reverse.pass.&lt;pathname&gt;.response.cookie.path.rewrite.include</td>
-<td></td>
-<td>
-              JSESSIONID, PHPSESSIONID
-            </td>
-<td>
-              &lt;pathname&gt; should be replaced by the real path name.
-              With this example, you may use 'apache' or 'portals' for 
&lt;pathname&gt;.
-              <br />
-
-              The cookies which should have rewritten paths.
-              By default, every cookie path is rewritten if there's no 
inclusion/exclusion configuration.
-            </td>
-</tr>
-<tr 
class="a"><td>proxy.reverse.pass.&lt;pathname&gt;.response.cookie.path.rewrite.exclude</td>
-<td></td>
-<td>
-              CUSTOM1, CUSTOM2 
-            </td>
-<td>
-              &lt;pathname&gt; should be replaced by the real path name.
-              With this example, you may use 'apache' or 'portals' for 
&lt;pathname&gt;.
-              <br />
-
-              The cookies which should have the original path as provided by 
the target web site.
-              If a cookie name is configured as an exclusion one, then the 
path of the cookie is not rewritten.
-              By default, every cookie path is rewritten if there's no 
inclusion/exclusion configuration.
-            </td>
-</tr>
-</table>
-</p>
-</div>
-<div class="section"><h2><a 
name="Example_Reverse_Proxy_Mapping_Configurations"></a>Example Reverse Proxy 
Mapping Configurations</h2>
-<div class="section"><h3><a name="Simple_Reverse_Proxy_Mapping"></a>Simple 
Reverse Proxy Mapping</h3>
-<p>
-          In this example, we configure a simple reverse proxy mapping from 
the local path, /apache/, to the remote target path, http://apache.org/.
-          With this example configuration, the mappings are like the following:
-          <ul><li>/webcontent/rproxy/apache/index.html --&gt; 
http://apache.org/index.html</li>
-<li>/webcontent/rproxy/apache/foundation/ --&gt; 
http://apahce.org/foundataion/</li>
-<li>...</li>
-</ul>
-</p>
-<div class="source"><pre>
-# Registers a mapping named 'apache' by the following line
-proxy.reverse.pass = apache
-# Sets the local path
-proxy.reverse.pass.apache.local = /apache/
-# Sets the remote target path
-proxy.reverse.pass.apache.remote = http://apache.org/
-# Sets the default web content rewriter to rewrite contents such as links
-proxy.reverse.pass.apache.rewriter.basic = 
org.apache.portals.applications.webcontent.rewriter.WebContentRewriter
-# Registers the mime type named 'html' for a parser adaptor 
-proxy.reverse.pass.apache.rewriter.parserAdaptor = html
-# Sets the parse adaptor for the html mime type name.
-proxy.reverse.pass.apache.rewriter.parserAdaptor.html = 
org.apache.portals.applications.webcontent.proxy.impl.DefaultReverseProxyLinkRewritingParserAaptor
-# Sets the mime type string for the registered 'html' mime type name
-proxy.reverse.pass.apache.rewriter.parserAdaptor.html.mimeType = text/html
-# Sets the flag if the content rewriter should check all reverse proxy 
mappings during link rewriting
-proxy.reverse.pass.apache.rewriter.parserAdaptor.html.property.lookUpAllMappings
 = true
-          </pre>
-</div>
-<p></p>
-</div>
-<div class="section"><h3><a name="Secured_Reverse_Proxy_Mapping"></a>Secured 
Reverse Proxy Mapping</h3>
-<p>
-          In this example, we configure a secured reverse proxy mapping from 
the local path to the secured remote target path.
-          The only difference is that the remote target path starts with 
'https:' instead of 'http:'.
-          With this example configuration, the mappings are like the following:
-          <ul><li>/webcontent/rproxy/secure/blogs/ --&gt; 
https://blogs.apache.org/</li>
-<li>...</li>
-</ul>
-</p>
-<div class="source"><pre>
-proxy.reverse.pass = secure_blogs
-proxy.reverse.pass.secure_blogs.local = /secure/blogs/
-proxy.reverse.pass.secure_blogs.remote = https://blogs.apache.org/
-proxy.reverse.pass.secure_blogs.rewriter.basic = 
org.apache.portals.applications.webcontent.rewriter.WebContentRewriter
-proxy.reverse.pass.secure_blogs.rewriter.parserAdaptor = html
-proxy.reverse.pass.secure_blogs.rewriter.parserAdaptor.html = 
org.apache.portals.applications.webcontent.proxy.impl.DefaultReverseProxyLinkRewritingParserAaptor
-proxy.reverse.pass.secure_blogs.rewriter.parserAdaptor.html.mimeType = 
text/html
-proxy.reverse.pass.secure_blogs.rewriter.parserAdaptor.html.property.lookUpAllMappings
 = true
-          </pre>
-</div>
-<p></p>
-</div>
-<div class="section"><h3><a 
name="Glob-based_Reverse_Proxy_Mapping"></a>Glob-based Reverse Proxy 
Mapping</h3>
-<p>
-          In this example, we configure a glob-based reverse proxy mapping 
from the local paths to the remote target paths.
-          With this example configuration, you can add multiple mappings like 
the followings:
-          <ul><li>/webcontent/rproxy/www_apache/* --&gt; 
http://www.apache.org/*</li>
-<li>/webcontent/rproxy/projects_apache/* --&gt; 
http://projects.apache.org/*</li>
-<li>/webcontent/rproxy/people_apache/* --&gt; http://people.apache.org/*</li>
-<li>/webcontent/rproxy/blogs_apache/* --&gt; http://blogs.apache.org/*</li>
-<li>...</li>
-</ul>
-</p>
-<div class="source"><pre>
-# Registers a mapping named 'all_apache' by the following line
-proxy.reverse.pass = all_apache
-# Sets the local path with glob expression
-proxy.reverse.pass.all_apache.local = /*_apache/
-# Sets the remote target path with the regular expression references. So, the 
first glob matched variable will be used as a replacement for $1.
-proxy.reverse.pass.all_apache.remote = http://$1.apache.org/
-proxy.reverse.pass.all_apache.rewriter.basic = 
org.apache.portals.applications.webcontent.rewriter.WebContentRewriter
-proxy.reverse.pass.all_apache.rewriter.parserAdaptor = html
-proxy.reverse.pass.all_apache.rewriter.parserAdaptor.html = 
org.apache.portals.applications.webcontent.proxy.impl.DefaultReverseProxyLinkRewritingParserAaptor
-proxy.reverse.pass.all_apache.rewriter.parserAdaptor.html.mimeType = text/html
-proxy.reverse.pass.all_apache.rewriter.parserAdaptor.html.property.lookUpAllMappings
 = true
-          </pre>
-</div>
-</div>
-</div>
-<div class="section"><h2><a 
name="Advanced_HTTP_Components_Configurations"></a>Advanced HTTP Components 
Configurations</h2>
-<p>
-        Because the Reverse Proxy Service uses <a class="externalLink" 
href="http://hc.apache.org/";>Apache HTTP Components</a>
-        and it exposes some important configurable properties, you can 
leverage the power of 
-        the configurability of Apache HTTP Components.
-      </p>
-<div class="section"><h3><a 
name="Configurations_on_HTTP_Connections"></a>Configurations on HTTP 
Connections</h3>
-<p>
-          In an enterprise environment, it could be very important to limit 
the maximum network resources
-          for system availability or performance.
-          You can configure the following property to limit the maximum total 
http connection count.
-          With the following example, the HTTP connections will not increase 
over 200.
-        </p>
-<div class="source"><pre>
-proxy.http.connManager.param.maxTotalConnections = 200
-        </pre>
-</div>
-<p>
-          Also, you can configure the timeout for an HTTP connection.
-          With the following example, the timeout is set to 10000 milliseconds.
-        </p>
-<div class="source"><pre>
-proxy.http.connManager.param.timeout = 10000
-        </pre>
-</div>
-</div>
-<div class="section"><h3><a 
name="Configurations_per_HTTP_Route"></a>Configurations per HTTP Route</h3>
-<p>
-          The default maximum HTTP connection can be configured per route with 
the following property.
-        </p>
-<div class="source"><pre>
-proxy.http.route.param.defaultMaxPerRoute = 20
-        </pre>
-</div>
-<p>
-          If the above configuration has been set, the maximum HTTP 
connections per each route will be limited to 20
-          even though the total connections are fewer than the maximum total 
connection count, 200. 
-        </p>
-<p>
-          You can also configure other HTTP Connection properties per each 
HTTP route.
-          Here's an example for a specific HTTP route.
-        </p>
-<div class="source"><pre>
-proxy.http.route = apache
-proxy.http.route.apache.target.hostname = www.apache.org
-proxy.http.route.apache.target.port = 80
-proxy.http.route.apache.maxConnections = 5
-proxy.http.route.apache.proxy = proxyserver1
-proxy.http.route.apache.proxy.proxyserver1.hostname = proxyserver1
-proxy.http.route.apache.proxy.proxyserver1.port = 8000
-        </pre>
-</div>
-<p>
-          With the above configuration, we set the maximum HTTP connection 
count to 5 for this specific route.
-          This configuration forces this HTTP Route to not have more than 5 
connections regardless other default configurations.
-        </p>
-<p>
-          Also, the above configuration has a proxy server configuration.
-          This is very useful when the web server should retrieve the remote 
content via the intranet proxy server. 
-        </p>
-</div>
-</div>
-
+        
+        
+<div class="source">
+<pre>
+# Registers a mapping named 'all_apache' by the following line
+proxy.reverse.pass = all_apache
+# Sets the local path with glob expression
+proxy.reverse.pass.all_apache.local = /*_apache/
+# Sets the remote target path with the regular expression references. So, the 
first glob matched variable will be used as a replacement for $1.
+proxy.reverse.pass.all_apache.remote = http://$1.apache.org/
+proxy.reverse.pass.all_apache.rewriter.basic = 
org.apache.portals.applications.webcontent.rewriter.WebContentRewriter
+proxy.reverse.pass.all_apache.rewriter.parserAdaptor = html
+proxy.reverse.pass.all_apache.rewriter.parserAdaptor.html = 
org.apache.portals.applications.webcontent.proxy.impl.DefaultReverseProxyLinkRewritingParserAaptor
+proxy.reverse.pass.all_apache.rewriter.parserAdaptor.html.mimeType = text/html
+proxy.reverse.pass.all_apache.rewriter.parserAdaptor.html.property.lookUpAllMappings
 = true
+          </pre></div>
       </div>
     </div>
-    <div class="clear">
-      <hr/>
-    </div>
-    <div id="footer">
-      <div class="xright">&#169;  
-          2004-2015
-    
-          Apache Software Foundation
-          
-  
-
-  
     
-  
-  
     
-  </div>
-      <div class="clear">
-        <hr/>
+<div class="section">
+<h2>Advanced HTTP Components Configurations<a 
name="Advanced_HTTP_Components_Configurations"></a></h2>
+      
+<p>
+        Because the Reverse Proxy Service uses <a class="externalLink" 
href="http://hc.apache.org/";>Apache HTTP Components</a>
+        and it exposes some important configurable properties, you can 
leverage the power of 
+        the configurability of Apache HTTP Components.
+      </p>
+      
+      
+<div class="section">
+<h3>Configurations on HTTP Connections<a 
name="Configurations_on_HTTP_Connections"></a></h3>
+        
+<p>
+          In an enterprise environment, it could be very important to limit 
the maximum network resources
+          for system availability or performance.
+          You can configure the following property to limit the maximum total 
http connection count.
+          With the following example, the HTTP connections will not increase 
over 200.
+        </p>
+        
+<div class="source">
+<pre>
+proxy.http.connManager.param.maxTotalConnections = 200
+        </pre></div>
+        
+<p>
+          Also, you can configure the timeout for an HTTP connection.
+          With the following example, the timeout is set to 10000 milliseconds.
+        </p>
+        
+<div class="source">
+<pre>
+proxy.http.connManager.param.timeout = 10000
+        </pre></div>
       </div>
+      
+      
+<div class="section">
+<h3>Configurations per HTTP Route<a 
name="Configurations_per_HTTP_Route"></a></h3>
+        
+<p>
+          The default maximum HTTP connection can be configured per route with 
the following property.
+        </p>
+        
+<div class="source">
+<pre>
+proxy.http.route.param.defaultMaxPerRoute = 20
+        </pre></div>
+        
+<p>
+          If the above configuration has been set, the maximum HTTP 
connections per each route will be limited to 20
+          even though the total connections are fewer than the maximum total 
connection count, 200. 
+        </p>
+        
+<p>
+          You can also configure other HTTP Connection properties per each 
HTTP route.

[... 51 lines stripped ...]

Reply via email to