Αρκετοί είναι οι χρήστες που εγκαθιστούν τον Apache Web Server στον υπολογιστή τους για να αρχίσουν να μαθαίνουν Web Development ή για να κάνουν τοπικά την παραγωγή των έργων τους. Αλλά γνωρίζουν πως να φτιάξουν VirtualHosts με XAMPP και Apache;
Το πρόβλημα με την τοπική εγκατάσταση του Apache είναι πως η προκαθορισμένη μορφή εγκατάστασης δεν επιτρέπει την δημιουργία VirtualHost* και έτσι όσοι χρήστες εγκαθιστούν νέα έργα στην προκαθορισμένη εγκατάσταση έχουν URLs της μορφής http://127.0.0.1/project-name/ ή http://localhost/project-name/ κάτι που δεν είναι και τόσο κομψό και εύχρηστο.
Σε αυτό το tutorial, θα σας εξηγήσω τι είναι τα VirtualHosts και θα σας δείξω πως να ρυθμίσετε τον XAMPP (μπορείτε να ακολουθήσετε τα ίδια βήματα και σε αυτόνομες εγκαταστάσεις Apache) για να υποστηρίξει VirtualHosts ώστε να έχετε τα project σας συγκεντρωμένα κάτω από ένα φάκελο στο σύστημα σας, και να έχουν όλα σας τα έργα το δικό τους domain. Έτσι, αντί να έχει το έργο σας το domain http://127.0.0.1/project-name/ ή το http://localhost/project-name/ να έχει το domain http://www.my-project.ext/
Τι είναι τα VirtualHosts
Τα VirtualHosts είναι η διαδικασία κατά την οποία ο Apache Web Server μπορεί να εξυπηρετήσει περισσότερα από ένα καταλόγους (φακέλους) ως ξεχωριστούς “hosts”.
Ουσιαστικά αυτή η διαδικασία είναι παρόμοια με το να έχετε ένα υπολογιστή για κάθε έργο σας, με τη διαφορά που όλα τα έργα σας εξυπηρετούνται από τον ίδιο φυσικό υπολογιστή.
Τύποι VirtualHosts
Ο Apache υποστηρίζει τους ακόλουθους τύπος VirtualHost.
- Name Based VirtualHosts
- IP Based VirtualHosts
Name Based VirtualHosts
Οι Name Based VirtualHosts, είναι η ποιο απλή μορφή VirtualHost και σας επιτρέπει να κάνετε αντιστοίχηση ενός καταλόγου σε ένα domain.
Έτσι, αν για παράδειγμα έχετε τα ακόλουθα έργα:
- C:\htdocs\Project1
- C:\htdocs\Project2
- C:\htdocs\Project3
Μπορείτε με Name Based VirtualHosts να κάνετε ανάθεση ενός domain ανά κατάλογο, και στη συνέχεια να προσπελάσετε το κάθε έργο μέσω του Domain του.
Έτσι, αν υποθέσουμε πως έχετε τους παραπάνω καταλόγους, τότε μπορείτε να γράψετε τις ακόλουθες εντολές στο αρχείο ρυθμίσεων του Apache (θα σας υποδείξω αργότερα ποιο είναι αυτό το αρχείο) για να κάνετε την αντιστοίχηση των καταλόγων σε domains:
NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.project-1.ext
DocumentRoot "C:/htdocs/Project1"
</VirtualHost>
<VirtualHost *:80>
ServerName www.otherdomain.tld
DocumentRoot "C:/htdocs/Project2"
</VirtualHost>
<VirtualHost *:80>
ServerName www.my-local-domain.tld
DocumentRoot "C:/htdocs/Project2"
</VirtualHost>
Και έτσι τώρα θα μπορείτε από τον υπολογιστή σας να προσπελάσετε τα τρία αυτά έργα με το domain τους. Για παράδειγμα, για να προσπελάσετε το Project1 θα πρέπει να γράψετε στον Browser σας την διεύθυνση http://www.project-1.ext/ αντί για την διεύθυνση http://127.0.0.1/Project1 ή την διεύθυνση http://localhost/Project1
IP Based VirtualHosts
Οι IP Based VirtualHosts είναι χρήσιμοι για να μπορέσετε να προσθέσετε διαφορετικές ρυθμίσεις σε ένα host βάση της IP και της θύρα από την οποία πραγματοποιείτε η προσπέλαση του site.
Η ποιο συχνή χρήση αυτού του τύπου VirtualHost είναι για να μοιράσουμε από τον ίδιο Server διαφορετικά Site όταν η προσπέλαση γίνετε από διαφορετικές θύρες ή διαφορετικές κάρτες δικτύου.
Για τον συγκεκριμένο τύπο VirtualHost δεν θα αναφέρω περισσότερα, αφού δεν είναι κάτι το οποίο πρέπει να καλύψουμε σε αυτό το tutorial.
Μειονεκτήματα των Name Based VirtualHosts
Οι Name Based VirtualHosts είναι καλοί για την περίπτωση που θέλετε να βάλετε σε ένα μηχάνημα 5 – 6 ιστοσελίδες με τα δικά τους Domains.
Αν στο περιβάλλων εργασίας που είστε έχετε πολλά έργα ή έχετε σκοπό να δημιουργήσετε πολλά έργα, τότε αυτή η λύση δεν είναι η ιδανική, αφού μετά από κάποιο αριθμό έργον, ο υπολογιστής σας θα αρχίσει να βαραίνει, με αποτέλεσμα να μην μπορείτε να κάνετε την δουλειά σας αποτελεσματικά.
Επίσης, ακόμα ένα μειονέκτημα που έχει αυτή η λύση είναι πως κάθε φορά που δημιουργείτε ένα νέο έργο, θα πρέπει να κάνετε επανεκκίνηση και τον Apache Web Server.
Τέλος, με τους Name Based VirtualHosts ένας αμελής χρήστης μπορεί πολύ εύκολα να χαλάσει την δομή των αρχείων του στον σκληρό δίσκο του, με αποτέλεσμα να είναι δύσκολο να εντοπίσει κάποιο έργο όταν θα έχει μερικές δεκάδες έργων εγκατεστημένα στο PC του.
Λύση στο πρόβλημα
Η λύση στο πρόβλημα είναι να δημιουργήσουμε δυναμικά ρυθμιζόμενους VirtualHosts. Με τον Apache, έχουμε την δυνατότητα να χαρτογραφήσουμε την δομή ενός καταλόγου, και έτσι να έχουμε αυτόματη δημιουργία των VirtualHosts με κοινές ρυθμίσεις για όλους τους hosts που θα προκύψουν.
VirtualHosts με XAMPP και Apache
Ο τίτλος του άρθρου αναφέρετε στον XAMPP γιατί είναι ίσος ο ποιο εύκολος και διαδεδομένος τρόπος για να έχει κάποιος ένας πλήρες περιβάλλον ανάπτυξης ιστοσελίδων στον υπολογιστή του χωρίς να απαιτούνται ιδιαίτερες γνώσεις για το πως να στήσει το απαραίτητο λογισμικό.
Οι πληροφορίες που ακολουθούν είναι κοινές και για εγκαταστάσεις Apache Web Server έξω από το πακέτο διανομής XAMPP.
Στατική IP
Πριν αρχίσετε να κάνετε οτιδήποτε, θα πρέπει να ορίσετε στατική IP στον υπολογιστή σας. Όσοι δεν γνωρίζετε με ποιο τρόπο να κάνετε αυτή την αλλαγή, ακολουθήστε τις οδηγίες στο βίντεο που ακολουθεί (αγγλόφωνο) και δημιουργήστε την IP που επιθυμείτε.
Hosts file
Κανονικά για να μπορέσετε να δηλώσετε τα δικά σας domain θα πρέπει να στήσετε τον δικό σας DNS Server. Ωστόσο αυτή η διαδικασία είναι επώδυνη και απαιτεί αρκετή τεχνογνωσία.
Για να παρακάμψουμε αυτή τη διαδικασία μπορούμε να προσθέσουμε εγγραφές στο hosts file του υπολογιστή μας.
Στο συγκεκριμένο tutorial θα σας παρουσιάσω τον τρόπο με τον οποίο μπορείτε να επεξεργαστείτε και να προσθέσετε νέες εγγραφές στο αρχείο αυτό.
Στα Windows το αρχείο hosts είναι στον φάκελο C:\Windows\System32\drivers\etc\ και δεν έχει κάποια κατάληξη (πχ, .txt, .ini, .sys).
Για να το ανοίξετε, θα πρέπει να εκτελέσετε το πρόγραμμα επεξεργασίας της επιλογής σας (σας προτείνω το Notepad) με δικαιώματα διαχειριστή (πριν κάνετε κλικ για να το ανοίξετε, κάντε πάνω του δεξί κλικ, και επιλέξτε “Εκτέλεση ως διαχειριστής”).
Σημείωση: Μην ανοίξετε το αρχείο αυτό με κάποιο επεξεργαστή κειμένου, γιατί μπορεί να αποθηκεύσετε από αμέλεια πληροφορίες που δεν επιτρέπονται στο συγκεκριμένο αρχείο.
Όταν ανοίξει το πρόγραμμα της επιλογής σας, κάντε άνοιγμα αρχείου, πλοηγηθείτε στον φάκελο που σας έχω υποδείξει παραπάνω, και στο όνομα αρχείου γράψτε “hosts” (μαζί με τα εισαγωγικά) και πατήστε άνοιγμα.
Όταν ανοίξει το αρχείο, προσθέστε το τέλος του αρχείο μια νέα γραμμή και κάντε μια εγγραφή σαν αυτή που ακολουθεί:
192.168.1.150 www.my-project-domain.ext
H IP που έχω γράψει είναι τυχαία. Στην δική σας περίπτωση, θα πρέπει να γράψετε την στατική IP που ορίσατε στο PC στο προηγούμενο βήμα.
Σημείωση: Αν βάλετε μια δίεση μπροστά από την IP αυτόματα μετατρέπετε το υπόλοιπο της γραμμής σε σχόλιο. Αυτό έχει ως αποτέλεσμα να “απενεργοποιήσετε” αυτή την έγγραφή από το hosts αρχείο.
Σημείωση: Αν έχετε σκοπό να χρησιμοποιήστε καταλήξεις στα domain σας που αντιστοιχούν σε πραγματικά TLD, τότε βεβαιωθείτε πως τα doman αυτά δεν είναι ήδη κατοχυρωμένα, γιατί με αυτή την τεχνική, δεν θα μπορείτε να προσπελάσετε τα πραγματικά site στο διαδίκτυο. Έτσι για παράδειγμα, αν υποθέσουμε πως θέλετε να φτιάξετε μια εγγραφή που το domain θα είναι www.wordpress-gr.org, τότε θα πρέπει να γνωρίζεται πως δεν θα μπορείτε πλέον να προσπελάσετε αυτό το site ξανά, για όσο καιρό θα υπάρχει αυτή η εγγραφή στο hosts αρχείο σας.
Δυναμικοί VirtualHosts με XAMPP και Apache
Τέλος, σε αυτή την ενότητα θα ρυθμίσουμε τον Apache ώστε να μπορεί να δημιουργεί αυτόματα τους VirtualHosts.
Για να καταφέρουμε αυτή την ενέργεια θα πρέπει να πλοηγηθούμε στον φάκελο που είναι εγκατεστημένος ο Apache Web Server και να ανοίξουμε τον φάκελο /conf/extra/. Σε αυτό το φάκελο υπάρχει ένα αρχείο με όνομα httpd-vhosts.conf.
Σημείωση: Πριν κάνετε οτιδήποτε σε αυτό το αρχείο, κρατήστε αντίγραφο του αρχείου.
Το αρχείο αυτό θα πρέπει να έχει τον ακόλουθο κώδικα ο οποίος βέβαια αποτελεί παράδειγμα για να δημιουργήσετε τους δικούς σας VirtualHosts με XAMPP και Apache.
#
# Virtual Hosts
#
# If you want to maintain multiple domains/hostnames on your
# machine you can setup VirtualHost containers for them. Most configurations
# use only name-based virtual hosts so the server doesn't need to worry about
# IP addresses. This is indicated by the asterisks in the directives below.
#
# Please see the documentation at
# <URL:http://httpd.apache.org/docs/2.2/vhosts/>
# for further details before you try to setup virtual hosts.
#
# You may use the command line option '-S' to verify your virtual host
# configuration.
#
# Use name-based virtual hosting.
#
##NameVirtualHost *:80
#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for all requests that do not
# match a ServerName or ServerAlias in any block.
#
##<VirtualHost *:80>
##ServerAdmin postmaster@dummy-host.localhost
##DocumentRoot "C:/Web Server/xampp/htdocs/dummy-host.localhost"
##ServerName dummy-host.localhost
##ServerAlias www.dummy-host.localhost
##ErrorLog "logs/dummy-host.localhost-error.log"
##CustomLog "logs/dummy-host.localhost-accesss.log" combined
##</VirtualHost>
##<VirtualHost *:80>
##ServerAdmin postmaster@dummy-host2.localhost
##DocumentRoot "C:/Web Server/xampp/htdocs/dummy-host2.localhost"
##ServerName dummy-host2.localhost
##ServerAlias www.dummy-host2.localhost
##ErrorLog "logs/dummy-host2.localhost-error.log"
##CustomLog "logs/dummy-host2.localhost-accesss.log" combined
##</VirtualHost>
Σημείωση: Και σε αυτή την περίπτωση, σε κάθε γραμμή που τοποθετείτε μια δίεση στην αρχή της, μετατρέπετε αυτόματα όλη την γραμμή σε σχόλιο, με αποτέλεσμα ο Apache Web Server να την αγνοεί πλήρως.
Εμείς τώρα, για να δημιουργήσουμε τους δικούς μας δυναμικούς VirtualHosts, θα προσθέσουμε στο τέλος του αρχείο των ακόλουθο κώδικα:
UseCanonicalName Off
<VirtualHost 192.168.1.150:80>
VirtualDocumentRoot "C:/Web Projects/%3/%2.1/%2+"
DirectoryIndex index.php index.html
<Directory "C:/Web Projects/*/*/*">
Options FollowSymLinks
AllowOverride All
Allow from all
</Directory>
</VirtualHost>
Σημείωση: Προσέξτε πως όταν αναφέρομαι σε διαδρομές στο σύστημα αρχείων των Windows μέσα στα αρχεία ρυθμίσεων του Apache δεν χρησιμοποιώ κανονικά slash, αλλά ανάποδα (το σύμβολο της διαίρεσης), και επίσης χρησιμοποιώ εισαγωγικά.
Επεξήγηση του κώδικα
UseCanonicalName Off
Αποτρέπει τον Apache να δημιουργήσει ένα URL που να στοχεύει στον εαυτό του.
<VirtualHost 192.168.1.150:80>
...
</VirtualHost>
Μέσα σε αυτές τις “εντολές” ορίζουμε τον δυναμικό VirtualHost. Στην πρώτη γραμμή θα πρέπει να αντικαταστήσετε την IP με την στατική IP που έχετε ορίσει στον υπολογιστή σας από το βήμα που περιγράψαμε παραπάνω. Ο αριθμός 80 υποδηλώνει την θύρα στην οποία ακούει αυτός ο VirtualHost και που στην προκειμένη περίπτωση είναι η θύρα http.
VirtualDocumentRoot "C:/Web Projects/%3/%2.1/%2+"
Με αυτή την “εντολή” λέμε στον Apache πως να εντοπίσει αυτόματα ένα Project μέσα στο σύστημα αρχείων και να το επιστρέψει στον χρήστη, βάση του domain που έχει εισάγει ο χρήστης.
Ποιο συγκεκριμένα. Στην δική μου περίπτωση, έχω δημιουργήσει την ακόλουθη δομή φακέλων για τα έργα μου:
C:\
...
Web Projects\
ext\
a\
b\
bananas-cakes.ext\
business-domain.ext\
adminpages\
index.php
...
...
index.php
...
business-easy.ext\
...
z\
...
Και έτσι με την VirtualDocumentRoot λέω στον Apache. Θα βρεις το project που σου ζητάει ο χρήστης στον φάκελο C:\Web Projects\%3 (είναι το TLD μου [ext])\%2.1 (θα πάρει το πρώτο γράμμα του domain)\%2+ (θα πάρεις όλο το domain)\
Έτσι, αν για παράδειγμα ο χρήστης ζητήσει το domain http://www.business-domain.ext/ ο Apache θα κάνει τα ακόλουθα βήματα:
- Θα αποδομήσει το url που του ζήτησαν και θα θέσεις στην “μεταβλητή” %1 το www, στην “μεταβλητή” %2 το business-domain και στην “μεταβλητή” %3 το ext
- Στη συνέχεια θα αρχίσει να δομεί τη διαδρομή που είναι τα αρχεία του έργου αρχίζοντας από τον φάκελο που γνωρίζει και είναι ο C:\Web Projects\
- Επόμενο βήμα είναι να πάρει και να βάλει στην διαδρομή την “μεταβλητή” %3, οπότε η διαδρομή πλέον είναι C:\Web Projects\ext\
- Επόμενο βήμα είναι να πάρει από την μεταβλητή %2 τον πρώτο χαρακτήρα με την χρήση της μεταβλητής %2.1 και έτσι η διαδρομή πλέον γίνετε C:\Web Projects\ext\b\
- Τέλος, θα πρέπει από να τοποθετήσει στο τέλος της διαδρομής την “μεταβλητή” %2 και οτιδήποτε είναι δεξιά από αυτή με την “μεταβλητά” %2+, και έτσι η διαδρομή πλέον γίνετε C:\Web Projects\ext\b\business-domain.ext\
Σημείωση: οι αριθμοί %1, %2, %3 δεν είναι μεταβλητές, αλλά τις αναφέρω ως μεταβλητές για να γίνουν ποιο κατανοητές από αρχάριους χρήστες.
Σημείωση: ο Apache είναι αρκετά ευέλικτος σε ότι αφορά την δομή που θα ορίσετε στο σύστημα αρχείων σας, και ο περιορισμός είναι καθαρά η φαντασία σας. Αν θέλετε, μπορείτε να δείτε εδώ όλες τις δυνατότητες της VirtualDocumentRoot.
Σημείωση: Η μορφή που θα δώσετε στο domain σας, εξαρτάτε από εσάς, και την ορίζετε κατά την δημιουργία του στο αρχείο hosts που αναφέραμε παραπάνω. Το μόνο που πρέπει να προσέξετε είναι να συμβαδίζει η δομή του domain που δείτε, με την δομή του συστήματος αρχείων στον υπολογιστή σας.
DirectoryIndex index.php index.html
Αυτή η εντολή, λέει στον Apache, πως σε κάθε έργο, όταν θα υπάρχει το αρχείο index.php ή το αρχείο index.html θα το φορτώνει αυτόματα όταν δεν υπάρχει κάποιο αρχείο στο URL. Για παράδειγμα όταν κάποιος θα επισκεφτεί το URL http://www.business-domain.ext/ το αρχείο που θα φορτωθεί θα είναι το index.php ή αν δεν υπάρχει αυτό, και υπάρχει το index.html, διαφορετικά θα εμφανίσει τα περιεχόμενα του καταλόγου.
<Directory "C:/Web Projects/*/*/*">
...
</Directory>
Με αυτή την εντολή ορίζουμε τους κανόνες που θα ισχύουν σε όλους τους φακέλους κάτω από τον φάκελο C:/Web Projects/,
Options FollowSymLinks
Με αυτή την εντολή λέμε στον Apache ότι του επιτρέπουμε να ακολουθεί συντομεύσεις αρχείων που υπάρχουν στους καταλόγους των έργων μας.
AllowOverride All
Με αυτή την εντολή λέμε στον Apache πως μπορούμε να μεταβάλουμε τις ρυθμίσεις του μέσα από τους φακέλους των έργων μας με την χρήση του αρχείου .htaccess
Allow from all
Τέλος με αυτή την εντολή του λέμε ότι η προσπέλαση των έργων μας μπορεί να πραγματοποιηθεί από όλους.
Σημείωση: Μην σας τρομάζει αυτή η εντολή. Κανένας από τον έξω κόσμο δεν θα έχει πρόσβαση στον υπολογιστή σας για όσο ακολουθείτε τους κανόνες ασφαλείας που είναι πιθανότατα ήδη ενεργοποιημένοι για εσάς.
Ολοκλήρωση της διαδικασίας
Αφού κάνετε τις ρυθμίσεις σας στο αρχείο httpd-vhosts.conf, αποθηκεύστε το. Στη συνέχεια θα πρέπει να βεβαιωθούμε πως ο Apache γνωρίζει ότι πρέπει να χρησιμοποιήσει αυτό το αρχείο.
Για να βεβαιωθούμε, θα πρέπει να ανοίξουμε το αρχείο ρυθμίσεων του Apache που είναι στον φάκελο conf του Apache Web Server.
Το αρχείο που θέλουμε είναι το httpd.conf.
Σημείωση: Πριν κάνετε οποιαδήποτε αλλαγή σε αυτό το αρχείο, δημιουργήστε ένα αντίγραφο ασφαλείας του αρχείου.
Ανοίξτε το httpd.conf και προσπαθήστε να εντοπίσετε την γραμμή “Include conf/extra/httpd-vhosts.conf”
Αν αυτή η γραμμή έχει μπροστά της μια δίεση, τότε αφαιρέστε την δίεση και αποθηκεύστε το αρχείο.
Σε αυτό το σημείο θα πρέπει να κάνετε επανεκκίνηση τον Apache Web Server.
Σημείωση: Αν για κάποιο λόγο δεν γίνετε επανεκκίνηση του Apache, τότε, πιθανότατα έχετε κάνει κάποιο συντακτικό λάθος στις ρυθμίσεις σας.
Χρήση του συστήματος
Αν έχετε ακολουθήσει σωστά όλα τα παραπάνω βήματα, τώρα θα πρέπει να είστε σε θέση να δημιουργήσετε νέα Projects που έχουν τα δικά τους domains.
Σε αυτή την κατάσταση του server σας, όταν θα θέλετε να προσθέσετε ένα νέο έργο, τα μόνα βήματα που θα πρέπει να κάνετε θα είναι η δημιουργία μιας νέας εγγραφής στο αρχείο hosts με την ίδια IP που έχετε ορίσει ως στατική στον υπολογιστή σας, και το domain του έργου.
Τέλος, ανάλογα με τις ρυθμίσεις που έχετε κάνει στο VirtualDocumentRoot θα πρέπει να δημιουργήσετε και την κατάλληλη υποδομή σε φακέλους, και το έργο σας είναι έτοιμο προς χρήση.
Επίλογος
Είναι προφανές πως η ρύθμιση των VirtualHosts με XAMPP και Apache είναι μια δύσκολη και επίπονη διαδικασία όταν δεν γνωρίζεις ποια είναι τα απαραίτητα βήματα που πρέπει να ακολουθήσεις.
Το καλό όμως, είναι πως τελικά έχεις ένα πλήρες λειτουργικό σύστημα που σε διευκολύνει στην παραγωγή και δεν σου δημιουργεί εμπόδια.