Jak nainstalovat Nginx s virtuálními hostiteli a certifikátem SSL
Nginx (zkratka pro Engine-x) je bezplatný, open source, výkonný, vysoce výkonný a škálovatelný HTTP a reverzní proxy server, poštovní a standardní TCP/UDP proxy server. Snadno se používá a konfiguruje pomocí jednoduchého konfiguračního jazyka. Nginx je nyní preferovaným webovým serverovým softwarem pro napájení silně zatížených stránek díky své škálovatelnosti a výkonu.
V tomto článku se budeme zabývat tím, jak používat Nginx jako HTTP server, konfigurovat jej pro poskytování webového obsahu a nastavovat virtuální hostitele založené na názvech a vytvářet a instalovat SSL pro zabezpečené datové přenosy, včetně certifikátu s vlastním podpisem na Ubuntu a CentOS. .
Jak nainstalovat webový server Nginx
Nejprve začněte instalací balíčku Nginx z oficiálních úložišť pomocí správce balíčků, jak je znázorněno.
------------ On Ubuntu ------------
sudo apt update
sudo apt install nginx
------------ On CentOS ------------
sudo yum update
sudo yum install epel-release
sudo yum install nginx
Po instalaci balíčku Nginx musíte službu prozatím spustit, povolit její automatické spuštění při spouštění a zobrazit její stav pomocí následujících příkazů. Všimněte si, že na Ubuntu by mělo být spuštěno a povoleno automaticky, dokud je balíček předem nakonfigurován.
sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx
V tuto chvíli by měl být webový server Nginx v provozu, stav můžete ověřit pomocí příkazu netstat.
sudo netstat -tlpn | grep nginx
Pokud má váš systém povolenou bránu firewall, musíte otevřít port 80 a 443, abyste povolili provoz HTTP a HTTPS respektive jeho prostřednictvím běháním.
------------ 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
Ideální metodou pro testování instalace Nginx a kontroly, zda běží a dokáže obsluhovat webové stránky, je otevření webového prohlížeče a ukázání na IP serveru.
http://Your-IP-Address
OR
http://Your-Domain.com
Funkční instalace by měla být označena následující obrazovkou.
Jak nakonfigurovat webový server Nginx
Konfigurační soubory Nginx jsou umístěny v adresáři /etc/nginx
a globální konfigurační soubor je umístěn na /etc/nginx/nginx.conf
na CentOS i Ubuntu.
Nginx se skládá z modulů, které jsou řízeny různými možnostmi konfigurace, známými jako směrnice. směrnice může být buď jednoduchá (ve tvaru a hodnotách zakončených ;
) nebo bloková (s dalšími instrukcemi uzavřenými pomocí {}
). A bloková direktiva, která obsahuje další direktivy, se nazývá kontext.
Všechny směrnice jsou podrobně vysvětleny v dokumentaci Nginx na webu projektu. Další informace naleznete na této stránce.
Jak obsluhovat statický obsah pomocí Nginx v samostatném režimu
Na základní úrovni lze Nginx použít k poskytování statického obsahu, jako jsou HTML a mediální soubory, v samostatném režimu, kde se používá pouze výchozí blok serveru (analogicky k Apache, kde nebyli nakonfigurováni žádní virtuální hostitelé).
Začneme stručným vysvětlením struktury konfigurace v hlavním konfiguračním souboru.
sudo vim /etc/nginx/nginx.conf
Pokud se podíváte do tohoto konfiguračního souboru Nginx, konfigurační struktura by měla vypadat následovně a to je označováno jako hlavní kontext, který obsahuje mnoho dalších jednoduchých a blokových direktiv. Veškerý webový provoz je zpracován v kontextu http.
user nginx;
worker_processes 1;
.....
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
.....
events {
.....
}
http {
server{
…….
}
.....
}
Následuje ukázkový soubor hlavní konfigurace Nginx (/etc/nginx/nginx.conf), kde výše uvedený blok http obsahuje direktivu include, která Nginxu říká, kde má najít konfigurační soubory webových stránek (virtuální konfigurace hostitele) .
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;
}
Všimněte si, že na Ubuntu také najdete další direktivu include (include /etc/nginx/sites-enabled/*;), kde je adresář /etc /nginx/sites-enabled/ ukládá symbolické odkazy na konfigurační soubory webových stránek vytvořené v /etc/nginx/sites-available/, aby byly stránky povoleny. A odstranění symbolického odkazu deaktivuje tento konkrétní web.
Na základě vašeho instalačního zdroje najdete výchozí konfigurační soubor webu na adrese /etc/nginx/conf.d/default.conf (pokud jste nainstalovali z oficiálního úložiště NGINX a EPEL) nebo /etc/nginx/sites-enabled/default (pokud jste nainstalovali z repozitářů Ubuntu).
Toto je náš ukázkový výchozí blok serveru nginx umístěný na /etc/nginx/conf.d/default.conf v testovacím systému.
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /var/www/html/;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
Stručné vysvětlení direktiv ve výše uvedené konfiguraci:
- listen: určuje port, na kterém server naslouchá.
- název_serveru: definuje název serveru, což mohou být přesné názvy, názvy zástupných znaků nebo regulární výrazy.
- root: určuje adresář, ze kterého bude Nginx obsluhovat webové stránky a další dokumenty.
- index: určuje typ(y) indexových souborů, které mají být poskytovány.
- umístění: používá se ke zpracování požadavků na konkrétní soubory a složky.
Když z webového prohlížeče ukážete na server pomocí hostname localhost nebo jeho IP adresy, zpracuje požadavek a zobrazí soubor /var/www/html/index.html a okamžitě uloží událost do svého protokolu přístupu (/var/log/nginx/access.log) s odpovědí 200 (OK). V případě chyby (neúspěšná událost) zaznamená zprávu do protokolu chyb (/var/log/nginx/error.log).
Chcete-li se dozvědět více o přihlašování do Nginx, můžete se podívat na Jak nakonfigurovat vlastní přístup nebo formáty protokolu chyb v Nginx.
Namísto použití výchozích souborů protokolu můžete definovat vlastní soubory protokolu pro různé webové stránky, jak se podíváme později v části „nastavení virtuálních hostitelů založených na názvech (bloky serverů) “.
Jak omezit přístup k webové stránce pomocí Nginx
Chcete-li omezit přístup k vašemu webu/aplikaci nebo některým jeho částem, můžete nastavit základní HTTP autentizaci. To lze v podstatě použít k omezení přístupu k celému HTTP serveru, jednotlivým blokům serveru nebo blokům umístění.
Začněte vytvořením souboru, který bude ukládat vaše přístupové údaje (uživatelské jméno/heslo) pomocí nástroje htpasswd.
yum install httpd-tools #RHEL/CentOS
sudo apt install apache2-utils #Debian/Ubuntu
Jako příklad přidáme do tohoto seznamu uživatele admin (můžete přidat co nejvíce uživatelů), kde volba -c
slouží k určení souboru s hesly a -B
k zašifrování hesla. Jakmile stisknete [Enter], budete požádáni o zadání uživatelského hesla:
sudo htpasswd -Bc /etc/nginx/conf.d/.htpasswd admin
Poté přiřaďte správná oprávnění a vlastnictví souboru s hesly (na Ubuntu nahraďte nginx uživatele a skupiny výrazem www-data).
sudo chmod 640 /etc/nginx/conf.d/.htpasswd
sudo chown nginx:nginx /etc/nginx/conf.d/.htpasswd
Jak jsme již zmínili dříve, můžete omezit přístup k vašemu webovému serveru, jedné webové stránce (pomocí jejího bloku serveru) nebo konkrétnímu adresáři či souboru. K tomu lze použít dvě užitečné směrnice:
- auth_basic – zapne ověření uživatelského jména a hesla pomocí protokolu „HTTP Basic Authentication “.
- auth_basic_user_file – určuje soubor pověření.
Jako příklad si ukážeme, jak chránit heslem adresář /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;
}
}
Nyní uložte změny a restartujte službu Nginx.
sudo systemctl restart nginx
Při příštím přesměrování prohlížeče na výše uvedený adresář (http://localhost/protected) budete požádáni o zadání přihlašovacích údajů (uživatelské jméno admin a zvolené heslo ).
Úspěšné přihlášení vám umožní přístup k obsahu adresáře, jinak se zobrazí chyba „401 Vyžaduje autorizaci“.
Jak nastavit virtuální hostitele založené na názvech (bloky serveru) v Nginx
Kontext serveru umožňuje uložení více domén/webů na stejném fyzickém počítači nebo virtuálním privátním serveru (VPS) a obsluhu ze stejného. V kontextu http pro každý web/doménu lze deklarovat více bloků serverů (představujících virtuální hostitele). Nginx rozhodne, který server zpracuje požadavek na základě hlavičky požadavku, kterou obdrží.
Tento koncept předvedeme pomocí následujících fiktivních domén, z nichž každá je umístěna v určeném adresáři:
- wearelinux-console.net – /var/www/html/wearelinux-console.net/
- welovelinux.com – /var/www/html/welovelinux.com/
Dále přiřaďte příslušná oprávnění k adresáři pro každý web.
sudo chmod -R 755 /var/www/html/wearelinux-console.net/public_html
sudo chmod -R 755 /var/www/html/welovelinux.com/public_html
Nyní vytvořte ukázkový soubor index.html v každém adresáři public_html.
<html>
<head>
<title>www.wearelinux-console.net</title>
</head>
<body>
<h1>This is the index page of www.wearelinux-console.net</h1>
</body>
</html>
Dále vytvořte konfigurační soubory bloků serveru pro každý web v adresáři /etc/httpd/conf.d.
sudo vi /etc/nginx/conf.d/wearelinux-console.net.conf
sudo vi /etc/nginx/conf.d/welovelinux.com.conf
Přidejte následující deklaraci blokování serveru do souboru 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;
}
}
Dále přidejte následující deklaraci blokování serveru do souboru 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;
}
}
Chcete-li použít poslední změny, restartujte webový server Nginx.
sudo systemctl restart nginx
a nasměrováním vašeho webového serveru na výše uvedené adresy byste měli vidět hlavní stránky fiktivních domén.
http://wearelinux-console.net
http://welovelinux.com
Důležité: Pokud máte povolený SELinux, jeho výchozí konfigurace neumožňuje Nginxu přistupovat k souborům mimo dobře známá autorizovaná umístění (např. /etc/nginx pro konfigurace, /var/log/nginx pro protokoly, /var/www/html pro webové soubory atd.) .
Můžete to vyřešit buď vypnutím SELinuxu, nebo nastavením správného kontextu zabezpečení. Další informace naleznete v této příručce: používání Nginx a Nginx Plus s SELinux na webu Nginx Plus.
Jak nainstalovat a nakonfigurovat SSL s Nginx
Certifikáty SSL pomáhají povolit zabezpečené http (HTTPS) na vašem webu, což je nezbytné pro vytvoření důvěryhodného/zabezpečeného spojení mezi koncovými uživateli a vaším serverem pomocí šifrování informací, které se přenáší na, z nebo v rámci vašeho webu.
Probereme, jak vytvořit a nainstalovat certifikát s vlastním podpisem a vygenerovat žádost o podpis certifikátu (CSR) za účelem získání certifikátu SSL od certifikační autority (CA), pro použití s Nginx.
Vlastní certifikáty lze vytvářet zdarma a jsou prakticky vhodné pro testovací účely a pro interní služby pouze pro LAN. U veřejně přístupných serverů se důrazně doporučuje používat certifikát vydaný CA (například Let’s Encrypt), aby byla zachována jeho autenticita.
Chcete-li vytvořit certifikát podepsaný svým držitelem, nejprve vytvořte adresář, kde budou vaše certifikáty uloženy.
sudo mkdir /etc/nginx/ssl-certs/
Poté vygenerujte certifikát s vlastním podpisem a klíč pomocí nástroje příkazového řádku openssl.
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl-certs/nginx.key -out /etc/nginx/ssl-certs/nginx.crt
Stručně popišme možnosti použité ve výše uvedeném příkazu:
- req -X509 – ukazuje, že vytváříme certifikát x509.
- -nodes (NO DES) – znamená „nešifrovat klíč“.
- -dní 365 – určuje počet dní, po které bude certifikát platný.
- -newkey rsa:2048 – určuje, že klíč vygenerovaný pomocí algoritmu RSA by měl být 2048bitový.
- -keyout /etc/nginx/ssl-certs/nginx.key – určuje úplnou cestu klíče RSA.
- -out /etc/nginx/ssl-certs/nginx.crt – určuje úplnou cestu k certifikátu.
Dále otevřete konfigurační soubor virtuálního hostitele a přidejte následující řádky do deklarace bloku serveru naslouchajícího na portu 443. Testovat budeme pomocí souboru virtuálního hostitele /etc/nginx/conf.d/wearelinux-console.net.conf.
sudo vi /etc/nginx/conf.d/wearelinux-console.net.conf
Poté přidejte direktivu ssl do konfiguračního souboru nginx, měla by vypadat podobně jako níže.
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;
}
}
Nyní restartujte Nginx a nasměrujte svůj prohlížeč na následující adresu.
https://www.wearelinux-console.net
Pokud si chcete zakoupit certifikát SSL od CA, musíte vygenerovat žádost o podepsání certifikátu (CSR), jak je znázorněno na obrázku.
sudo openssl req -newkey rsa:2048 -nodes -keyout /etc/nginx/ssl-certs/example.com.key -out /etc/nginx/ssl-certs/example.com.csr
Můžete také vytvořit CSR z existujícího soukromého klíče.
sudo openssl req -key /etc/nginx/ssl-certs/example.com.key -new -out /etc/nginx/ssl-certs/example.com.csr
Poté musíte odeslat CSR, které je vygenerováno CA, abyste požádali o vydání certifikátu SSL podepsaného CA. Jakmile od CA obdržíte certifikát, můžete jej nakonfigurovat, jak je uvedeno výše.
Přečtěte si také: Nejlepší průvodce zabezpečením, zpevněním a zlepšením výkonu webového serveru Nginx
souhrn
V tomto článku jsme vysvětlili, jak nainstalovat a nakonfigurovat Nginx; Popsali, jak nastavit virtuální hosting na základě názvu s SSL pro zabezpečení datových přenosů mezi webovým serverem a klientem.
Pokud jste během procesu instalace/konfigurace nginx zaznamenali nějaké překážky nebo máte nějaké dotazy či komentáře, kontaktujte nás pomocí níže uvedeného formuláře zpětné vazby.