Com instal·lar Nginx amb hosts virtuals i certificat SSL


Nginx (abreviatura de Engine-x) és un servidor intermediari invers i HTTP gratuït, de codi obert, potent, d'alt rendiment i escalable, un servidor intermediari de correu i TCP/UDP estàndard. És fàcil d'utilitzar i configurar, amb un llenguatge de configuració senzill. Nginx és ara el programari de servidor web preferit per alimentar llocs amb molta càrrega, a causa de la seva escalabilitat i rendiment.

En aquest article es parlarà de com utilitzar Nginx com a servidor HTTP, configurar-lo per servir contingut web i configurar amfitrions virtuals basats en noms i crear i instal·lar SSL per a transmissions de dades segures, inclòs un certificat autofirmat a Ubuntu i CentOS. .

Com instal·lar el servidor web Nginx

Primer comenceu instal·lant el paquet Nginx des dels dipòsits oficials mitjançant el vostre gestor de paquets, tal com es mostra.

------------ On Ubuntu ------------ 
$ sudo apt update 
$ sudo apt install nginx 

------------ On CentOS ------------
$ sudo yum update 
$ sudo yum install epel-release 
$ sudo yum install nginx 

Un cop instal·lat el paquet Nginx, heu d'iniciar el servei de moment, habilitar-lo perquè s'iniciï automàticament en el moment de l'arrencada i veure'n l'estat mitjançant les ordres següents. Tingueu en compte que a Ubuntu, s'hauria d'iniciar i activar automàticament mentre el paquet estigui preconfigurat.

$ sudo systemctl start nginx
$ sudo systemctl enable nginx
$ sudo systemctl status nginx

En aquest punt, el servidor web Nginx hauria d'estar en funcionament, podeu verificar l'estat amb l'ordre netstat.

$ sudo netstat -tlpn | grep nginx

Si el vostre sistema té un tallafoc habilitat, heu d'obrir el port 80 i 443 per permetre el trànsit HTTP i HTTPS respectivament, a través d'ell, executant-lo.

------------ 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 

El mètode ideal per provar la instal·lació de Nginx i comprovar si s'està executant i pot servir pàgines web és obrir un navegador web i apuntar a la IP del servidor.

http://Your-IP-Address
OR
http://Your-Domain.com

Una instal·lació en funcionament s'ha d'indicar a la pantalla següent.

Com configurar el servidor web Nginx

Els fitxers de configuració de Nginx es troben al directori /etc/nginx i el fitxer de configuració global es troba a /etc/nginx/nginx.conf tant a CentOS com a Ubuntu.

Nginx està format per mòduls controlats per diverses opcions de configuració, conegudes com a directives. Una directiva pot ser senzilla (en la forma nom i valors acabats amb un ;) o bloc (inclou instruccions addicionals amb {}). I una directiva de bloc que conté altres directives s'anomena context.

Totes les directrius s'expliquen de manera exhaustiva a la documentació de Nginx al lloc web del projecte. Podeu consultar-lo per a més informació.

A nivell bàsic, Nginx es pot utilitzar per oferir contingut estàtic com ara fitxers HTML i multimèdia, en mode autònom, on només s'utilitza el bloc de servidor predeterminat (anàloga a Apache on no s'ha configurat cap amfitrió virtual).

Començarem explicant breument l'estructura de configuració al fitxer de configuració principal.

 
$ sudo vim /etc/nginx/nginx.conf

Si mireu aquest fitxer de configuració Nginx, l'estructura de configuració hauria d'aparèixer de la següent manera i es coneix com a context principal, que conté moltes altres directives simples i de bloc. Tot el trànsit web es gestiona en el context http.

user  nginx;
worker_processes  1;
.....

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
.....

events {
       	.....
}

http {
	server{
		…….
	}
	.....
}

El següent és un fitxer de configuració principal de Nginx de mostra (/etc/nginx/nginx.conf), on el bloc http anterior conté una directiva d'inclusió que indica a Nginx on trobar els fitxers de configuració del lloc web (configuracions de l'amfitrió virtual).

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;
}

Tingueu en compte que a Ubuntu, també trobareu una directiva d'inclusió addicional (inclou /etc/nginx/sites-enabled/*;), on el directori /etc/nginx/sites-enabled/ emmagatzema enllaços simbòlics als fitxers de configuració dels llocs web creats a/etc/nginx/sites-available/, per habilitar els llocs. I suprimir un enllaç simbòlic desactiva aquest lloc en concret.

En funció de la font d'instal·lació, trobareu el fitxer de configuració del lloc web predeterminat a /etc/nginx/conf.d/default.conf (si l'heu instal·lat des del dipòsit oficial de NGINX i EPEL) o /etc/nginx/sites-enabled/default (si heu instal·lat des dels repositoris d'Ubuntu).

Aquest és el nostre bloc de servidor nginx per defecte d'exemple situat a /etc/nginx/conf.d/default.conf al sistema de prova.

server {
    listen    80 default_server;
    listen    [::]:80 default_server;
    server_name    _;
    root           /var/www/html/;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
}

Una breu explicació de les directives de la configuració anterior:

  • escoltar: especifica el port on escolta el servidor.
  • nom_servidor: defineix el nom del servidor que pot ser noms exactes, noms de comodins o expressions regulars.
  • arrel: especifica el directori des del qual Nginx servirà pàgines web i altres documents.
  • índex: especifica els tipus de fitxers d'índex que s'han de publicar.
  • ubicació: s'utilitza per processar sol·licituds de fitxers i carpetes concrets.

Des d'un navegador web, quan apunteu al servidor mitjançant el nom d'amfitrió localhost o la seva adreça IP, processa la sol·licitud i serveix el fitxer /var/www/html/index.html, i immediatament desa l'esdeveniment al seu registre d'accés (/ var/log/nginx/access.log) amb una resposta de 200 (OK). En cas d'error (esdeveniment fallit), registra el missatge al registre d'errors (/var/log/nginx/error.log).

Per obtenir més informació sobre com iniciar sessió a Nginx, podeu consultar Com configurar l'accés personalitzat o els formats de registre d'errors a Nginx.

En lloc d'utilitzar els fitxers de registre per defecte, podeu definir fitxers de registre personalitzats per a diferents llocs web, tal com veurem més endavant, a la secció \configuració d'amfitrions virtuals basats en noms (blocs de servidor).

Per restringir l'accés al vostre lloc web/aplicació o algunes parts d'aquest, podeu configurar l'autenticació HTTP bàsica. Això es pot utilitzar bàsicament per restringir l'accés a tot el servidor HTTP, blocs de servidor individuals o blocs d'ubicació.

Comenceu creant un fitxer que emmagatzemarà les vostres credencials d'accés (nom d'usuari/contrasenya) mitjançant la utilitat htpasswd.

 
$ yum install httpd-tools		#RHEL/CentOS
$ sudo apt install apache2-utils	#Debian/Ubuntu

Com a exemple, afegim un administrador d'usuaris a aquesta llista (podeu afegir tants usuaris com sigui possible), on l'opció -c s'utilitza per especificar el fitxer de contrasenya i el -B per xifrar la contrasenya. Un cop premeu [Enter], se us demanarà que introduïu la contrasenya de l'usuari:

$ sudo htpasswd -Bc /etc/nginx/conf.d/.htpasswd admin

A continuació, assignem els permisos i la propietat adequats al fitxer de contrasenyes (substituïu l'usuari i el grup nginx per www-data a Ubuntu).

$ sudo chmod 640 /etc/nginx/conf.d/.htpasswd
$ sudo chown nginx:nginx /etc/nginx/conf.d/.htpasswd

Com hem esmentat anteriorment, podeu restringir l'accés al vostre servidor web, a un sol lloc web (amb el seu bloc de servidor) o a un directori o fitxer específic. Es poden utilitzar dues directives útils per aconseguir-ho:

  • auth_basic: activa la validació del nom d'usuari i la contrasenya mitjançant el protocol \Autenticació bàsica HTTP.
  • auth_basic_user_file: especifica el fitxer de la credencial.

Com a exemple, mostrarem com protegir amb contrasenya el directori /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;
    }
}

Ara, deseu els canvis i reinicieu el servei Nginx.

$ sudo systemctl restart nginx 

La propera vegada que apunteu el vostre navegador al directori anterior (http://localhost/protected), se us demanarà que introduïu les vostres credencials d'inici de sessió (nom d'usuari admin i la contrasenya escollida).

Un inici de sessió correcte us permet accedir al contingut del directori, en cas contrari, obtindreu un error 401 Autorització necessària.

Com configurar amfitrions virtuals basats en noms (blocs de servidor) a Nginx

El context del servidor permet emmagatzemar i servir diversos dominis/llocs des de la mateixa màquina física o servidor privat virtual (VPS). Es poden declarar diversos blocs de servidors (que representen amfitrions virtuals) dins del context http per a cada lloc/domini. Nginx decideix quin servidor processa una sol·licitud en funció de la capçalera de la sol·licitud que rep.

Demostrarem aquest concepte utilitzant els següents dominis ficticis, cadascun situat al directori especificat:

  • wearelinux-console.net – /var/www/html/wearelinux-console.net/
  • welovelinux.com – /var/www/html/welovelinux.com/

A continuació, assigneu els permisos adequats al directori per a cada lloc.

$ sudo chmod -R 755 /var/www/html/wearelinux-console.net/public_html 
$ sudo chmod -R 755 /var/www/html/welovelinux.com/public_html 

Ara, creeu un fitxer index.html de mostra dins de cada directori 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>

A continuació, creeu els fitxers de configuració del bloc del servidor per a cada lloc dins del directori /etc/httpd/conf.d.

$ sudo vi /etc/nginx/conf.d/wearelinux-console.net.conf
$ sudo vi /etc/nginx/conf.d/welovelinux.com.conf

Afegiu la següent declaració de bloqueig del servidor al fitxer 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;
        }
     
}

A continuació, afegiu la següent declaració de bloqueig del servidor al fitxer 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;
        }
     
}

Per aplicar els canvis recents, reinicieu el servidor web Nginx.

$ sudo systemctl restart nginx

i apuntar el vostre servidor web a les adreces anteriors us hauria de fer veure les pàgines principals dels dominis simulats.

http://wearelinux-console.net
http://welovelinux.com

Important: si teniu SELinux habilitat, la seva configuració predeterminada no permet que Nginx accedeixi a fitxers fora d'ubicacions autoritzades conegudes (com ara /etc/nginx per a les configuracions, /var/log/nginx per als registres, /var/www/html). per a fitxers web, etc.).

Podeu gestionar-ho desactivant SELinux o establint el context de seguretat correcte. Per obtenir més informació, consulteu aquesta guia: utilitzar Nginx i Nginx Plus amb SELinux al lloc web de Nginx Plus.

Com instal·lar i configurar SSL amb Nginx

Els certificats SSL ajuden a habilitar http (HTTPS) segur al vostre lloc, que és essencial per establir una connexió de confiança/segura entre els usuaris finals i el vostre servidor xifrant la informació que es transmet al vostre lloc, des de, o dins del vostre lloc.

Explicarem com crear i instal·lar un certificat autofirmat i generar una sol·licitud de signatura de certificat (CSR) per adquirir un certificat SSL d'una autoritat de certificació (CA), per utilitzar-lo amb Nginx.

Els certificats autofirmats són gratuïts i són pràcticament bons per utilitzar-los amb finalitats de prova i per a serveis interns només de LAN. Per als servidors públics, és molt recomanable utilitzar un certificat emès per una CA (per exemple, Let's Encrypt) per mantenir-ne l'autenticitat.

Per crear un certificat autofirmat, primer creeu un directori on s'emmagatzemaran els vostres certificats.

$ sudo mkdir /etc/nginx/ssl-certs/

A continuació, genereu el vostre certificat autofirmat i la clau mitjançant l'eina de línia d'ordres 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

Descrivim breument les opcions utilitzades a l'ordre anterior:

  • req -X509: mostra que estem creant un certificat x509.
  • -nodes (NO DES): significa \no encripteu la clau.
  • -dies 365: especifica el nombre de dies durant els quals serà vàlid el certificat.
  • -newkey rsa:2048: especifica que la clau generada mitjançant l'algorisme RSA ha de ser de 2048 bits.
  • -keyout /etc/nginx/ssl-certs/nginx.key: especifica el camí complet de la clau RSA.
  • -out /etc/nginx/ssl-certs/nginx.crt: especifica la ruta completa del certificat.

A continuació, obriu el fitxer de configuració de l'amfitrió virtual i afegiu les línies següents a una declaració de bloc de servidor que escolta al port 443. Provarem amb el fitxer d'amfitrió virtual /etc/nginx/conf.d/wearelinux-console.net.conf.

$ sudo vi /etc/nginx/conf.d/wearelinux-console.net.conf

A continuació, afegiu la directiva ssl al fitxer de configuració nginx, hauria de tenir un aspecte similar al següent.

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;
        }

}

Ara reinicieu Nginx i apunteu el vostre navegador a l'adreça següent.

https://www.wearelinux-console.net

Si voleu comprar un certificat SSL d'una CA, heu de generar una sol·licitud de signatura de certificat (CSR) tal com es mostra.

$ sudo openssl req -newkey rsa:2048 -nodes -keyout /etc/nginx/ssl-certs/example.com.key -out /etc/nginx/ssl-certs/example.com.csr

També podeu crear un CSR a partir d'una clau privada existent.

$ sudo openssl req -key /etc/nginx/ssl-certs/example.com.key -new -out /etc/nginx/ssl-certs/example.com.csr

Aleshores, heu d'enviar el CSR que es genera a una CA per sol·licitar l'emissió d'un certificat SSL signat per una CA. Un cop rebeu el vostre certificat de la CA, podeu configurar-lo tal com es mostra a dalt.

En aquest article, hem explicat com instal·lar i configurar Nginx; va explicar com configurar l'allotjament virtual basat en noms amb SSL per assegurar les transmissions de dades entre el servidor web i un client.

Si heu experimentat cap contratemps durant el procés d'instal·lació/configuració de nginx o teniu cap pregunta o comentari, utilitzeu el formulari de comentaris que trobareu a continuació per contactar amb nosaltres.