Kako podesiti virtuelne hostove zasnovane na imenu i IP-u (blokove servera) sa NGINX-om


U relativno kratkom vremenskom periodu od kada je razvijen i stavljen na raspolaganje (nešto više od 10 godina), Nginx je doživio neprekidan i stalan rast među web serverima zbog svojih visokih performansi i niske upotrebe memorije.

Pošto je Nginx besplatan softver otvorenog koda, usvojile su ga hiljade administratora web servera širom svijeta, ne samo na Linux i *nix serverima, već iu Microsoft Windowsu.

Ne propustite: Virtualni hosting baziran na Apache nazivu i IP

Za one od nas koji su najčešće navikli na Apache, Nginx može imati prilično strmu krivulju učenja (barem je to bio moj slučaj), ali se svakako isplati kada postavite par web lokacija i počnite vidjeti statistiku prometa i korištenja resursa.

U ovom članku ćemo objasniti kako koristiti Nginx za postavljanje zasnovanog na imenu i ip baziranog virtualnog hostinga u CentOS/RHEL-u 7 serveri i Debian 8 i derivati, počevši od Ubuntu 15.04 i njegovih spin-off-ova.

Naš scenarij testiranja za ovaj članak je sljedeći:

  1. Operativni sustav: Debian 8 Jessie server [IP 192.168.0.25]
  2. Gateway: Ruter [IP 192.168.0.1]
  3. Web server: Nginx 1.6.2-5
  4. Lažni domeni: www.tecmintlovesnginx.com i www.nginxmeanspower.com.

Instalacija Nginx web servera

Ako to već niste učinili, instalirajte Nginx prije nego što nastavite dalje. Ako vam je potrebna pomoć da započnete, brza pretraga nginxa na ovoj stranici će vratiti nekoliko članaka na ovu temu. Kliknite na ikonu povećala na vrhu ove stranice i potražite ključnu riječ nginx. Ako ne znate kako da pretražujete članke na ovoj stranici, ne brinite, ovdje smo dodali veze na nginx članke, samo prođite i instalirajte ih u skladu sa vašim odgovarajućim Linux distribucijama.

  1. Instalirajte i kompajlirajte Nginx iz izvora u RHEL/CentOS 7
  2. Instalirajte Nginx web server na Debian 8
  3. Instalirajte Nginx sa MariaDB i PHP/PHP-FPM na Fedora 23
  4. Instalirajte Nginx Web Server na Ubuntu 15.10 Server/Desktop
  5. Zaštitite lozinkom Nginx Website Directories

Zatim se pripremite da nastavite s ostatkom ovog vodiča.

Kreiranje virtuelnih hostova zasnovanih na imenu u Nginxu

Kao što sam siguran da već znate, virtualni host je web stranica koju Nginx opslužuje u jednom oblaku VPS ili fizičkom serveru. Međutim, u Nginx dokumentima ćete umjesto toga pronaći izraz "blokovi servera", ali oni su u osnovi ista stvar koja se naziva različitim imenima.

Prvi korak za postavljanje virtuelnih hostova je kreiranje jednog ili više blokova servera (u našem slučaju ćemo kreirati dva, po jedan za svaku lažnu domenu) u glavnoj konfiguracijskoj datoteci (/etc/nginx/nginx.conf) ili unutar /etc/nginx/sites-available.

Iako se nazivi konfiguracijskih datoteka u ovom direktoriju (sites-available) mogu postaviti na što god želite, dobra je ideja koristiti nazive domena, a osim toga smo odlučili dodati .conf ekstenzija koja označava da su ovo konfiguracijski fajlovi.

Ovi blokovi servera mogu biti relativno složeni, ali se u svom osnovnom obliku sastoje od sljedećeg sadržaja:

U /etc/nginx/sites-available/tecmintlovesnginx.com.conf:

server {  
    listen       80;  
    server_name  tecmintlovesnginx.com www.tecmintlovesnginx.com;
    access_log  /var/www/logs/tecmintlovesnginx.access.log;  
    error_log  /var/www/logs/tecmintlovesnginx.error.log error; 
        root   /var/www/tecmintlovesnginx.com/public_html;  
        index  index.html index.htm;  
}

U /etc/nginx/sites-available/nginxmeanspower.com.conf:

server {  
    listen       80;  
    server_name  nginxmeanspower.com www.nginxmeanspower.com;
    access_log  /var/www/logs/nginxmeanspower.access.log;  
    error_log  /var/www/logs/nginxmeanspower.error.log error;
    root   /var/www/nginxmeanspower.com/public_html;  
    index  index.html index.htm;  
}

Možete koristiti gore navedene blokove za početak postavljanja vaših virtualnih hostova ili možete kreirati datoteke s osnovnim kosturom iz /etc/nginx/sites-available/default (Debian ) ili /etc/nginx/nginx.conf.default (CentOS).

Nakon kopiranja, promijenite njihove dozvole i vlasništvo:

chmod 660  /etc/nginx/sites-available/tecmintlovesnginx.com.conf
chmod 660  /etc/nginx/sites-available/nginxmeanspower.com.conf

Debian i derivati

chgrp www-data  /etc/nginx/sites-available/tecmintlovesnginx.com.conf
chgrp www-data  /etc/nginx/sites-available/nginxmeanspower.com.conf

CentOS i RHEL

chgrp nginx  /etc/nginx/sites-available/tecmintlovesnginx.com.conf
chgrp nginx  /etc/nginx/sites-available/nginxmeanspower.com.conf

Kada završite, trebate izbrisati datoteku uzorka ili je preimenovati u nešto drugo kako biste izbjegli zabunu ili sukobe.

Imajte na umu da ćete također morati kreirati direktorij za logove (/var/www/logs) i dati Nginx korisniku (nginx ili www-data , ovisno o tome koristite li CentOS ili Debian) dozvole za čitanje i pisanje preko njega:

mkdir /var/www/logs
chmod -R 660 /var/www/logs
chgrp <nginx user> /var/www/logs

Virtuelni hostovi sada moraju biti omogućeni kreiranjem simbolične veze do ove datoteke u direktoriju s omogućenim web lokacijama:

ln -s /etc/nginx/sites-available/tecmintlovesnginx.com.conf /etc/nginx/sites-enabled/tecmintlovesnginx.com.conf
ln -s /etc/nginx/sites-available/nginxmeanspower.com.conf /etc/nginx/sites-enabled/nginxmeanspower.com.conf

Zatim kreirajte uzorak html datoteke pod nazivom index.html unutar /var/www//public_html za svaki od virtualnih hostova (zamijenite po potrebi). Izmijenite sljedeći kod po potrebi:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Tecmint loves Nginx</title>
  </head>
  <body>
  <h1>Tecmint loves Nginx!</h1>
  </body>
</html>

Na kraju, testirajte Nginx konfiguraciju i pokrenite web server. Ako postoje greške u konfiguraciji, od vas će se tražiti da ih ispravite:

nginx -t && systemctl start nginx

i dodajte sljedeće unose u vaš /etc/hosts fajl na vašem lokalnom računalu kao osnovnu strategiju rješavanja imena:

192.168.0.25 tecmintlovesnginx.com
192.168.0.25 nginxmeanspower.com

Zatim pokrenite web pretraživač i idite na gore navedene URL adrese:

Da dodate više virtuelnih hostova u Nginx, samo ponovite gore navedene korake onoliko puta koliko je potrebno.

Virtuelni hostovi zasnovani na IP-u u Nginxu

Za razliku od virtuelnih hostova zasnovanih na imenu gdje su svi hostovi dostupni preko iste IP adrese, bazirani na IP virtuelni hostovi zahtijevaju drugačiji IP:port kombinacija svaki.

Ovo omogućava web serveru da vrati različite stranice u zavisnosti od IP adrese i porta na koji je primljen zahtjev. Budući da nam virtuelni hostovi zasnovani na imenima daju prednost dijeljenja IP adrese i porta, oni su standard za web servere opće namjene i trebali bi biti postavka izbora osim ako vaša instalirana verzija Nginxa ne podržava Indikaciju imena servera (SNI), bilo zato što je ZAISTA zastarjela verzija, ili zato što je kompajlirana bez –with-http_ssl_module opcije kompajliranja.

ako,

nginx -V

ne vraća dolje označene opcije:

morat ćete ažurirati svoju verziju Nginxa ili je ponovo kompajlirati, ovisno o originalnoj metodi instalacije. Za kompajliranje Nginxa, slijedite članak u nastavku:

  1. Instalirajte i kompajlirajte Nginx iz izvora u RHEL/CentOS 7

Pod pretpostavkom da smo spremni, moramo napomenuti da je još jedan preduvjet za bazirane na IP virtuelne hostove dostupnost zasebnih IP-ova – bilo dodjeljujući ih različitim mrežnim sučeljima, ili korištenjem virtuelnih IP adrese (također poznate kao IP aliasing).

Za izvođenje IP aliasa u Debianu (pod pretpostavkom da koristite eth0), uredite /etc/network/interfaces na sljedeći način:

Debian i derivati

auto eth0:1
iface eth0:1 inet static
        address 192.168.0.25
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255
        gateway 192.168.0.1
auto eth0:2
iface eth0:2 inet static
        address 192.168.0.26
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255
        gateway 192.168.0.1

U gornjem primjeru kreiramo dvije virtualne NIC-e od eth0: eth0:1 (192.168.0.25) i eth0:2 (192.168.0.26).

CentOS i RHEL

U CentOS-u preimenujte /etc/sysconfig/network-scripts/ifcfg-enp0s3 u ifcfg-enp0s3:1 i napravite kopiju kao ifcfg-enp0s3:2, a zatim samo promijenite sljedeće redove, redom:

DEVICE="enp0s3:1"
IPADDR=192.168.0.25

i

DEVICE="enp0s3:2"
IPADDR=192.168.0.26

Kada završite, ponovo pokrenite mrežnu uslugu:

systemctl restart networking

Zatim napravite sljedeće promjene u blokovima servera koji su prethodno definirani u ovom članku:

U /etc/nginx/sites-available/tecmintlovesnginx.com.conf:

listen 192.168.0.25:80

U /etc/nginx/sites-available/nginxmeanspower.com.conf:

listen 192.168.0.26:80

Konačno, ponovo pokrenite Nginx kako bi promjene stupile na snagu.

systemctl restart nginx

i ne zaboravite ažurirati svoj lokalni /etc/hosts u skladu s tim:

192.168.0.25 tecmintlovesnginx.com
192.168.0.26 nginxmeanspower.com

Stoga će svaki zahtjev upućen 192.168.0.25 i 192.168.0.26 na portu 80 vratiti tecmintlovesnginx.com i nginxmeanspower.com, odnosno:

Kao što možete vidjeti na slikama iznad, sada imate dva virtuelna hosta zasnovana na IP-u koji koriste jedinu NIC na vašem serveru sa dva različita IP aliasa.

Sažetak

U ovom vodiču smo objasnili kako postaviti i zasnovane na imenu i bazirane na IP virtuelne hostove u Nginxu. Iako ćete vjerovatno htjeti koristiti prvu opciju, važno je znati da je druga opcija još uvijek tu ako vam zatreba – samo se pobrinite da ovu odluku donesete nakon što razmotrite činjenice navedene u ovom vodiču.

Pored toga, možda ćete želeti da obeležite Nginx dokumente jer je dostojno i dobro da ih često koristite dok kreirate blokove servera (eto ga – sada govorimo na Nginx jeziku) i konfigurišete ih. Nećete vjerovati svim opcijama koje su dostupne za konfiguriranje i podešavanje ovog izvanrednog web servera.

Kao i uvijek, ne ustručavajte se da nam se javite putem obrasca ispod ako imate bilo kakvih pitanja ili komentara o ovom članku. Radujemo se što ćemo čuti od vas, a vaše povratne informacije o ovom vodiču su dobrodošle.