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