apache > lenya
 

Running Lenya Behind Apache with mod_proxy

Configuring the Apache Web Server

First we'll declare the virtual hosts for the Apache web server. This is done in a file called httpd-vhosts.conf. On Mac OS X, it is located in the directory /opt/local/apache2/conf/extra. If you're using Jetty on port 8888, the contents of the file should look like this:

NameVirtualHost *:80
NameVirtualHost *:443

# This is the non-SSL host for the authoring environment.
<VirtualHost *:80>
    ServerAdmin webmaster@cms.example.com
    ServerName cms.example.com
    ServerAlias cms
    
    # Turn proxy requests off for security reasons
    ProxyRequests Off
    
    RewriteEngine On
    RewriteLog /home/john/src/www/logs/cms.example.com-rewrite_log
    RewriteLogLevel 4
    
    # First we match everything which is not mapped to /default/{area}
    RewriteRule ^/lenya/(.*) http://cms.example.com:8888/lenya/$1 [P,L]
    RewriteRule ^/modules/(.*) http://cms.example.com.com:8888/modules/$1 [P,L]
    RewriteRule ^/default/modules/(.*) http://cms.example.com:8888/default/modules/$1 [P,L]
    
    # Redirect the login usecase to https
    RewriteCond %{QUERY_STRING} (.*)lenya\.usecase=ac\.login(.*)
    RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [R,L]

    # Forward the areas to the proxy
    RewriteRule ^/(.*) http://cms.example.com:8888/default/$1 [P,L]
    ProxyPassReverse / http://cms.example.com:8888/default/
    
    ErrorLog /home/john/src/www/logs/cms.example.com-error_log
    CustomLog /home/john/src/www/logs/cms.example.com-access_log common
</VirtualHost>

# This is the SSL host for the authoring environment.
<VirtualHost *:443>
    ServerAdmin webmaster@cms.example.com
    ServerName cms.example.com
    ServerAlias cms

    SSLEngine On
    SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
    SSLCertificateFile /home/john/pki/server.crt
    SSLCertificateKeyFile /home/john/pki/server.key

    ProxyRequests Off
    RewriteEngine On
    RewriteLog /home/john/src/www/logs/cms.example.com-rewrite_log
    RewriteLogLevel 4

    RewriteRule ^/lenya/(.*) http://cms.example.com:8888/lenya/$1 [P,L]
    RewriteRule ^/modules/(.*) http://cms.example.com.com:8888/modules/$1 [P,L]
    RewriteRule ^/default/modules/(.*) http://cms.example.com:8888/default/modules/$1 [P,L]

    RewriteRule ^/(.*) http://cms.example.com:8888/default/$1 [P,L]
    ProxyPassReverse / http://cms.example.com:8888/default/
    
    ErrorLog /home/john/src/www/logs/cms.example.com-error_log
    CustomLog /home/john/src/www/logs/cms.example.com-access_log common
</VirtualHost>

# This is the non-SSL host for the live area.
<VirtualHost *:80>
    ServerAdmin webmaster@www.example.com
    ServerName www.example.com
    ServerAlias lenya
    
    ProxyRequests Off
    RewriteEngine On
    RewriteLog /Users/john/src/www/logs/www.example.com-rewrite_log
    RewriteLogLevel 4
    
    RewriteRule ^/([^/\.]+)$ $1/ [R]
    RewriteRule ^/(.*) http://www.example.com:8888/default/live/$1 [P,L]
    ProxyPassReverse / http://www.example.com:8888/default/live/
    
    ErrorLog /Users/john/src/www/logs/www.example.com-error_log
    CustomLog /Users/john/src/www/logs/www.example.com-access_log common
</VirtualHost>

If you're using Tomcat on port 8080 with Lenya in the context path lenya14, you have to change the port and add the context path accordingly:

    RewriteRule ^/(.*) http://cms.example.com:8080/lenya14/default/authoring/$1 [P,L]
    ProxyPassReverse / http://cms.example.com:8080/lenya14/default/authoring/
Note
With this setup, your browser might show error messages like "You have requested an encrypted page that contains some unencrypted information" when accessing a page with the https protocol. This is because Apache always connects to Lenya with the http protocol, so Lenya doesn't know that it should use https links to include images etc. on this page. This problem won't occur if you use the mod_proxy_ajp approach.