Using the Apache HTTP Server in font of CollectionSpace's Tomcat Server instance has many advantages. The two most important for us are port hiding and supporting TLS/SSL connections. Learn more about the Apache HTTP Server here: https://en.wikipedia.org/wiki/Apache_HTTP_Server
Port Hiding
This is useful for creating a landing page for CollectionSpace so one can ignore the :8180
port number as well as have Apache redirect you to the full site location if the user only knows the domain (and subdomain.) This is useful as remembering demo.collectionspace.org
is much nicer than remembering demo.collectionspace.org/collectionspace/ui/core/html/index.html
.
TLS/SSL
TLS/SSL are cryptographic protocols that provide communications security over the Internet and a computer network in general. Configuring CollectionSpace to communicate this way with its users is critical to protecting data and user information in a production instance. If you have trouble get this to work, please reach out to the CollectionSpace community for help. A great place to start is by sending an email to the CollectionSpace "Talk" email list at talk@collectionspace.org.
Instructions for installing on Ubuntu 16.04 LTS
First, make sure Apache HTTP Server is installed:
sudo apt-get install apache2
Enable the proxy and rewrite modules. These are necessary for what we wish to accomplish.
a2enmod rewrite a2enmod proxy a2enmod proxy_http a2enmod mod_ssl
Then restart apache.
/etc/init.d/apache2 restart (sudo service apache restart)
Next, make sure proxying is turned on, which is usually turned off by default in Ubuntu. Edit /etc/apache2/mods-enabled/proxy.conf
<IfModule mod_proxy.c> # If you want to use apache2 as a forward proxy, uncomment the # 'ProxyRequests On' line and the <Proxy *> block below. # WARNING: Be careful to restrict access inside the <Proxy *> block. # Open proxy servers are dangerous both to your network and to the # Internet at large. # # If you only want to use apache2 as a reverse proxy/gateway in # front of some web application server, you DON'T need # 'ProxyRequests On'. #ProxyRequests On ProxyRequests Off <Proxy *> AddDefaultCharset off Order deny,allow Deny from all #Allow from .example.com </Proxy> # Enable/disable the handling of HTTP/1.1 "Via:" headers. # ("Full" adds the server version; "Block" removes all outgoing Via: headers) # Set to one of: Off | On | Full | Block #ProxyVia Off ProxyVia On </IfModule>
Next, create a new virtual host
for your CollectionSpace instance.
Here is a sample VH directive for the server at mmidev.collectionspace.org (96.126.108.110) saved as /etc/apache2/sites-enabled/cspace
<VirtualHost 96.126.108.110:80> <Proxy *> Order deny,allow Allow from all </Proxy> ServerAdmin webmaster@localhost RewriteEngine on RewriteRule /collectionspace/(.*) http://mmidev.collectionspace.org:8180/collectionspace/$1 [P] # set server name ProxyPreserveHost On ServerName localhost DocumentRoot /var/www/html <Directory /> Options FollowSymLinks AllowOverride all </Directory> <Directory /var/www/html> Options Indexes FollowSymLinks MultiViews AllowOverride all Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog /var/log/apache2/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog /var/log/apache2/access.log combined </VirtualHost>
The VH here will allow Apache to know what to serve when it gets a request for mmidev.collectionspace.org on port 80 (the default http port). Any requests for mmidev.collectionspace/* (port 80) will be sent to the tomcat server listening on port 8180. Apache acts as a proxy server in this case and rewrites all incoming and outgoing URLs so the URL can be 'prettified' by having the port number (8180) stripped out.
Next, we notify apache of the VH we want to enable. In this case, cspace
a2ensite cspace
This will also create a symbolic link in apache's sites-enabled
directory.
Reload the apache configuration
/etc/init.d/apache2 reload
Finally, we want to create a landing page that will redirect the user to the full app location.
Save this template to your canonical default apache webdirectory: /var/www/index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>MMI CollectionSpace</title> <style> body {padding:0; font:1.1em/1.5 Verdana, arial, sans-serif; color: #000; margin:2em 0; text-align: center;} img {padding: 0; margin: 2em 0;} p {margin:1em 0 0 0; padding: 0;} a {text-decoration:none; color:#88AFD8;} </style> <META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE"> <META HTTP-EQUIV="Refresh" CONTENT="0; URL=http://mmidev.collectionspace.org/collectionspace/ui/core/html/index.html"> </head> <body> <p>If you are not automatically forwarded to the MMI CollectionSpace page please <a href="http://mmidev.collectionspace.org/collectionspace/ui/core/html/index.html">click here</a>.</p> </body> </html>
From here, the user can enter mmidev.collectionspace.org
and root index.html page will redirect them to mmidev.collectionspace.org/collectionspace/ui/mmi/html/index.html
. Apache will handle all requests in the default port and proxy them to tomcat listening on port 8180.