Jinsi ya kuwezesha HTTPS kwa Cache ya Varnish kwa kutumia Hitch kwenye CentOS-RHEL 8


Cache ya Varnish haina uhimili wa asili wa SSL/TLS na itifaki zingine zinazohusiana na port 443. Ikiwa unatumia Varnish Cache ili kuongeza utendakazi wa programu yako ya wavuti, unahitaji kusakinisha na kusanidi programu nyingine inayoitwa SSL/TLS termination proksi, ili kufanya kazi. kando ya Varnish Cache ili kuwezesha HTTPS.

Hitch ni chanzo huria kisicholipishwa, msingi wa libev, na proksi ya SSL/TLS inayoweza kusambazwa iliyoundwa kwa ajili ya Varnish Cache, ambayo kwa sasa inafanya kazi kwenye Linux, OpenBSD, FreeBSD, na MacOSX. Hukomesha miunganisho ya TLS/SSL kwa kusikiliza kwenye mlango 443 (mlango chaguomsingi wa miunganisho ya HTTPS) na kusambaza trafiki ambayo haijasimbwa kwa Cache ya Varnish, hata hivyo, inapaswa kufanya kazi na viambajengo vingine pia.

Inaauni TLS1.2 na TLS1.3 na TLS 1.0/1.1 iliyopitwa na wakati, inaauni ALPN (Majadiliano ya Itifaki ya Tabaka la Programu) na NPN (Majadiliano Yanayofuata ya Itifaki) kwa HTTP/2, itifaki ya PROXY ya kuashiria IP/mlango wa mteja kwenye sehemu ya nyuma. , miunganisho ya soketi ya kikoa cha UNIX kwa asili, SNI (Ashirio la Jina la Seva), pamoja na bila vyeti vya kadi-mwitu. Zaidi ya hayo, inafanya kazi vyema kwa usakinishaji mkubwa unaohitaji hadi soketi 15,000 za kusikiliza na vyeti 500,000.

Kama muendelezo wa vifungu vyetu viwili vya awali kuhusu kusakinisha Varnish Cache kwa seva za Nginx na Apache HTTP, mwongozo huu unaonyesha kuwezesha HTTPS kwa Cache ya Varnish kwa kutumia Wakala wa Hitch TLS kwenye CentOS/RHEL 8.

Mwongozo huu unadhania kuwa umeweka Varnish kwa seva ya wavuti ya Nginx au Apache, vinginevyo, ona:

  • Jinsi ya Kusakinisha Akiba ya Varnish 6 kwa Seva ya Wavuti ya Nginx kwenye CentOS/RHEL 8
  • Jinsi ya Kusakinisha Akiba ya Varnish 6 kwa Seva ya Wavuti ya Apache kwenye CentOS/RHEL 8

Hatua ya 1: Sakinisha Hitch kwenye CentOS/RHEL 8

1. Kifurushi cha Hitch kimetolewa katika hazina ya EPEL (Vifurushi vya Ziada vya Enterprise Linux). Ili kukisakinisha, kwanza washa EPEL kwenye mfumo wako kisha usakinishe kifurushi baadaye. Ikiwa huna kifurushi cha OpenSSL kilichosakinishwa, kisakinishe pia.

# dnf install epel-release
# dnf install hitch openssl

2. Wakati usakinishaji wa kifurushi umekamilika, itabidi usanidi Cache ya Varnish kufanya kazi Hitch. Pia unahitaji kusanidi Hitch ili kutumia vyeti vyako vya SSL/TLS na Varnish kama sehemu ya nyuma. Faili kuu ya usanidi wa Hitch iko kwenye /etc/hitch/hitch.conf, ambayo imeelezwa hapa chini.

Hatua ya 2: Kusanidi Cache ya Varnish kwa Hitch

3. Kisha, wezesha Varnish kusikiliza lango la ziada (8443 kwa upande wetu) kwa kutumia usaidizi wa itifaki ya PROXY, kwa mawasiliano na Hitch.

Kwa hivyo fungua faili ya huduma ya Varnish systemd kwa uhariri.

# systemctl edit --full varnish

Tafuta mstari wa ExecStart na uongeze alama ya ziada ya -a yenye thamani 127.0.0.1:8443,proksi. Kwa kutumia thamani ya 127.0.0.1:8443 inamaanisha Varnish itakubali muunganisho wa ndani pekee (kutoka kwa michakato inayoendeshwa kwenye seva moja yaani hitch katika kesi hii) lakini si miunganisho ya nje.

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

Hifadhi faili na uanze upya huduma ya Varnish ili kutumia mabadiliko ya hivi karibuni.

# systemctl restart varnish

Hatua ya 3: Kupata Vyeti vya SSL/TLS

4. Katika sehemu hii, tutaeleza jinsi ya kuunda kifurushi cha cheti cha SSL/TLS kitakachotumika chini ya Hitch. Kwa mwongozo huu, tutaelezea chaguo tofauti za jinsi ya kutumia cheti cha kujiandikisha, cheti cha kibiashara, au moja kutoka kwa Let's Encrypt.

Ili kuunda cheti cha kujiandikisha (ambacho unapaswa kutumia katika mazingira ya ndani ya majaribio pekee), unaweza kutumia zana ya OpenSSL.

# 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

Kisha unda kifungu cha cheti na ufunguo kama ifuatavyo.

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

Kumbuka: Kwa matumizi ya uzalishaji, unaweza kununua cheti kutoka kwa Mamlaka ya Cheti cha kibiashara (CA) au unyakue cheti cha bure, kiotomatiki na kinachotambulika kikamilifu kutoka kwa Let's Encrypt. Kisha unda kifungu cha PEM.

Ikiwa ulinunua cheti kutoka kwa CA ya kibiashara, unahitaji kuunganisha ufunguo wa faragha, cheti, na kifungu cha CA kama inavyoonyeshwa.

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

Kwa Hebu Tusimba, cheti, ufunguo wa faragha, na msururu kamili utahifadhiwa chini ya /etc/letsencrypt/live/example.com/, kwa hivyo unda kifurushi kama inavyoonyeshwa.

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

Hatua ya 4: Kusanidi na Kuanzisha Hitch

5. Kisha, sanidi Varnish kama sehemu ya nyuma ya Hitch na ubainishe faili za cheti cha SSL/TLS za kutumia kwa HTTPS, katika faili kuu ya usanidi ya Hitch, ifungue ili ihaririwe.

# vi /etc/hitch/hitch.conf

Sehemu ya mbele inafafanua anwani za IP na bandari ya Hitch itasikiliza. Usanidi chaguo-msingi ni kusikiliza kwenye violesura vyote vya IPv4 na IPv6 vilivyoambatishwa kwenye seva na huendeshwa kwenye mlango 443 na kushughulikia maombi yanayoingia ya HTTPS, na kuyakabidhi kwa Varnish.

Badilisha mlango-msingi wa seva mbadala kutoka 6086 hadi 8443 (mlango unaotumiwa kupeleka maombi kwa Varnish) katika faili ya usanidi ya Hitch, kwa kutumia kigezo cha nyuma. Pia, bainisha faili ya cheti kwa kutumia kigezo cha faili ya pem kama inavyoonyeshwa.

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

Hifadhi faili na uifunge.

6. Sasa anza huduma ya hitch na uiwezesha kuanza moja kwa moja kwenye boot ya mfumo. Kumbuka kuwa swichi ya --sasa inapotumiwa na wezesha, huanzisha huduma ya mfumo pia na kisha kuangalia hali ili kuona ikiwa iko na inafanya kazi kama ifuatavyo.

# systemctl enable --now hitch
# systemctl status hitch

7. Kabla ya kuendelea na kujaribu kama tovuti/programu yako ya tovuti sasa inaendeshwa kwenye HTTPS, unahitaji kuruhusu mlango wa huduma wa HTTPS 443 kwenye ngome ili kuruhusu maombi yanayolengwa kwa mlango huo kwenye seva kupita kwenye ngome.

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

Hatua ya 5: Kujaribu Kukomesha kwa SSL/TLS kwa Usanidi wa Akiba ya Varnish

8. Sasa ni wakati wa kujaribu usanidi wa Varnish Cache-Hitch. Fungua kivinjari na utumie IP ya kikoa au seva yako kupitia HTTPS.

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

Mara tu ukurasa wa faharasa wa programu yako ya wavuti unapopakia, angalia vichwa vya HTTP ili kuthibitisha kuwa maudhui yanatolewa kupitia Cache ya Varnish.

Ili kufanya hivyo, bofya kulia kwenye ukurasa wa wavuti uliopakiwa, chagua Kagua kutoka kwenye orodha ya chaguo ili kufungua zana za msanidi. Kisha bofya kwenye kichupo cha Mtandao, na Pakia upya ukurasa, kisha uchague ombi la kutazama vichwa vya HTTP, kama ilivyoangaziwa kwenye picha ya skrini ifuatayo.

Hatua ya 6: Kuelekeza upya HTTP kwa HTTPS katika Akiba ya Varnish

9. Ili kuendesha tovuti yako kwenye HTTPS pekee, unahitaji kuelekeza upya trafiki yote ya HTTP kwa HTTPS. Unaweza kufanya hivyo kwa kuongeza usanidi ufuatao katika faili yako ya usanidi ya Hitch.

# vi /etc/hitch/hitch.conf 

Kwanza, ongeza mstari wa kuagiza std; chini kidogo ya vlc 4.0;, kisha utafute utaratibu mdogo wa vlc_recv, ambao ni utaratibu mdogo wa kwanza wa VCL kutekelezwa mara tu baada ya Varnish Cache kuchanganua ombi la mteja katika muundo wake wa msingi wa data. Ni pale ambapo tunaweza kurekebisha vichwa vya ombi na kutekeleza synth ili kuelekeza maombi ya mteja.

Irekebishe ili ionekane hivi.

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

Kumbuka kuwa itifaki ya PROXY huwezesha Varnish kuona mlango wa kusikiliza wa Hitch 443 kutoka kwa kigezo cha server.ip. Kwa hivyo laini std.port(server.ip) inarudisha nambari ya bandari ambayo muunganisho wa mteja ulipokelewa.

Ikiwa lango si 443 kwa HTTPS (kama ilivyoangaliwa na (std.port(server.ip) != 443)), utaratibu mdogo utaweka ombi la kichwa cha Mahali pa HTTP (seti req.http.location) kwa ombi salama (“ https://” + req.http.host + req.url) ukiuliza tu kivinjari cha wavuti kupakia toleo la HTTPS la ukurasa wa wavuti (yaani kuelekeza upya kwa URL).

Kijajuu cha Mahali kitatumwa kwa vcl_synth subroutine (ambayo inaitwa kutumia return(synth(301))) yenye msimbo wa hali ya HTTP wa 301 (Imehamishwa kabisa).

10. Kisha, ongeza utaratibu mdogo ufuatao wa vcl_synth (mojawapo ya visa vyake vingi vya utumiaji ni kuelekeza watumiaji), ili kuchakata synth hapo juu.

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

Hukagua ikiwa hali ya jibu ni 301, kichwa cha Mahali pa HTTP katika jibu kimewekwa kwa kichwa cha Mahali pa HTTP katika ombi ambalo kwa hakika ni kuelekeza upya kwa HTTPS na kutekeleza kitendo cha kuwasilisha.

Hatua ya kuwasilisha huunda jibu kwa jibu kutoka upande wa nyuma, huhifadhi jibu katika akiba na kuituma kwa mteja.

Hifadhi faili na uifunge.

11. Mara nyingine tena, tumia mabadiliko mapya katika usanidi wa Varnish kwa kuanzisha upya huduma. Kisha tumia zana ya safu ya amri ya curl ili kudhibitisha kuelekeza upya kutoka HTTP hadi HTTPS.

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

Kutoka kwa kivinjari, jibu pia ni sawa na inavyoonyeshwa kwenye skrini ifuatayo.

Tunatumahi kuwa kila kitu kimefanya kazi vizuri hadi wakati huu. Ikiwa sivyo, toa maoni au maswali kupitia fomu ya maoni hapa chini. Kwa chaguo zozote za usanidi wa hali ya juu, nenda kwenye hati za Hitch.