Sunday, March 20, 2016

Apache subdomain virtualhosts over SSL

I've been scouring Google over the last couple of days, trying to find out how to setup subdomains over https without having to do IP-based virtualhosts or creating self-signed keys. It turns out the solution is pretty simple: set "NameVirtualHost *:443" (without quotes, of course) at the top of your SSL virtualhost config, and then you can proceed with setting up your virtualhosts as usual (I'm also redirecting all http traffic to https). For example:

NameVirtualHost *:443
<VirtualHost *:80>
ServerName yourdomain.com
ServerAlias www.yourdomain.com
Redirect "/" "https://www.yourdomain.com"
</VirtualHost>
<VirtualHost *:80>
ServerName staging.yourdomain.com
DocumentRoot /home/user/public_html/staging.yourdomain.com/current/public
RailsEnv staging
<Directory /home/user/public_html/staging.yourdomain.com/current/public>
AllowOverride all
Options -MultiViews
</Directory>
</VirtualHost>
<VirtualHost *:443>
ServerName www.yourdomain.com
ServerAlias yourdomain.com
DocumentRoot /var/www/public_html/www.yourdomain.com/current/public
RailsEnv production
<Directory /home/gom/public_html/www.yourdomain.com/current/public>
AllowOverride all
Options -MultiViews
</Directory>
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/your-ssl-cert.crt
SSLCertificateKeyFile /etc/apache2/ssl/your-ssl-key.key
SSLCertificateChainFile /etc/apache2/ssl/your-chain-file.crt
</VirtualHost>
<VirtualHost *:443>
ServerName staging.yourdomain.com
ServerAlias staging.yourdomain.com
DocumentRoot /var/www/public_html/staging.yourdomain.com/current/public
RailsEnv staging
<Directory /var/www/public_html/staging.yourdomain.com/current/public>
AllowOverride all
Options -MultiViews
</Directory>
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/your-ssl-cert.crt
SSLCertificateKeyFile /etc/apache2/ssl/your-ssl-key.key
SSLCertificateChainFile /etc/apache2/ssl/your-chain-file.crt
</VirtualHost>
view raw vhost.conf hosted with ❤ by GitHub