You are viewing a plain text version of this content. The canonical link for it is here.
Posted to docs@cocoon.apache.org by st...@outerthought.org on 2003/02/05 17:00:07 UTC
[WIKI-UPDATE] ApacheModProxy PierFumagalli HowTos People Wed Feb 5 17:00:06 2003
Page: http://wiki.cocoondev.org/Wiki.jsp?page=ApacheModProxy, version: 2 on Wed Feb 5 15:58:02 2003 by PierFumagalli
- now _stable_ and much more performing than the "old" 1.3.
? ^ ^
+ now ''stable'' and much more performing than the "old" 1.3.
? ^^ ^^
+ {{{
+ }}}
- As Stefano, I had several headaches trying to connect Apache and [name your
? ^
+ As Stefano, I had several headaches trying to connect Apache and (name your
? ^
- Servlet container of choice]. Mod_JK (JK2) doesn't work for me, mod_webapp
? ^
+ Servlet container of choice). Mod_JK (JK2) doesn't work for me, mod_webapp
? ^
- Connecting Cocoon is _simple_: all you have to do is configure your servlet
+ Connecting Cocoon is __simple__: all you have to do is configure your servlet
? + +
+ {{{
+ }}}
- That's _IT_. It runs, and it runs smoothly.
+ That's __IT__. It runs, and it runs smoothly.
? + +
- Now, Apache is _definitely_ faster than any Java based servlet container in
+ Now, Apache is __definitely__ faster than any Java based servlet container in
? + +
- uses a kernel-based function called "sendfile", that makes its performances
? ^ ^
+ uses a kernel-based function called {{sendfile}}, that makes its performances
? ^^ ^^
- everything beginning with "/static/" straight out of my web-application,
? ^ ^
+ everything beginning with {{/static/}} straight out of my web-application,
? ^^ ^^
+ {{{
+ }}}
+ !!Letting Apache to handle error pages
+
+ Whenever we want Apache to handle error messages in a consistent way
+ (basically overwriting what Cocoon writes as a body in error pages), we can
+ do that by simply adding a few lines to the configurations we used before:
+
+ # Make sure that Apache processes the headers coming back from the proxy
+ # requests. This will enable also the evaluation of HTTP status codes.
+ ProxyPassReverse / http://localhost:8000/
+
+ # Tell mod_mod proxy that it should not send back the body-content of
+ # error pages, but be fascist and use its local error pages if the
+ # remote HTTP stack is sending an HTTP 4xx or 5xx status code.
+ ProxyErrorOverride On
+
+ # For each individual error we want to handle, let's specify what file
+ # we want to use. Note that all files must be available through a
+ # locally accessible directory (as our /static/), and they can even be
+ # SSI files (SHTML files).
+ ErrorDocument 404 /static/notfound.shtml
+ ErrorDocument 500 /static/error.shtml
+ ErrorDocument 502 /static/unavailable.shtml
+
+ This is how it can be done, so that (for example, as suggested by Jeremy),
+ one can configure Cocoon to dump full-stack-traces on the staging server,
+ (or from an interface available only to the internal network), while
+ displaying nicely formatted error messages to our client.
+
+ ----
+ !!Preserving the Host header through a proxy
+
+ In some cases, it is quite important to preserve the "Host" header
+ throughout the proxied request.
+
+ For example, to be able to deal with multiple virtual hosts on the backend
+ servlet container, the proxied request MUST include the original Host name
+ requested by our client. Apache allows us to pass this value through using
+ the ProxyPreserveHost directive:
+
+ # Make sure that the virtual host name is passed through to the
+ # backend servlet container for virtual host support.
+ ProxyPreserveHost On
+
+ ----
+ !!Putting it all together
+
+ Linking together all the different pieces we've analyzed before, now, we can
+ attempt to write up a do-it-all fragment of our httpd.conf file:
+
+
+ #######################################################################
+ # GLOBAL CONFIGURATIONS #
+ #######################################################################
+
+ # Make sure that my document root points to the root of the web
+ # application (where the WEB-INF is located, for instance).
+ DocumentRoot /export/webapps/cocoon
+
+ # Make sure that Server Side Includes are processed and sent
+ # to the client with mime-type as text/html
+ AddType text/html .shtml
+ AddOutputFilter Includes .shtml
+
+ # Make sure that our SHTMLs are processed in the static
+ # directory
+ <Directory "/export/webapps/cocoon">
+ Options +IncludesNoExec
+ </Directory>
+
+ #######################################################################
+ # ERROR PAGES CONFIGURATION #
+ #######################################################################
+
+ # If mod_proxy cannot connect to the servlet container, we want
+ # to display a nice static page saying the reason. This is a
+ # SHTML page (using the Server-Side-Includes filter)
+ ErrorDocument 502 /static/unavailable.shtml
+
+ # For each individual error we want to handle, let's specify what file
+ # we want to use. Note that all files must be available through a
+ # locally accessible directory (as our /static/), and they can even be
+ # SSI files (SHTML files).
+ ErrorDocument 404 /static/notfound.shtml
+ ErrorDocument 500 /static/error.shtml
+
+ #######################################################################
+ # MOD_PROXY CONFIGURATIONS #
+ #######################################################################
+
+ # Make sure that if the servlet container specifies a "Location" HTTP
+ # header during redirection starting with "http://localhost:8080/", we
+ # can handle it and return to our client the effective (not real)
+ # location we want to redirect them to. This is _essential_ to handle
+ # also the error returned by the backend servlet container.
+ ProxyPassReverse / http://localhost:8080/
+
+ # Make sure that the virtual host name is passed through to the
+ # backend servlet container for virtual host support.
+ ProxyPreserveHost On
+
+ # Tell mod_mod proxy that it should not send back the body-content of
+ # error pages, but be fascist and use its local error pages if the
+ # remote HTTP stack is sending an HTTP 4xx or 5xx status code.
+ ProxyErrorOverride On
+
+ #######################################################################
+ # MOD_REWRITE CONFIGURATIONS #
+ #######################################################################
+
+ # The nastiness begins, let's fire up the "rewrite engine"
+ RewriteEngine On
+
+ # Everything that starts with "/static" or "/static/" is served straight
+ # through: no redirection, no proxying, no nothing, and the [L] flag
+ # implies that if this rule is matched, no other matching must be
+ # performed
+ RewriteRule "^/static/?(.*)" "$0" [L]
+
+ # Everything that starts with a NON-CASE-SENSITIVE match (the NC flag)
+ # of "/WEB-INF" or "/WEB-INF/" is forbidden (the F flag). And again,
+ # this is the last rule (the L flag), nothing will be processed by the
+ # rewrite engine if this rule is matched
+ RewriteRule "^/WEB-INF/?(.*)" "$0" [L,F,NC]
+
+ # Everything ending in ".gif", ".jpg" or ".jpeg" will be served again
+ # directly by Apache, no need to bother the servlet container. As above
+ # this is the last rule as specified by the [L] flag at the end
+ RewriteRule "^/(.*)\.gif$" "$0" [L]
+ RewriteRule "^/(.*)\.(jpg|jpeg)$" "$0" [L]
+
+ # Everything else not matched above needs to go to the servlet container
+ # via HTTP listening on port 8080. The [P] flag (which is required)
+ # implies that our requests will be handled by mod_proxy.
+ RewriteRule "^/(.*)" "http://localhost:8080/$1" [P]
+
+ And that's all... You can roughly copy and paste this example in a
+ <VirtualHost> section of your httpd.conf (obviously after having applied the
+ appropriate modification), and go...
+
+ ----
Page: http://wiki.cocoondev.org/Wiki.jsp?page=PierFumagalli, version: 1 on Wed Feb 5 15:43:07 2003 by PierFumagalli
New page created:
+ I am just a wicked kid loving [Apache|http://httpd.apache.org/], [MacOS/X|http://www.apple.com/macosx/].
+
+ Oh, yes, and I also wrote the very first implementation of [Cocoon 2.0|http://cocoon.apache.org/], but it was only a big collection of bugs at the time...
+
Page: http://wiki.cocoondev.org/Wiki.jsp?page=HowTos, version: 59 on Wed Feb 5 15:46:25 2003 by PierFumagalli
- * __[Using Apache's mod_proxy with Cocoon|http://marc.theaimsgroup.com/?l=xml-cocoon-dev&m=104441321803644&w=2]__ -- A very nice description of how to configure Apache mod_proxy as a front-end to Cocoon by [Pier Fumagalli|PierFumagalli].
? ----------
+ * __[Using Apache's mod_proxy with Cocoon|http://marc.theaimsgroup.com/?l=xml-cocoon-dev&m=104441321803644&w=2]__ -- A description of how to configure Apache mod_proxy as a front-end to Cocoon by [Pier Fumagalli|PierFumagalli] ([Wiki Version|ApacheModProxy]).
? ++++++++++++++++++++++++++++++++
Page: http://wiki.cocoondev.org/Wiki.jsp?page=People, version: 90 on Wed Feb 5 15:37:23 2003 by PierFumagalli
+ * [Pier Fumagalli|PierFumagalli] -- Wicked kid.