After spotting this comment on StatusNet saying about using another port on the same IP address for a web service, I thought I’d jot down what I do instead, to ensure I use the standard HTTP and HTTPS ports for my web applications.
In /etc/apache2/sites-available, I create a file called subdomain.your.host.name
<VirtualHost *:80> ServerAdmin webmaster@localhost ServerName subdomain.your.host.name ErrorLog ${APACHE_LOG_DIR}/subdomain.your.host.name.error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog ${APACHE_LOG_DIR}/subdomain.your.host.name.access.log combined ProxyPass / http://127.0.0.1:12345/ ProxyPassReverse / http://127.0.0.1:12345/ </VirtualHost>
Configure your non-apache app to bind to a port on 127.0.0.1, here I’ve set it to 12345
This proxies an HTTP only application… but if you want to proxy an HTTPS application, you either need to have a wildcard SSL certificate, use multiple IP addresses, or, as the original post suggested, use an alternate port.
If you’re proxying an application for HTTPS, try this:
<IfModule mod_ssl.c> <VirtualHost *:443> ServerAdmin webmaster@localhost ServerName subdomain.your.host.name ErrorLog ${APACHE_LOG_DIR}/ssl_subdomain.your.host.name.error.log LogLevel warn CustomLog ${APACHE_LOG_DIR}/ssl_subdomain.your.host.name.access.log combined SSLEngine on SSLCertificateChainFile /etc/openssl/root.crt SSLCertificateFile /etc/openssl/server.crt SSLCertificateKeyFile /etc/openssl/server.key BrowserMatch "MSIE [2-6]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 # MSIE 7 and newer should be able to use keepalive BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown ProxyPass / http://127.0.0.1:4670/ ProxyPassReverse / http://127.0.0.1:4670/ </VirtualHost> </IfModule>
Of course, if you’re looking to create several virtual hosts for apache, rather than proxy them, you can instead do this:
<VirtualHost *:80> ServerName subdomain.your.host.name ServerAdmin webmaster@localhost DocumentRoot /var/www_subdomain.your.host.name/ <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www_subdomain.your.host.name/> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> ErrorLog ${APACHE_LOG_DIR}/subdomain.your.host.name.error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog ${APACHE_LOG_DIR}/subdomain.your.host.name.access.log combined </VirtualHost>
Once you’ve got your config files up, you’ll need to enable them with the following command:
a2ensite subdomain.your.host.name
That assumes you named the file /etc/apache2/sites-available/subdomain.your.host.name
You may need to enable the proxy module with the command:
a2enmod proxy