Πώς να δημιουργήσετε Virtual Hosts(Server Blocks) στον Nginx σε Debian 8

26/09/2017 / Nginx
virtual-host-setup-nginx

Το Virtual Hosting είναι ένας τρόπος hosting πολλών διαφορετικών domain names σε έναν φυσικό server . Επιτρέπει το μοίρασμα των πόρων του φυσικού server πχ cpu , ram ,  στα διάφορα domain names .

Στον Νginx χρησιμοποιείται ο όρος Server Blocks αντί για Virtual Hosts . 'Eχουν ακριβώς την ίδια σημασία , απλα για να είμαστε πιο ακριβείς , απο δώ και στο εξής σε αυτό το άρθρο θα χρησιμοποιούμε τον όρο Server Block . 

Παρακάτω θα φτιάξουμε ένα  setup για τα domain names , test1.com , test2.com .

Αν ο nginx δεν είναι εγκατεστημένος στο σύστημα σας χρησιμοποιήστε την apt -get για να το εγκαταστήσετε :

sudo apt-get update
sudo apt-get install nginx

1.Δημιουργία των directories

Αρχικά το directory  /usr/share/nginx/html  είναι το default του web server  . Παρόλ’ αυτά είναι ευκολότερο να δουλεύουμε στο directory /var/www/html οπότε θα χρησιμοποιήσουμε αυτό .Εμέις θέλουμε να δημιουργήσουμε ενα directory για το κάθε domain name , και για κάθε domain name , έναν φάκελο που θα έχει τα αρχεία του . : 

sudo mkdir -p /var/www/test1.com/public_html
sudo mkdir -p /var/www/test2.com/public_html

Τώρα δημιουργήσαμε αυτούς τους φακέλους , αλλά μόνο ο χρήστης root έχει δικαιώματα . Για να δώσουμε δικαιώματα στον απλό χρήστη χρησιμοποιούμε τις εντολές :

sudo chown -R $USER:$USER /var/www/test1.com/public_html
sudo chown -R $USER:$USER /var/www/test2.com/public_html

 Όπου user το όνομα του χρήστη στον οποίο θέλουμε να δώσουμε δικαιώματα .

2.Δημιουργία demo σελίδας σε κάθε Server Block

Τώρα αφου τα directories είναι έτοιμα , θα βάλουμε στον φάκελο του κάθε virtual host μια πολύ απλή σελίδα index.html . Αυτο θα βοηθήσει αργότερα όταν θα χρειαστούμε να τεστάρουμε τους virtual hosts .

sudo vi /var/www/test1.com/public_html/index.html 

Το index.html θα είναι ένα πολύ απλό html page που απλά θα δείχνει ότι είμαστε στο σωστό directory .

/var/www/example.com/public_html/index.html


 
   Welcome to test1.com!
 
 
   

Success! The test1.com virtual host is working!


 

Επαναλαμβάνουμε ακριβώς την ίδια διαδικασία και για το domain name test2

sudo vi /var/www/test2.com/public_html/index.html

/var/www/example.com/public_html/index.html


 
   Welcome to test2.com!
 
 
   

Success! The test2.com virtual host is working!


 

 

3.Δημιουργία νέων Server Block files

Τα Server Block Files προσδιορίζουν τις ρυθμίσεις λειτουργίας των server block μας , και ρυθμίζουν πως θα απαντά ο server  στα αιτήματα που του γίνονται .

Ο Nginx έχει ένα default server block file που λέγεται default και μπορούμε να το χρησιμοποιήσουμε για να φτιάξουμε τα δικα μας  αρχεία .

sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/test1.com

sudo vi/etc/nginx/sites-available/test1.com

Με κάποιες μικρές διαφορές το αρχείο πρέπει να έχει την παρακάτω μορφή

server {
   listen 80 default_server;
   listen [::]:80 default_server ipv6only=on;

   root /usr/share/nginx/html;
   index index.html index.htm;

   server_name localhost;

   location / {
       try_files $uri $uri/ =404;
   }
}

Η πρώτη αλλαγή που πρέπει να κάνουμε είναι στο πεδίο root , δηλαδή να αλλάξουμε το directory  :

root /var/www/example.com/html;

‘Επειτα αλλάζουμε το server_name και βάζουμε το δικό μας domain :

server_name test1.com www.test1.com;

Αποθηκεύουμε το αρχείο . Βέβαια φτιάξαμε το Server Block για το domain name test1. Για το domain name test2 θα επαναλάβουμε ακριβώς την ίδια διαδικασία , με μια αλλαγή!

Στον Nginx μόνο ένα file μπορεί να είναι ορισμένο ως default_server . Για αυτο , στο δεύτερο domain την γραμμή :

listen [::]:80 default_server ipv6only=on;

Θα την αλλάξουμε ώστε να είναι κάπως έτσι :

listen [::]:80;

Αν θέλουμε , ο default server να είναι ο test2 μπορούμε απλά να τα κάνουμε ανάποδα , χωρίς να έχει ιδιαίτερη σημασία . Το μόνο που είναι υποχρεωτικό , είναι ότι μόνο ένα domain name πρέπει να είναι ορισμένο ως default .

4.Ενεργοποίηση των Server Block files 

Ως τώρα έχουμε δημιουργήσει τα server block files σύμφωνα με τις ανάγκες μας , αλλά ο nginx δεν πρόκειται να τα χρησιμοποιήσει , αν δεν τα ενεργοποιήσουμε πρώτα .

Για να τα ενεργοποιήσουμε πρέπει να φτιάξουμε links στο directory sites-enabled , το οποίο ο Nginx διαβάζει , κάθε φορά που φορτώνει .

Για να φτιάξουμε αυτα τα link γράφουμε :

sudo ln -s /etc/nginx/sites-available/test1.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/test2.com /etc/nginx/sites-enabled/

Για να δουλέψουν τα link πρέπει να κάνουμε πρώτα disable το default server block file .

sudo rm /etc/nginx/sites-enabled/default

Επίσης πρέπει ακόμα να κάνουμε μια μικρή αλλαγή .

Ανοίγουμε το αρχείο :

sudo vi /etc/nginx/nginx.conf

Πρέπει να βρούμε την γραμμή

server_names_hash_bucket_size 64;

Και να βγάλουμε το σύμβολο $ στην αρχή της γραμμής .

Τέλος , κάνουμε reload τον Nginx και είμαστε έτοιμοι!

sudo service nginx restart

5.Test των αποτελεσμάτων

 Για να είμαστε σίγουροι   ότι δεν κάναμε κάποιο λάθος , θα ανοίξουμε εναν browser , και θα δοκιμάσουμε να μπούμε στα 2 site που δημιουργήσαμε πριν , τα :

http://test1.com

http://test2.com

Αν δούμε το μήνυμα Sucess!The test.com virtual host is working και στις 2 σελίδες όλα έγιναν σωστά και είμαστε έτοιμοι!

ΣΥΝΔΕΣΗ

Αίτηση επικοινωνίας

ΠΑΝΩ