Giunsa Pag-enable ang HTTPS alang sa Varnish Cache gamit ang Hitch sa CentOS-RHEL 8


Ang Varnish Cache kulang sa lumad nga suporta alang sa SSL/TLS ug uban pang mga protocol nga may kalabutan sa port 443. Kung ikaw naggamit sa Varnish Cache aron mapalambo ang performance sa imong web application, kinahanglan nimo nga i-install ug i-configure ang laing piraso sa software nga gitawag og SSL/TLS termination proxy, aron magtrabaho kauban ang Varnish Cache aron mahimo ang HTTPS.

Ang Hitch usa ka libre nga open source, libev-based, ug scalable SSL/TLS proxy nga gidisenyo alang sa Varnish Cache, nga karon nagtrabaho sa Linux, OpenBSD, FreeBSD, ug MacOSX. Gitapos niini ang mga koneksyon sa TLS/SSL pinaagi sa pagpaminaw sa port 443 (ang default port alang sa mga koneksyon sa HTTPS) ug ipasa ang wala ma-encrypt nga trapiko ngadto sa Varnish Cache, bisan pa niana, kini kinahanglan nga magtrabaho usab sa ubang mga backend.

Gisuportahan niini ang TLS1.2 ug TLS1.3 ug ang kabilin nga TLS 1.0/1.1, nagsuporta sa ALPN (Application-Layer Protocol Negotiation) ug NPN (Next Protocol Negotiation) para sa HTTP/2, usa ka PROXY protocol nga magsenyas sa IP/port sa kliyente ngadto sa backend , UNIX domain socket koneksyon sa gigikanan, SNI (Server Name Indication), nga adunay ug walay wildcard nga mga sertipiko. Dugang pa, kini maayo alang sa dagkong mga instalasyon nga nanginahanglan hangtod sa 15,000 nga mga socket sa pagpaminaw ug 500,000 nga mga sertipiko.

Ingon usa ka pagpadayon sa among duha ka miaging artikulo bahin sa pag-install sa Varnish Cache alang sa Nginx ug Apache HTTP server, kini nga giya nagpakita aron mahimo ang HTTPS alang sa Varnish Cache gamit ang Hitch TLS Proxy sa CentOS/RHEL 8.

Kini nga giya nagtuo nga imong gi-install ang Varnish para sa Nginx o Apache web server, kung dili, tan-awa:

  • Unsaon Pag-instalar sa Varnish Cache 6 para sa Nginx Web Server sa CentOS/RHEL 8
  • Unsaon Pag-instalar sa Varnish Cache 6 para sa Apache Web Server sa CentOS/RHEL 8

Lakang 1: I-install ang Hitch sa CentOS/RHEL 8

1. Ang Hitch package gihatag sa EPEL (Extra Packages for Enterprise Linux) repository. Aron ma-install kini, i-enable una ang EPEL sa imong sistema ug dayon i-install ang package pagkahuman. Kung wala ka naka-install nga OpenSSL package, i-install usab kini.

# dnf install epel-release
# dnf install hitch openssl

2. Kung kompleto na ang pag-install sa package, kinahanglan nimo nga i-configure ang Varnish Cache aron magtrabaho Hitch. Kinahanglan mo usab nga i-configure ang Hitch aron magamit ang imong SSL/TLS nga mga sertipiko ug Varnish isip backend. Ang nag-unang configuration file sa Hitch nahimutang sa /etc/hitch/hitch.conf, nga gipatin-aw sa ubos.

Lakang 2: Pag-configure sa Varnish Cache alang sa Hitch

3. Sunod, himoa ang Varnish nga maminaw sa usa ka dugang nga pantalan (8443 sa among kaso) gamit ang suporta sa PROXY protocol, alang sa komunikasyon uban sa Hitch.

Busa ablihi ang Varnish systemd service file alang sa pag-edit.

# systemctl edit --full varnish

Pangitaa ang linya nga ExecStart ug idugang ang dugang nga -a nga bandila nga adunay kantidad nga 127.0.0.1:8443, proxy. Ang paggamit sa kantidad nga 127.0.0.1: 8443 nagpasabut nga ang Varnish modawat lamang sa internal nga koneksyon (gikan sa mga proseso nga nagdagan sa parehas nga server ie hitch sa kini nga kaso) apan dili mga eksternal nga koneksyon.

ExecStart=/usr/sbin/varnishd -a :80 -a 127.0.0.1:8443,proxy -f /etc/varnish/default.vcl -s malloc,256m 

I-save ang file ug dayon i-restart ang serbisyo sa Varnish aron magamit ang labing bag-ong mga pagbag-o.

# systemctl restart varnish

Lakang 3: Pagkuha og SSL/TLS Certificates

4. Niini nga seksyon, among ipasabut kung giunsa paghimo ang SSL/TLS certificate bundle nga gamiton ubos sa Hitch. Alang sa kini nga giya, among ipasabut ang lainlaing mga kapilian kung giunsa ang paggamit sa usa ka sertipiko nga gipirmahan sa kaugalingon, sertipiko sa komersyal, o usa gikan sa Let's Encrypt.

Para makahimo ug self-signed nga certificate (nga kinahanglan ra nimo gamiton sa lokal nga testing environment), pwede nimo gamiton ang OpenSSL tool.

# mkdir /etc/ssl/tecmint.lan
# cd /etc/ssl/tecmint.lan/
# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout  tecmint.lan.key -out tecmint.lan.crt

Dayon paghimo og usa ka hugpong sa sertipiko ug yawe sama sa mosunod.

# cat tecmint.crt tecmint.key >tecmint.pem

Pahinumdom: Alang sa paggamit sa produksiyon, mahimo kang mopalit ug sertipiko gikan sa usa ka komersyal nga Certificate Authority (CA) o makakuha og libre, awtomatiko, ug hingpit nga giila nga sertipiko gikan sa Let's Encrypt. Dayon paghimo og PEM bundle.

Kung nagpalit ka og sertipiko gikan sa usa ka komersyal nga CA, kinahanglan nimo nga i-merge ang pribado nga yawe, ang sertipiko, ug ang CA bundle ingon sa gipakita.

# cat example.com.key example.com.crt example.com-ca-bundle.crt > /etc/ssl/example.com.pem 

Para sa Let's Encrypt, ang sertipiko, pribadong yawe, ug ang tibuok nga kadena itago ubos sa /etc/letsencrypt/live/example.com/, busa paghimo sa bundle sama sa gipakita.

# cat /etc/letsencrypt/live/example.com/fullchain.pem /etc/letsencrypt/live/example.com/privkey.pem >/etc/letsencrypt/live/example.com/example.com_bundle.pem

Lakang 4: Pag-configure ug Pagsugod sa Hitch

5. Sunod, i-configure ang Varnish isip backend para sa Hitch ug ipiho ang SSL/TLS certificate files nga gamiton para sa HTTPS, sa Hitch main configuration file, ablihi kini para sa pag-edit.

# vi /etc/hitch/hitch.conf

Ang frontend nga seksyon naghubit sa mga IP address ug port nga paminawon ni Hitch. Ang default nga configuration mao ang pagpaminaw sa tanang IPv4 ug IPv6 interface nga gilakip sa server ug modagan sa port 443 ug pagdumala sa umaabot nga HTTPS requests, ihatag kini ngadto sa Varnish.

Usba ang default backend proxy port gikan sa 6086 ngadto sa 8443 (ang port nga gigamit sa pagpasa sa mga hangyo ngadto sa Varnish) sa Hitch configuration file, gamit ang backend parameter. Usab, ipiho ang file sa sertipiko gamit ang parameter sa pem-file sama sa gipakita.

backend = "[127.0.0.1]:8443"
#pem-dir = "/etc/pki/tls/private"
pem-file = "/etc/ssl/tecmint.lan/tecmint.pem"

I-save ang file ug isira kini.

6. Karon sugdi ang hitch service ug himoa kini nga awtomatikong magsugod sa system boot. Timan-i nga ang --karon switch kon gamiton uban sa enable, magsugod usab sa usa ka systemd nga serbisyo ug dayon susihon ang status aron makita kung kini naglihok ug nagdagan sama sa mosunod.

# systemctl enable --now hitch
# systemctl status hitch

7. Sa dili ka pa mopadayon sa pagsulay kon ang imong web site/aplikasyon karon nagdagan sa HTTPS, kinahanglan nimong tugutan ang HTTPS service port 443 sa firewall aron tugotan ang mga hangyo nga gitagana alang sa maong port sa server nga moagi sa firewall.

# firewall-cmd --zone=public --permanent --add-service=https
# firewall-cmd --reload

Lakang 5: Pagsulay sa SSL/TLS Termination gamit ang Varnish Cache-Hitch Setup

8. Panahon na sa pagsulay sa Varnish Cache-Hitch setup. Ablihi ang usa ka web browser ug gamita ang imong domain o IP sa server aron mag-navigate sa HTTPS.

https://www.example.com
OR
https://SERVER_IP/

Sa higayon nga ma-load na ang index page sa imong web application, susiha ang mga header sa HTTP aron makumpirma nga ang sulod gisilbi pinaagi sa Varnish Cache.

Aron mahimo kana, pag-klik sa tuo sa gikarga nga panid sa web, pilia Inspeksyon gikan sa lista sa mga kapilian aron maablihan ang mga himan sa developer. Dayon i-klik ang tab sa Network, ug I-reload ang panid, dayon pilia ang usa ka hangyo nga tan-awon ang mga header sa HTTP, ingon nga gipasiugda sa mosunod nga screenshot.

Lakang 6: Pag-redirect sa HTTP sa HTTPS sa Varnish Cache

9. Aron mapadagan ang imong web site sa HTTPS lang, kinahanglan nimo nga i-redirect ang tanang trapiko sa HTTP sa HTTPS. Mahimo nimo kini pinaagi sa pagdugang sa mosunod nga configuration sa imong Hitch configuration file.

# vi /etc/hitch/hitch.conf 

Una, idugang ang linya import std; ubos lang sa vlc 4.0;, unya pangitaa ang vlc_recv subroutine, nga mao ang una nga VCL subroutine nga gipatuman dayon pagkahuman sa Varnish Cache nga ma-parse ang hangyo sa kliyente ngadto sa sukaranan nga istruktura sa datos. Dinhi mahimo naton usbon ang mga header sa hangyo ug ipatuman ang usa ka synth aron ma-redirect ang mga hangyo sa kliyente.

Usba kini aron kini tan-awon.

sub vcl_recv {
    if (std.port(server.ip) != 443) {
        set req.http.location = "https://" + req.http.host + req.url;
        return(synth(301));
    }
}

Timan-i nga ang PROXY protocol makapahimo sa Varnish nga makakita sa Hitch's listening port 443 gikan sa server.ip variable. Mao nga ang linya nga std.port(server.ip) nagbalik sa numero sa port diin nadawat ang koneksyon sa kliyente.

Kung ang pantalan dili 443 alang sa HTTPS (ingon nga gisusi sa (std.port(server.ip) != 443)), ang subroutine magbutang sa hangyo nga HTTP Location header (itakda ang req.http.location) sa usa ka luwas nga hangyo ( https://” + req.http.host + req.url) nga naghangyo lang sa web browser nga magkarga ug HTTPS nga bersyon sa web page (ie URL redirection).

Ang Location header ipadala sa vcl_synth subroutine (nga gitawag gamit ang return(synth(301))) nga adunay HTTP status code nga 301 (Permanente nga gibalhin).

10. Sunod, idugang ang mosunod nga vcl_synth subroutine (usa sa daghang mga kaso sa paggamit niini mao ang pag-redirect sa mga tiggamit), aron maproseso ang synth sa ibabaw.

sub vcl_synth {
        if (resp.status == 301) {
                set resp.http.location = req.http.location;
		  set resp.status = 301;
                return (deliver);
        }
}

Gisusi niini kung ang status sa tubag 301, ang header sa HTTP Location sa tubag gitakda sa header sa HTTP Location sa hangyo nga sa tinuud usa ka pag-redirect sa HTTPS ug nagpatuman sa usa ka aksyon sa paghatud.

Ang paghatud nga aksyon nagtukod og tubag uban sa tubag gikan sa backend, nagtipig sa tubag sa cache, ug gipadala kini ngadto sa kliyente.

I-save ang file ug isira kini.

11. Sa makausa pa, i-apply ang bag-ong mga kausaban sa configuration sa Varnish pinaagi sa pagsugod pag-usab sa serbisyo. Dayon gamita ang curl command-line tool aron makumpirma ang redirection gikan sa HTTP ngadto sa HTTPS.

# systemctl restart varnish
# curl -I http://eaxmple.com/

Gikan sa browser, ang tubag parehas usab sa gipakita sa mosunod nga screenshot.

Kami nanghinaut nga ang tanan nagtrabaho nga maayo hangtod niining puntoha. Kung dili, ihulog ang usa ka komento o mga pangutana pinaagi sa porma sa feedback sa ubos. Alang sa bisan unsang advanced nga mga kapilian sa pag-configure, adto sa dokumentasyon sa Hitch.