Konfiguracja Apache VirtualHost w Ubuntu
Tworzenie struktury katalogów
Wewnątrz document root
serwera Apache tworzymy katalogi w których znajdą się pliki planowanych VirtualHost.
Wewnątrz każdego z tych katalogów należy utworzyć katalog public_html
, w którym znajdą się katalogi i pliki.
cd ~/www
mkdir ‑p example.com/public_html
Gdzie: ‑p, –parents, nie zwraca błędu jeżeli katalog istnieje; tworzy brakujące katalogi nadrzędne
Udzielanie uprawnień do katalogów
W celu uzyskania możliwości tworzenie, usuwania i modyfikowania plików należy pamiętać o odpowiednim właścicielu, grupie oraz prawach do plików i katalogów. Wszystkie te informacje możemy wyświetlić pleceniem:
ls ‑la
Gdzie:
-l
, długi format wyjściowy, -a
, –all
bez ukrywania plików rozpoczynających się znakiem “.”
Właściciel, grupa, prawa dostępu
Wyświetlenie informacji o właścicielu i grupie do której należą katalogi i pliki.
ls ‑al
gdzie: a – wszystkie pliki, l – długi format wyjściowy.
Zmiana właściciela i grupy
W zależności od konfiguracji systemu zmieniamy właściciela i grupę.
sudo chown $USER:$USER ‑R sciezka/do/katalogu
gdzie:
-R
, zmiana rekursywna dla wszystkich plików i podkatalogów
$USER
, zmienna systemowa
Sprawdzamy i ewentualnie modyfikujemy uprawnienia do plików
sudo chmod 755 ‑R example.com/public_html
-R
, zmiana rekursywna
755
– oznacza udzielenie pełnych uprawnień dla właściciela (7), odczyt i wykonanie (5) dla grupy oraz pozostałych użytkowników.
Konfiguracja VirtualHost
W ramach konfiguracji należy w katalogu /etc/apache2/sites‐available
utworzyć plik konfiguracyjny. Najwygodniej jest przekopiować któryś z istniejących plików zmieniając jego nazwę, a następnie zedytować plik. W systemie operacyjnym Ubuntu domyślnym rozszerzeniem pliku wirtualnego hosta jest .conf
.
cd /etc/apache2/sites‐available
sudo cp istniejacy-plik.conf nowy-plik.conf
sudo gedit nowy-plik.conf
Przykładowa zawartość pliku konfiguracyjnego dla domeny example.com
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
ServerAdmin admin@example.com
DocumentRoot home/norbert/www/example.com/public_html
ErrorLog ${APACHE_LOG_DIR}/example.com-error.log
CustomLog ${APACHE_LOG_DIR}/example.com.access.log combined
</VirtualHost>
ServerName
– domena bazowa
ServerAlias
– dodatkowa domena wskazująca na to samo co domena bazowa
ServerAdmin
– adres email administratora
DocumentRoot
– katalog główny domeny
ErrorLog
– plik z logami błędów
CustomeLog
– plik z logami
Uruchomienia VirtualHost
Skrypt a2ensite dodaje konfigurację do serwera apache2. Dodatkowo przed restartem możemy sprawdzić poprawność konfiguracji.
sudo a2ensite nowy‐plik
apachectl configtest
sudo apachectl graceful
Konfoguracja pliku hosts
Plik hosts znajduje się w lokalizacji /etc/hosts
. Edytując go możemy przypisać daną domenę do adresu IP.
sudo gedit /etc/hosts
Przykładowe wpis dla domeny example.com
127.0.0.1 example.com
127.0.0.1
– adres IP (w tym przypadku adres localhost)
example.com
– domena
Powyższy zapis oznacza, że wprowadzenie nazwy domenowej example.com
będzie zawsze przekierowane na adres IP 127.0.0.1.
Możemy to sprawdzić poleceniem ping
.
ping example.com
Skrypt bash
Powyższe czynności konfiguracyjne można zautomatyzować np. przy pomocy skryptu bash‑a.
Poniższy skrypt tworzy katalog dla dodawanego virtual hosta. Nadaje katalogowi odpowiednie uprawnienia, tworzy plik konfiguracyjny w katalogu /etc/apache2/sites‐available, a następnie dodaje plik konfiguracyjny oraz opcjonalnie restartuje serwer apache. Skrypt służy jedynie do tworzenia virtual hostów w środowisku developerskim i dodaje do adresu końcówkę .local (np. example.local, www.example.local).
#!/bin/bash
# This script is used for create virtual hosts on Ubuntu 18.04.
# Created by nmorajda from https://abmstudio.pl
# PARAMETERS
# $usr – User
# $dir – directory of web files
# $servn – webserver address without www.
usr=‘norbert’
dir=’/home/norbert/www’
sitesAvailable=’/etc/apache2/sites-available’
if [ “$(whoami)” != ‘root’ ]; then
echo “You have to execute this script as root/sudo user”
exit 1;
fi
read ‑p “Enter the domain name your want (without www): ” servn
# Create web directory
if ! mkdir ‑p $dir/$servn; then
echo “Web directory already Exist!”
else
echo “Web directory created with success!”
fi
# Create domain index.php file
echo “<?php echo ‘<h1>Hello from $servn</h1>’; ?>” > $dir/$servn/index.php
chown ‑R $usr:$usr $dir/$servn
chmod ‑R ‘755’ $dir/$servn
# Create in /etc/apache2/sites‐available vhost config file
echo ”
<VirtualHost *:80>
ServerName $servn.local
ServerAlias www.$servn.local
ServerAdmin biuro@abmstudio.pl
DocumentRoot /home/norbert/www/$servn
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /home/norbert/www/$servn/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
ErrorLog /var/log/apache2/$servn.local.error.log
CustomLog /var/log/apache2/$servn.access.log combined
</VirtualHost>”> $sitesAvailable/$servn.local.conf
if ! echo ‑e $sitesAvailable/$servn.local.conf; then
echo “Virtual host wasn’t created!”
else
# Add to /etc/hosts file
echo “127.0.0.1 $servn.local” » /etc/hosts
echo “127.0.0.1 www.$servn.local” » /etc/hosts
# Create virtual host
a2ensite $servn.local
echo “Virtual host created!”
fi
# Restart server apache2
echo “Would you like me to restart the server [y/n]? ”
read q if [[ “${q}” == “yes” ]] || [[ “${q}” == “y” ]]; then
systemctl restart apache2
fi
# Happy end
echo “======================================”
echo “All works done! You should be able to see your website at http://$servn.local”
echo “======================================”
Skrypt o nazwie, np: create-virtual-host.sh
można umieścić w katalogu /usr/local/bin
i wywołać w terminalu poleceniem:
sudo create-virtual-host.sh
Można również utworzyć alias np.:
alias cvh=“create-virtual-host.sh”
i wywoływać skrypt poleceniem:
sudo cvh