Apache a més d'utilitzar-se com a servidor web estàtic o dinàmic, disposa d'altres característiques desenvolupades (com la majoria de servidors HTTP) i, en aquest cas, expliquem què és i com configurar un servidor intermediari invers, també anomenat servidor de pas. Aquesta opció permet recuperar recursos del mateix servidor o d'un altre de manera transparent per al client web, proporcionant un altre contingut estàtic i/o dinàmic.
Com funciona el servidor intermediari invers?
En aquest escenari, el servei mateix no genera contingut ni allotja dades; en lloc d'això, el contingut s'obté dels servidors Backend, que normalment tenen connexió directa amb xarxes internes. Quan el servei web rep una petició d'un client, es fa una petició a un d'aquests servidors Backend, que la gestiona i genera el contingut. Aleshores envia el contingut al servidor intermediari (Apache en aquest cas) i aquest envia la resposta al client.
Hi ha múltiples raons per implementar aquesta funció, entre les quals hi ha la seguretat, l'alta disponibilitat, el balanceig de càrrega i la centralització de l'autorització. Normalment, en aquestes implementacions, l'arquitectura i el disseny de la infraestructura dels servidors Backend solen estar aïllats/protegits de l'exterior (DMZ); l'única connexió hauria de ser amb el servidor intermediari (que rep i proporciona la resposta al client).
Quins protocols admet Apache Proxy?
Apache admet els protocols més populars, així com diversos algorismes de balanceig de càrrega diferents (els mòduls de tercers poden afegir compatibilitat amb protocols addicionals), i s'ha de carregar el conjunt de mòduls per proporcionar les funcions necessàries. Aquests mòduls es poden incloure estàticament en el moment de la compilació o dinàmicament mitjançant la seva directiva.
El conjunt ha d'incloure:
- mod_proxy, que proporciona capacitats bàsiques de servidor intermediari
- mod_proxy_balancer, o més mòduls de balanceig si es requereix balanceig de càrrega.
- Un o més mòduls de protocols admesos per al servidor intermediari:
- AJP13 (protocol Apache JServe versió 1.3): mod_proxy_ajp
- CONNECT (per a SSL): mod_proxy_connect
- FastCGI: mod_proxy_fcgi
- FTP: mod_proxy_ftp
- HTTP/0.9, HTTP/1.0 i HTTP/1.1: mod_proxy_http
- HTTP/2.0: mod_proxy_http2
- SCGI: mod_proxy_scgi
- UWSGI: mod_proxy_uwsgi
- WS i WSS (Web-sockets): mod_proxy_wstunnel
Configuració d'un servidor intermediari amb Apache
Si no tens Apache instal·lat, hauràs d'instal·lar el paquet:
Debian/Ubuntu:
# apt install apache2RHEL/CentOS:
# yum install httpdDesprés, activa els mòduls necessaris, que per a aquest exemple són proxy, proxy_http, proxy_balancer, ssl, headers i el mètode bybusyness per al balanceig:
# a2enmod proxy proxy_http proxy_balancer headers ssl proxy_ajp lbmethod_bybusynessPerò podries activar únicament els que necessitis. Utilitzar el corresponent t'aportarà un millor rendiment en fer de servidor intermediari amb les seves opcions avançades. Pots revisar les variables d'entorn a l'enllaç de cadascun d'ells a la seva pàgina oficial (enllaços vinculats).
Per desactivar un mòdul, per exemple proxy_ajp, l'ordre és la següent:
# a2dismod proxy_ajpUn cop activats els mòduls, cal reiniciar el servei Apache:
# systemctl restart apache2Després, edita la configuració del lloc:
# vi /etc/apache2/sites-available/000-default.confPer a un servidor intermediari simple, aquest seria un exemple de configuració de virtualhost per al port HTTP. També pots establir els temps d'espera per a la connexió i/o afegir les capçaleres al servidor intermediari (reinicia el servei posteriorment):
<VirtualHost *:80>
ServerName dominio.com
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
ProxyPreserveHost On
ProxyAddHeaders On
ProxyPass / http://127.0.0.1:8080/ connectiontimeout=5 timeout=30
ProxyPassReverse / http://127.0.0.1:8080/
</VirtualHost>S'ha utilitzat per fer de servidor intermediari cap al mateix servidor, però podria ser un altre servidor amb un certificat configurat i també es podria utilitzar un certificat al servidor intermediari, com en l'exemple següent, en què hem utilitzat Certbot per al certificat (reinicia el servei posteriorment):
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName dominioproxy.com
SSLCertificateFile /etc/letsencrypt/live/domainproxy.com-0001/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/domainproxy.com-0001/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
ProxyPreserveHost On
SSLProxyEngine On
ProxyPass / https://serverbackend.com
ProxyPassReverse / https://serverbackend.com
</VirtualHost>
</IfModule>Per a aquest exemple, també caldrà que el servidor backend tingui un certificat vàlid per a una connexió HTTPS. En cas contrari, hauràs d'afegir les directives per desactivar les comprovacions:
SSLProxyVerify None
SSLProxyCheckPeerCN Off
SSLProxyCheckPeerName Off
SSLProxyCheckPeerExpire Off
Balanceig de càrrega amb Apache
També hi ha un mòdul de servidor intermediari que ofereix la possibilitat de balancejar la càrrega (proxy_balancer), que hem activat prèviament a l'article.
Un exemple de configuració és el següent, amb encaminament de galetes (reinicia el servei posteriorment):
<IfModule mod_ssl.c>
<VirtualHost *:443>
Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
ServerName dominioproxy.com
SSLCertificateFile /etc/letsencrypt/live/domainproxy.com-0001/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/domainproxy.com-0001/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Proxy "balancer://micluster">
BalancerMember "http://10.20.10.5:80"
BalancerMember "http://10.20.10.6:80"
ProxySet lbmethod=bybusyness
ProxySet stickysession=ROUTEID
</Proxy>
ProxyPass "/" "balancer://micluster"
ProxyPassReverse "/" "balancer://micluster"
</VirtualHost>
</IfModule>Com es pot observar, hem fet servir el mètode bybusyness. Fa un seguiment de quantes sol·licituds té assignades actualment cada procés de treball, i cada nova sol·licitud s'assigna automàticament al membre del clúster amb el menor nombre de sol·licituds actives. Però existeixen els mètodes següents:
Caldrà activar-los prèviament per poder-los utilitzar.
Esperem que aquest tutorial t'hagi estat d'ajuda. Si tens consultes sobre aquesta qüestió o qualsevol altra relacionada amb els teus servidors a Clouding, no dubtis a contactar amb soporte@clouding.io Som aquí per ajudar-te!