Ubuntu server 12.04/apache2
From Attie's Wiki
apt-get install apache2 libapache2-mod-php5 libapache2-svn # enable modrewrite ln -s ../mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load
Contents |
Configuring an Apache server
Configuration is in /etc/apache2
Initial Setup
cat <<EOF >>/etc/apache2/mods-available/cgi.load AddHandler cgi-script .cgi EOF cat <<EOF >/etc/apache2/mods-available/proxy.conf <IfModule mod_proxy.c> ProxyVia On ProxyRequests On <Proxy *> Order deny,allow Deny from all Allow from 127.0.0.1 Allow from .attie.co.uk </Proxy> </IfModule> EOF cat <<EOF >>/etc/apache2/conf.d/security # prevent access to sensitive files RedirectMatch 404 /\\.svn(/|$) RedirectMatch 404 /\\.git(/|$) RedirectMatch 404 /\\.ht # prevent directory listing by default Options -Indexes EOF ln -sf ../mods-available/proxy.load /etc/apache2/mods-enabled/proxy.load ln -sf ../mods-available/proxy.conf /etc/apache2/mods-enabled/proxy.conf ln -sf ../mods-available/proxy_http.load /etc/apache2/mods-enabled/proxy_http.load ln -sf ../mods-available/proxy_ftp.load /etc/apache2/mods-enabled/proxy_ftp.load ln -sf ../mods-available/proxy_ftp.conf /etc/apache2/mods-enabled/proxy_ftp.conf ln -sf ../mods-available/proxy_connect.load /etc/apache2/mods-enabled/proxy_connect.load
Site Configuration
Store site content in /home/www
mkdir /home/www chown www-data:www-data -R /home/www
Path goes with TLD first, and a few other rules. Access and Error logs are stored in the TLD's directory, with the subdomain prefixed. E.g:
Domain / Subdomain | Root Dir | |
---|---|---|
www.attie.co.uk |
→ | /home/www/attie.co.uk/htdocs
|
wiki.attie.co.uk |
→ | /home/www/attie.co.uk/wiki
|
joke.test.attie.co.uk |
→ | /home/www/attie.co.uk/test.joke
|
As the default configuration will deny access to .ht*
, we can use .htinfo
to store the configuration and logs.
Content | ${ROOTDIR}/
|
Config | ${ROOTDIR}/.htinfo/config
|
Access Log | ${ROOTDIR}/.htinfo/access.log
|
Error Log | ${ROOTDIR}/.htinfo/error.log
|
Start/Restart
service apache2 restart
Setup sites
Add a site file in /etc/apache2/sites-available
.
Enable the site by symlinking it into /etc/apache2/sites-enabled
.
If there is a reason to load one site before another, then use a prefix other than 50.
ln -s /home/www/attie.co.uk/htdocs/.htinfo/config /etc/apache2/sites-enabled/50-www.attie.co.uk
Sample config
<VirtualHost *:80> ServerAdmin webmaster@attie.co.uk ServerName attie.co.uk ServerAlias www.attie.co.uk DocumentRoot "/home/www/attie.co.uk/htdocs" CustomLog "/home/www/attie.co.uk/htdocs/.htinfo/access.log" combined ErrorLog "/home/www/attie.co.uk/htdocs/.htinfo/error.log" </VirtualHost>
Site Enable/Disable script
#!/bin/bash APACHE_SITE_DIR="/etc/apache2/sites-enabled" MY_DIR="/home/www" function usage { echo "$0 <enable|disable> <domain>" exit 1 } function validate { local me=$(readlink -f "$0") local mydir=$(dirname $me) if [ "$mydir" != "$MY_DIR" ]; then echo "$0: must be run from '$MY_DIR'..." exit 1 fi local fqdn=$1 local tld=$(echo $fqdn | rev | cut -d . -f 1 | rev) local tld_n=2 if [ "$tld" == "uk" ]; then tld_n=3 fi tld=$(echo $fqdn | rev | cut -d . -f -$tld_n | rev) local subdomain=$(echo $fqdn | sed -re "s/\.?$tld\$//") local subdomain_path=$(echo $subdomain | awk -F . '{i=NF;do{printf $(i);if(i>1){printf FS;}else{printf "\n";}}while(--i>0);}') if [ "$subdomain" == "" ]; then local config="$mydir/$tld/htdocs/.htinfo/config" else local config="$mydir/$tld/$subdomain_path/.htinfo/config" fi if [ ! -e "$config" ]; then echo "Config file missing... ('$config')" return 1 fi CONFIG="$config" local config_link="" local wcard="$APACHE_SITE_DIR/*-$fqdn" for file in "$APACHE_SITE_DIR/$fqdn" $wcard; do if [ -e "$file" ]; then config_link=$file break fi done if [ "$config_link" == "" ]; then config_link="$APACHE_SITE_DIR/50-$fqdn" else if [ ! -h "$config_link" ]; then echo "Apache config exists, and is not a symlink... ('$config_link')" exit 1 fi fi CONFIG_LINK="$config_link" return 0 } function enable { validate $1 || exit 1 ln -sf "$CONFIG" "$CONFIG_LINK" || { echo "Faailed to create link..." exit 1 } service apache2 reload || { echo "Failed to reload apache..." } echo "Successfully enabled $1" } function disable { validate $1 || exit 1 rm -f "$CONFIG_LINK" || { echo "Faailed to remove link..." exit 1 } service apache2 reload || { echo "Failed to reload apache..." } echo "Successfully DISABLED $1" } if [ "$#" != "2" ]; then usage fi case "$1" in "enable" | "e") enable $2 ;; "disable" | "d") disable $2 ;; esac