Virtual Hosts στον Apache httpd server σε Ubuntu και Debian


Εφόσον είδαμε σε αυτό το άρθρο πως να στήσεις ένα lamp stack τώρα θα δούμε πως θα έχεις την δυνατότητα να στήσεις virtualhosts στον apache2 server. Με απλά λόγια το virtual host, vhost για συντομία, είναι ο μηχανισμός που σου επιτρέπει να hostάρεις παραπάνω από ένα site στον ίδιο webserver.

Σε ubuntu, debian και λοιπές διανομές βασισμένες πάνω σε αυτές το virtualhost είναι ένα απλά ένα αρχείο με κατάλληλες ρυθμίσεις στον φάκελο /etc/apache2/sites-available ενώ τα site που apache θα σερβίρει είναι στο /etc/apache2/sites-enabled. Ακόμη ο φάκελος /etc/apache2/sites-enabled περιέχει symbolic links των vhost που θέλουμε να σερβίρει.

Τώρα το εκάστοτε αρχείο virtualhost έχει την εξής δομή:

 
<VirtualHost <ip>: <port> >
ServerAdmin <email>
ServerName <ip ή domain>
ServerAlias <ip ή domain>
DocumentRoot <path>

ErrorLog <path για logs σφαλμάτων>
CustomLog <path_για_logs> combined

<Directory />
   Order allow,deny
   Allow from all
   Require all granted
</Directory>
</Virtualhost>

Όπου:

  • <ip>: η Ip της διεπαφής που θα σερβίρει το περιεχόμενο και  <port> η θύρα που θα την σερβίρει. Για ip συνήσταται το * που συμαίνει για κάθε ip και port η 80 για http και 445 για https
  • <email> : όπως και η επιλογή ServerAdmin είναι προαιρετική και σε περίπτωση λάθους ή προβλήματος δύνεται η δυνατότητα να εμφανίζει που να επικοινωνήσουν για την επίλυσή του (πχ. σφάλμα 404)
  • <ip ή domain> είναι το όνομα που θα δίνει ο χρήστης στον browser όταν θα επισκέπτεται το εξής ιστότοπο. Πχ. αν το site σας είναι το http://malakies.gr θα βάλεται malakies.gr στην θέση του <ip ή domain>
  • <path> είναι η διαδρομή του φακέλου που θα περιέχει τα αρχεία που θα σερβίρει πχ. /home/www/htdocs.
  • <path για logs σφαλμάτων>,<path_για_logs> είναι η διαδρομή των αρχείων που θα καταγράφουν τα σφάλματα. Το ένα είναι για τα σφάλματα της php ή του script που θα τρέχει και θα εμφανίζει το περιεχόμενο και του άλλου θα καταγράφει την ip του ποιος έκανε αίτημα  http.

Tο εκάστοτε αρχείο το αποθηκεύουμε με το όνομα της μορφής κάτι.conf συνήθως η ονοματολογία του κάτι είναι της μορφής αριθμός-ονομα_site και επιλέγεται η ονοματολογία αυτή λόγο ότι ο apache «σκανάρει» με αλφαβητική σειρά τα vhosts προκειμένου να σερβίρει το κατάλληλο domain.

Tα vhosts τώρα ενεργοποιούνται με την εντολή:

sudo a2ensite κάτι

Και απενεργοποιούνται με την εντολή:

sudo a2dissite κάτι

Προκειμένου να εφαρμοστούν οι αλλαγές γίνεται ΠΑΝΤΑ:

sudo service apache2 reload

πχ. Ενα έχεται κάνει ένα vhost /etc/apache2/sites-available/mitsos.conf το ενεργοποιείται με τις εντολές:

sudo a2ensite mitsos 
sudo service apache2 reload 

και το απενεργοποιείται:

 sudo a2dissite mitsos
sudo service apache2 reload 
Παράδειγμα:

Έστω ότι έχουμε 2 site ένα που όταν θα δίνουμε mitsos στον browser θα εμφανίζει «Γειά σου Μίτσο» και ένα maria που θα εμφανίζει στον browser «Γεια σου Μαρία».

Για να γίνει αυτό πρώτα θα πειροάξουμε το hosts file (προϋποθέτουμε ότι είμαστε σε linux) του υπολογιστή που θα επισκεπτόμαστε το site. Αυτό το κάνουμε γιατί δεν υπάρχει domain mitsos ή maria έτσι για τις δοκιμές μας δημιουργούμε ένα. Σε περίπτωση που χρησιμοποιείται ΠΡΑΓΜΑΤΙΚΑ domain δεν χρειάζεται καν να αγγίξεται το αρχείο /etc/hosts που θα πειράξουμε.

Δίνουμε την εντολή:

sudo nano /etc/hosts 

και εκεί βάζουμε τις γραμμές

<ip> maria
<ip> mitsos

Όπου <ip> είναι η ip του μηχανήματος που θα φιλοξενεί το site και αποθηκεύουμε με CTRL+O και με CTRL+X τερματίζουμε το nano.

Μετά δημιουργούμε τους φακέλους (προϋποθέτουμε ότι το /home/user ανήκει σε χρήστη που κάνει τις ρυθμίσεις):

mkdir -p /home/user/maria/{htdocs,errors}
chmod -R +x /home/user/maria/
mkdir -p /home/user/mitsos/{htdocs,errors}
chmod -R +x /home/user/mitsos

Και το περιεχόμενο για το εκάστοτε site:


echo "<? php ehco \"Γεια σου Μίτσο\";?>" > /home/user/mitsos/htdocs/index.php
echo "<? php ehco \"Γεια σου Μαρία\";?>" > /home/user/maria/htdocs/index.php

Εφόσον τα κάνουμε δημιουργούμε τα vhosts:

  • Για το mitsos μημιουργούμε το /usr/apache2/sites-available/000-mitsos.conf
    <VirtualHost *:80 >
    
    ServerName mitsos
    ServerAlias mitsos
    DocumentRoot /home/user/mitsos/htdocs
    
    ErrorLog /home/user/mitsos/errors/error.log
    CustomLog /home/user/mitsos/errors/access.log combined
    
    <Directory />
       Order allow,deny
       Allow from all
       Require all granted
    </Directory>
    </Virtualhost>
    
  • Για το maria δημιουρφούμε το αρχείο /usr/apache2/sites-available/000-mitsos.conf
    <VirtualHost *:80 >
    
    ServerName maria
    ServerAlias maria
    DocumentRoot /home/user/maria/htdocs
    
    ErrorLog /home/user/mitsos/errors/error.log
    CustomLog /home/user/mitsos/errors/access.log combined
    
    <Directory />
       Order allow,deny
       Allow from all
       Require all granted
    </Directory>
    </Virtualhost>

Και τα ενεργοποιούμε με τις εξής εντολές:


sudo a2ensite 000-mitsos
sudo a2ensite 000-maria
sudo service apache2 reload

Σημείωση: Στην ενεργοποίηση των vhost δίνεται το όνομα του αρχείου του vhost ΧΩΡΙΣ την κατάληξη.

Λοιπόν πλέον είστε έτοιμος για να hostaρεται τα δικά σας site με έναν server.

Advertisements

One thought on “Virtual Hosts στον Apache httpd server σε Ubuntu και Debian

  1. Παράθεμα: Lamp Stack (Linux Apaxhe Mysql php) και Virtual Hosts σε Centos 6.6 | Pc_magas' Blog

Σχολιάστε

Εισάγετε τα παρακάτω στοιχεία ή επιλέξτε ένα εικονίδιο για να συνδεθείτε:

Λογότυπο WordPress.com

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό WordPress.com. Αποσύνδεση / Αλλαγή )

Φωτογραφία Twitter

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Twitter. Αποσύνδεση / Αλλαγή )

Φωτογραφία Facebook

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Facebook. Αποσύνδεση / Αλλαγή )

Φωτογραφία Google+

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Google+. Αποσύνδεση / Αλλαγή )

Σύνδεση με %s