====== 24.04 Apache Configuration ======
First we are going to move the document root of the apache webserver to be something more sensible, do this before we start installing any more web related things.
First Disable the default site...
a2dissite 000-default.conf
Remember to make the new root directory and change the permissions on the directory to 775 along with ownership for www-data
mkdir /srv/data/www
chown www-data:www-data /srv/data/www -R
Now copy the default config to a new one which we will make the new default.
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/solaris.conf
Now edit this new default config
nano /etc/apache2/sites-available/solaris.conf
ServerName solaris.scottworld.net
ServerAlias scottworld.net
ServerAdmin mark@scottworld.net
Redirect permanent / https://solaris.scottworld.net/
ServerName solaris.scottworld.net
ServerAlias scottworld.net
ServerAdmin mark@scottworld.net
DocumentRoot /srv/data/www/
Options +Indexes
Require all granted
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/solaris.scottworld.net/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/solaris.scottworld.net/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/solaris.scottworld.net/chain.pem
SSLCACertificateFile /etc/ssl/certs/ca-certificates.crt
Now we enable this as the default apache site.
a2ensite solaris.conf
Now we enable SSL
a2enmod ssl
Restart the apache2 service
systemctl restart apache2.service
Now check you can see the new document root by pointing a browser at your webserver (Drop a simple html file in there and see if you can read it.
===== SSL Forwarding =====
Create CNAMEs in external DNS to point to out location so external requests are directed to home address.
CNAME would be
scotthome.scottworld.net CNAME solaris.scottworld.net
Example to create a new apache website and reverse proxy to internal content.
Create a certificate for SSL using certbot
certbot certonly -d e.g: scotthome.scottworld.net
Create a file for the site in /etc/apache2/sites-available (eg site.conf)
ServerName scotthome.scottworld.net
Redirect permanent / https://scotthome.scottworld.net/
ServerAdmin mark@scottworld.net
ServerName scotthome.scottworld.net
ErrorLog ${APACHE_LOG_DIR}/scotthome.log
CustomLog ${APACHE_LOG_DIR}/scotthome.log combined
SSLEngine on
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/scotthome.scottworld.net/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/scotthome.scottworld.net/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/scotthome.scottworld.net/chain.pem
SSLCACertificateFile /etc/ssl/certs/ca-certificates.crt
ProxyPreserveHost On
ProxyRequests off
ProxyPass /api/websocket http://mars.scottworld.net:8123/api/websocket upgrade=websocket
ProxyPassReverse /api/websocket http://mars.scottworld.net:8123/api/websocket upgrade=websocket
ProxyPass / http://mars.scottworld.net:8123/
ProxyPassReverse / http://mars.scottworld.net:8123/
RewriteEngine on
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule /(.*) ws://mars.scottworld.net:8123/$1 [P,L]
RewriteCond %{HTTP:Upgrade} !=websocket [NC]
RewriteRule /(.*) http://mars.scottworld.net:8123/$1 [P,L]
Enable the rewrite engine
a2enmod rewrite
Then enable apache proxy and the site itself.
a2enmod proxy
a2enmod proxy_http
And Enable the site we just made
a2ensite scotthome.conf
And restart Apache
systemctl restart apache2.service