Com crear un proxy invers amb Nginx
En aquest tutorial et mostrarem com i per quines raons crear un denominat "proxy invers" amb el popular servidor web Nginx, avui dia, és l'opció més popular per a aquest tipus de tasques.
Abans de començar amb el tutorial, no tens un servidor Cloud Linux on puguis instal·lar el teu servidor web nginx? No et preocupis! Amb només un clic, pots desplegar fàcilment amb SW Hosting.
cta:cloud_so
Què és un proxy invers?
Un proxy invers o, reverse proxy en anglès, fa referència a un servidor encarregat de mostrar contingut d'un o més servidors que alhora romanen ocults del client o usuari.
info Per exemple, si poses un servidor intermediari invers davant d'una aplicació web, els teus usuaris mai no interactuaran directament amb l'aplicació, sinó que serà el servidor intermediari invers l'encarregat de fer d'intermediari entre els usuaris i l'aplicació.
Els servidors intermediaris inversos poden ser una opció per incrementar la seguretat. Per exemple, ens permeten ocultar el veritable servidor on estan allotjades les teves aplicacions o també, ens permeten implementar capes de seguretat addicionals, com ara una connexió TLS que és aplicada pel proxy, però que no hagués estat nativament suportada per la teva aplicació.
Així mateix, un servidor intermediari invers resulta pràctic per servir múltiples aplicacions web des d'una mateixa màquina. L'aplicació generalment correrà en localhost sobre ports poc freqüents com 4000
o 5000
. Aleshores, el servidor intermediari invers escoltarà els ports 80/443
i servirà el contingut d'una aplicació web o una altra segons el SNI o el host de la petició.
Crear un proxy invers amb Nginx, pas a pas
En primer lloc, hauràs de complir els següents requisits:
- Disposar d'accés
root
a un servidor Linux.
- Tenir instal·lat i activat Nginx. Assegurar-se de no tenir els ports
80
i 443
ocupats per un altre procés, com ara Apache.
- Tenir corrent una aplicació web a
localhost
a través d'un port arbitrari i que estigui disponible (per exemple el port 4000
). Això es pot aconseguir fàcilment amb NodeJs o .NET Core.
1. Crea un nou fitxer de virtual host
Pots aconseguir-ho utilitzant l'editor de textos nano. Una bona ruta per fer-ho és sites-available
dins del directori de configuració de nginx.
nano /etc/nginx/sites-available/elmeudomini.com.conf
2. Edita l'arxiu i afegeix la configuració per al proxy invers
file elmeudomini.com.conf
server {
#Escolta en el port 80, ipv4.
listen 80;
#Aquí hauràs d'introduir el nom del teu domini.
server_name elmeudomini.com;
access_log /var/log/nginx/elmeudomini.com.access.log;
location / {
#La configuració del proxy.
proxy_pass http://localhost:4000/;
}
}
3. Reinicia Nginx
Per a sistemes operatius basats en Debian:
systemctl reload nginx
4. Llança la teva aplicació web
Arribat a aquest punt hauràs d'executar la teva aplicació web, si encara no està corrent.
A llarg termini voldràs executar com a servei/domini, però per provar serà suficient amb que l'executis manualment.
Per exemple, si tens una aplicació NodeJS, la sintaxi és la següent:
node /ruta/applicacion.js
5. Accedeix a la teva aplicació web des del navegador
Si has seguit els passos d'aquest tutorial i si la teva màquina no té cap altra configuració de seguretat que t'obstaculitzi, ara hauries de ser capaç d'accedir a la teva aplicació des de "midominio.com" (o qualsevol que sigui el teu domini).
6. Serveix la teva aplicació de manera segura amb un certificat TLS (encarament recomanat)
Gràcies a Nginx com a proxy invers, pots servir fàcilment les teves aplicacions de forma segura a través d'una connexió TLS. Per aconseguir-ho, només haurem de modificar el fitxer de configuració del "virtual host" de Nginx:
server {
listen 80;
#Redirecciona a una connexió segura.
return 301 https://$host$request_uri;
}
server {
listen 443;
#Aquí hauràs d'introduir el nom del teu domini.
server_name elmeudomini.com;
#Aquí hauràs d'especificar la ruta del teu certificat SSL
ssl_certificate /etc/ruta/al/certificat/cert.crt;
ssl_certificate_key /etc/ruta/al/certificat/cert.key;
ssl on;
ssl_session_cache shared:SSL:10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;
ssl_prefer_server_ciphers on;
ssl_session_timeout 10m;
access_log /var/log/nginx/midominio.com.access.log;
location / {
proxy_pass http://localhost:4000;
}
}
Finalment, desa els canvis, reinicia nginx amb:
systemctl reload nginx
i torna a executar l'aplicació, si encara no la tens com a servei o domini.
success Ja està! Si has seguit els passos correctament, ara disposaràs d'una aplicació web servida a través d'un proxy revers per nginx.
Recordeu que si no disposeu d'un servidor Cloud amb sistema operatiu Linux podeu desplegar-lo fàcilment amb SW Hosting.
cta:cloud_so