Kako instalirati Nginx s virtualnim hostovima i SSL certifikatom
Nginx (skraćenica od Engine-x) je besplatan, otvoreni izvor, moćan, visokih performansi i skalabilan HTTP i obrnuti proxy server, mail i standardni TCP/UDP proxy server. Jednostavan je za korištenje i konfiguraciju, s jednostavnim konfiguracijskim jezikom. Nginx je sada preferirani softver web servera za napajanje jako opterećenih stranica, zbog svoje skalabilnosti i performansi.
U ovom članku ćemo razgovarati o tome kako koristiti Nginx kao HTTP server, konfigurirati ga za posluživanje web sadržaja i postaviti virtualne hostove zasnovane na nazivima, te kreirati i instalirati SSL za siguran prijenos podataka, uključujući samopotpisani certifikat na Ubuntu i CentOS .
Kako instalirati Nginx web server
Prvo počnite instaliranjem Nginx paketa iz službenih spremišta koristeći vaš upravitelj paketa kao što je prikazano.
------------ On Ubuntu ------------
sudo apt update
sudo apt install nginx
------------ On CentOS ------------
sudo yum update
sudo yum install epel-release
sudo yum install nginx
Nakon što je Nginx paket instaliran, morate pokrenuti uslugu za sada, omogućiti joj da se automatski pokreće prilikom pokretanja i pogledati njen status, koristeći sljedeće naredbe. Imajte na umu da bi na Ubuntu trebao biti pokrenut i omogućen automatski dok je paket unaprijed konfigurisan.
sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx
U ovom trenutku, Nginx web server bi trebao biti u funkciji, status možete provjeriti naredbom netstat.
sudo netstat -tlpn | grep nginx
Ako vaš sistem ima omogućen firewall, morate otvoriti portove 80 i 443 da omogućite HTTP i HTTPS promet odnosno kroz njega, trčanjem.
------------ On CentOS ------------
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --reload
------------ On Ubuntu ------------
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload
Idealna metoda za testiranje instalacije Nginxa i provjeru da li radi i može li posluživati web stranice je otvaranje web pretraživača i pokazivanje na IP servera.
http://Your-IP-Address
OR
http://Your-Domain.com
Radna instalacija bi trebala biti naznačena na sljedećem ekranu.
Kako konfigurirati Nginx web server
Nginx-ove konfiguracijske datoteke nalaze se u direktoriju /etc/nginx
, a globalni konfiguracijski fajl se nalazi na /etc/nginx/nginx.conf
i na CentOS-u i na Ubuntu-u.
Nginx se sastoji od modula koji su kontrolirani raznim opcijama konfiguracije, poznatim kao direktive. Direktiva može biti jednostavna (u imenu obrasca i vrijednostima koje se završavaju sa ;
) ili blokirana (ima dodatne upute priložene pomoću {}
). A blok direktiva koja sadrži druge direktive naziva se kontekst.
Sve direktive su sveobuhvatno objašnjene u Nginx dokumentaciji na web stranici projekta. Možete ga pogledati za više informacija.
Kako poslužiti statički sadržaj koristeći Nginx u samostalnom načinu rada
Na osnovnom nivou, Nginx se može koristiti za posluživanje statičkog sadržaja kao što su HTML i medijski fajlovi, u samostalnom režimu, gde se koristi samo podrazumevani blok servera (analogno Apacheu gde virtuelni hostovi nisu konfigurisani).
Počet ćemo kratkim objašnjenjem konfiguracijske strukture u glavnoj konfiguracijskoj datoteci.
sudo vim /etc/nginx/nginx.conf
Ako pogledate ovu Nginx konfiguracijsku datoteku, konfiguracijska struktura bi trebala izgledati kako slijedi i to se naziva glavni kontekst, koji sadrži mnoge druge jednostavne i blok direktive. Sav web promet se obrađuje u http kontekstu.
user nginx;
worker_processes 1;
.....
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
.....
events {
.....
}
http {
server{
…….
}
.....
}
Slijedi primjer datoteke glavne konfiguracije Nginx-a (/etc/nginx/nginx.conf), gdje gornji blok http sadrži direktivu uključivanja koja govori Nginx-u gdje da pronađe konfiguracijske datoteke web stranice (virtuelne konfiguracije hosta) .
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 768;
# multi_accept on;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
Imajte na umu da ćete na Ubuntu također pronaći dodatnu direktivu uključivanja (include /etc/nginx/sites-enabled/*;), gdje je direktorij /etc /nginx/sites-enabled/ pohranjuje simbolične veze do konfiguracijskih datoteka web lokacija kreiranih u /etc/nginx/sites-available/, kako bi se web lokacije omogućile. A brisanje simbolične veze onemogućava tu određenu lokaciju.
Na osnovu vašeg izvora instalacije, pronaći ćete zadanu konfiguracijsku datoteku web stranice na /etc/nginx/conf.d/default.conf (ako ste instalirali iz službenog NGINX spremišta i EPEL) ili /etc/nginx/sites-enabled/default (ako ste instalirali iz Ubuntu spremišta).
Ovo je naš uzorak zadanog bloka nginx servera koji se nalazi na /etc/nginx/conf.d/default.conf na testnom sistemu.
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /var/www/html/;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
Kratko objašnjenje direktiva u gornjoj konfiguraciji:
- slušati: određuje port na kojem server sluša.
- ime_servera: definira ime servera koje može biti tačna imena, zamjenska imena ili regularni izrazi.
- root: specificira direktorij iz kojeg će Nginx posluživati web stranice i druge dokumente.
- indeks: specificira tip(ove) indeksnih fajlova koji će se servirati.
- lokacija: koristi se za obradu zahtjeva za određene fajlove i foldere.
Iz web pretraživača, kada pokažete na server koristeći hostname localhost ili njegovu IP adresu, on obrađuje zahtjev i poslužuje datoteku /var/www/html/index.html, i odmah pohranjuje događaj u svoj dnevnik pristupa (/var/log/nginx/access.log) sa 200 (OK) odgovorom. U slučaju greške (neuspjeli događaj), bilježi poruku u dnevnik grešaka (/var/log/nginx/error.log).
Da biste saznali više o prijavi u Nginx, možete pogledati Kako konfigurirati prilagođeni pristup ili formate dnevnika grešaka u Nginxu.
Umjesto korištenja zadanih log datoteka, možete definirati prilagođene datoteke dnevnika za različite web stranice, kao što ćemo kasnije pogledati, pod odjeljkom “podešavanje virtuelnih hostova zasnovanih na imenu (serverski blokovi)”.
Kako ograničiti pristup web stranici pomoću Nginxa
Kako biste ograničili pristup vašoj web stranici/aplikaciji ili nekim njenim dijelovima, možete postaviti osnovnu HTTP autentifikaciju. Ovo se u suštini može koristiti za ograničavanje pristupa cijelom HTTP serveru, pojedinačnim blokovima servera ili blokovima lokacije.
Započnite kreiranjem datoteke koja će pohraniti vaše pristupne vjerodajnice (korisničko ime/lozinka) korištenjem uslužnog programa htpasswd.
yum install httpd-tools #RHEL/CentOS
sudo apt install apache2-utils #Debian/Ubuntu
Kao primjer, dodajmo korisničkog administratora na ovu listu (možete dodati što više korisnika), gdje se opcija -c
koristi za određivanje datoteke lozinke, a -B
za šifriranje lozinke. Kada pritisnete [Enter], od vas će se tražiti da unesete korisničku lozinku:
sudo htpasswd -Bc /etc/nginx/conf.d/.htpasswd admin
Zatim, dodijelimo odgovarajuća dopuštenja i vlasništvo fajlu lozinke (zamijenite korisnika i grupu nginx sa www-data na Ubuntu).
sudo chmod 640 /etc/nginx/conf.d/.htpasswd
sudo chown nginx:nginx /etc/nginx/conf.d/.htpasswd
Kao što smo ranije spomenuli, možete ograničiti pristup svom web serveru, jednoj web stranici (koristeći njen blok servera) ili određenom direktoriju ili datoteci. Da bi se to postiglo, mogu se koristiti dvije korisne direktive:
- auth_basic – uključuje provjeru valjanosti korisničkog imena i lozinke koristeći “HTTP Basic Authentication” protokol.
- auth_basic_user_file – specificira fajl akreditiva.
Kao primjer, pokazat ćemo kako lozinkom zaštititi direktorij /var/www/html/protected.
server {
listen 80 default_server;
server_name localhost;
root /var/www/html/;
index index.html;
location / {
try_files $uri $uri/ =404;
}
location /protected/ {
auth_basic "Restricted Access!";
auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
}
}
Sada sačuvajte promjene i ponovo pokrenite Nginx servis.
sudo systemctl restart nginx
Sljedeći put kada svoj preglednik usmjerite na gornji direktorij (http://localhost/protected) od vas će se tražiti da unesete svoje akreditive za prijavu (korisničko ime admin i odabranu lozinku ).
Uspješna prijava vam omogućava pristup sadržaju direktorija, inače ćete dobiti grešku “401 Autorizacija je potrebna “.
Kako podesiti virtuelne hostove zasnovane na imenu (serverske blokove) u Nginxu
Kontekst servera omogućava da se više domena/lokacija pohranjuje i služi sa iste fizičke mašine ili virtuelnog privatnog servera (VPS). Višestruki serverski blokovi (koji predstavljaju virtuelne hostove) mogu se deklarisati unutar http konteksta za svaku lokaciju/domen. Nginx odlučuje koji server obrađuje zahtjev na osnovu zaglavlja zahtjeva koje primi.
Ovaj koncept ćemo demonstrirati koristeći sljedeće lažne domene, od kojih se svaka nalazi u navedenom direktoriju:
- wearelinux-console.net – /var/www/html/wearelinux-console.net/
- welovelinux.com – /var/www/html/welovelinux.com/
Zatim dodijelite odgovarajuće dozvole direktoriju za svaku lokaciju.
sudo chmod -R 755 /var/www/html/wearelinux-console.net/public_html
sudo chmod -R 755 /var/www/html/welovelinux.com/public_html
Sada kreirajte uzorak datoteke index.html unutar svakog public_html direktorija.
<html>
<head>
<title>www.wearelinux-console.net</title>
</head>
<body>
<h1>This is the index page of www.wearelinux-console.net</h1>
</body>
</html>
Zatim kreirajte konfiguracijske datoteke bloka servera za svaku lokaciju unutar /etc/httpd/conf.d direktorija.
sudo vi /etc/nginx/conf.d/wearelinux-console.net.conf
sudo vi /etc/nginx/conf.d/welovelinux.com.conf
Dodajte sljedeću deklaraciju bloka servera u datoteku wearelinux-console.net.conf.
server {
listen 80;
server_name wearelinux-console.net;
root /var/www/html/wearelinux-console.net/public_html ;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
Zatim dodajte sljedeću deklaraciju bloka servera u datoteku welovelinux.com.conf.
server {
listen 80;
server_name welovelinux.com;
root /var/www/html/welovelinux.com/public_html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
Da biste primijenili nedavne promjene, ponovo pokrenite Nginx web server.
sudo systemctl restart nginx
i usmjeravanje vašeg web servera na gore navedene adrese bi trebalo da učini da vidite glavne stranice lažnih domena.
http://wearelinux-console.net
http://welovelinux.com
Važno: Ako imate omogućen SELinux, njegova zadana konfiguracija ne dozvoljava Nginxu pristup datotekama izvan dobro poznatih ovlaštenih lokacija (kao što je npr. /etc/nginx za konfiguracije, /var/log/nginx za dnevnike, /var/www/html za web datoteke itd.) .
Ovo možete riješiti tako što ćete onemogućiti SELinux ili postaviti ispravan sigurnosni kontekst. Za više informacija pogledajte ovaj vodič: korištenje Nginxa i Nginx Plus sa SELinuxom na web stranici Nginx Plus.
Kako instalirati i konfigurirati SSL sa Nginxom
SSL certifikati pomažu da se omogući siguran http (HTTPS) na vašoj web lokaciji, što je neophodno za uspostavljanje pouzdane/sigurne veze između krajnjih korisnika i vašeg servera šifriranjem informacija koje se prenosi na, sa ili unutar vaše stranice.
Pojasnit ćemo kako kreirati i instalirati samopotpisani certifikat i generirati zahtjev za potpisivanje certifikata (CSR) za pribavljanje SSL certifikata od tijela za izdavanje certifikata (CA), koristiti sa Nginxom.
Samopotpisani sertifikati su slobodni za kreiranje i praktično su dobri za testiranje i za interne LAN usluge. Za servere okrenute prema javnosti, toplo se preporučuje korištenje certifikata koji izdaje CA (na primjer Let’s Encrypt) kako bi se podržala njegova autentičnost.
Da biste kreirali samopotpisani certifikat, prvo kreirajte direktorij u kojem će biti pohranjeni vaši certifikati.
sudo mkdir /etc/nginx/ssl-certs/
Zatim generirajte svoj samopotpisani certifikat i ključ pomoću alata openssl komandne linije.
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl-certs/nginx.key -out /etc/nginx/ssl-certs/nginx.crt
Hajde da ukratko opišemo opcije koje se koriste u gornjoj naredbi:
- req -X509 – pokazuje da kreiramo x509 certifikat.
- -čvorovi (NO DES) – znači “ne šifrirati ključ”.
- -dana 365 – određuje broj dana za koje će certifikat važiti.
- -newkey rsa:2048 – specificira da ključ generiran korištenjem RSA algoritma treba biti 2048-bitni.
- -keyout /etc/nginx/ssl-certs/nginx.key – specificira punu putanju RSA ključa.
- -out /etc/nginx/ssl-certs/nginx.crt – specificira punu putanju certifikata.
Zatim otvorite konfiguracijsku datoteku virtuelnog hosta i dodajte sljedeće redove u deklaraciju bloka servera koja sluša na portu 443. Mi ćemo testirati sa virtuelnim host fajlom /etc/nginx/conf.d/wearelinux-console.net.conf.
sudo vi /etc/nginx/conf.d/wearelinux-console.net.conf
Zatim dodajte ssl direktivu u nginx konfiguracijsku datoteku, trebala bi izgledati slično dolje.
server {
listen 80;
listen [::]:80;
listen 443 ssl;
listen [::]:443 ssl;
ssl on;
ssl_certificate /etc/nginx/ssl-certs/nginx.crt;
ssl_trusted_certificate /etc/nginx/ssl-certs/nginx.crt;
ssl_certificate_key /etc/nginx/ssl-certs/nginx.key;
server_name wearelinux-console.net;
root /var/www/html/wearelinux-console.net/public_html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
Sada ponovo pokrenite Nginx i usmjerite svoj pretraživač na sljedeću adresu.
https://www.wearelinux-console.net
Ako želite kupiti SSL certifikat od CA, morate generirati zahtjev za potpisivanje certifikata (CSR) kao što je prikazano.
sudo openssl req -newkey rsa:2048 -nodes -keyout /etc/nginx/ssl-certs/example.com.key -out /etc/nginx/ssl-certs/example.com.csr
Također možete kreirati CSR iz postojećeg privatnog ključa.
sudo openssl req -key /etc/nginx/ssl-certs/example.com.key -new -out /etc/nginx/ssl-certs/example.com.csr
Zatim morate poslati CSR koji je generiran CA da zatražite izdavanje CA-potpisanog SSL certifikata. Kada primite svoj certifikat od CA, možete ga konfigurirati kao što je prikazano iznad.
Pročitajte također: Ultimativni vodič za sigurnu, ojačanu i poboljšanje performansi Nginx web servera
Sažetak
U ovom članku smo objasnili kako instalirati i konfigurirati Nginx; pokrio je kako postaviti virtuelni hosting baziran na imenu sa SSL-om za siguran prijenos podataka između web servera i klijenta.
Ako ste iskusili bilo kakve zastoje tokom procesa instalacije/konfiguracije nginxa ili imate bilo kakva pitanja ili komentare, koristite obrazac za povratne informacije ispod da nas kontaktirate.