#!/bin/bash # Make sure script is ran as root if [[ $EUID -ne 0 ]]; then exec sudo /bin/bash "$0" "$@" fi if [[ $1 = "" ]]; then echo "Usage: apache-add-proxy.sh [domain.com] [http://192.168.0.108:3000/]" exit 0 fi domain=$(perl -e "(\$d)=\"$1\"=~/(\\w+\\.\\w+)\$/;print \$d") host=$(perl -e "(\$d)=\"$1\"=~/(\\w+)\\.\\w+\\.\\w+\$/;print \$d") red='\033[0;31m' green='\033[0;32m' nocolor='\033[0m' if [[ -f "/etc/apache2/sites-enabled/$1.conf" ]]; then echo "Config file $1.conf does already exist" exit 1 fi if [[ ! -d "/var/www/$1" ]]; then mkdir "/var/www/$1" fi if [[ ! -d "/var/www/$1/logs" ]]; then mkdir "/var/www/$1/logs" fi chmod -R 777 "/var/www/$1" echo "Searching for SSL certificate for $domain ..." declare -a CertDirectories=("/var/www/$domain/certs" "/var/www/SSL-Certificates") unset CertDirectory for TestDirectory in "${CertDirectories[@]}" do if [[ -f "$TestDirectory/$domain-crt.pem" ]] && [[ -f "$TestDirectory/$domain-key.pem" ]] && [[ -f "$TestDirectory/$domain-chain.pem" ]]; then echo "SSL certificate found!" CertDirectory=$TestDirectory; fi done if [[ $host = "" ]]; then serveralias="ServerAlias www.$1" else serveralias="" fi echo Adding site cat <> "/etc/apache2/sites-enabled/$1.conf" ServerName $1 $serveralias ServerAdmin webmaster@$1 HostnameLookups Off ErrorLog /var/www/$1/logs/error.log CustomLog /var/www/$1/logs/access.log combined ProxyPreserveHost On ProxyPass "/" $2 ProxyPassReverse "/" $2 EOT1 if [[ ! $CertDirectory = "" ]]; then echo Adding SSL settings cat <> "/etc/apache2/sites-enabled/$1.conf" ServerName $1 $serveralias ServerAdmin webmaster@$1 HostnameLookups Off LogFormat "%h %l %u %{%Y-%m-%d %H:%M:%S}t \"%r\" %>s %b" mylogformat ErrorLog /var/www/$1/logs/error-ssl.log CustomLog /var/www/$1/logs/access-ssl.log mylogformat SSLEngine on SSLCertificateFile "$CertDirectory/$domain-crt.pem" SSLCertificateKeyFile "$CertDirectory/$domain-key.pem" SSLCertificateChainFile "$CertDirectory/$domain-chain.pem" BrowserMatch "MSIE [2-5]" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0 ProxyPreserveHost On ProxyPass "/" $2 ProxyPassReverse "/" $2 EOT2 fi apacheresult=$(apachectl configtest 2>&1) if [[ ! $apacheresult =~ "Syntax OK" ]]; then rm "/etc/apache2/sites-enabled/$1.conf" echo "Errors detected:" echo "$apacheresult" else echo "Site added!" systemctl restart apache2 fi