Vyhledávání na webu

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.