Jak włączyć HTTPS dla pamięci podręcznej lakieru za pomocą Hitch w CentOS-RHEL 8
Varnish Cache nie obsługuje natywnej obsługi SSL/TLS i innych protokołów powiązanych z portem 443. Jeśli używasz Varnish Cache do zwiększenia wydajności swojej aplikacji internetowej, musisz zainstalować i skonfigurować inne oprogramowanie zwane proxy zakończenia SSL/TLS, aby współpracowało z Lakieruj pamięć podręczną, aby włączyć HTTPS.
Hitch to darmowy open source, oparty na libev i skalowalny serwer proxy SSL/TLS przeznaczony dla Varnish Cache, który obecnie działa na systemach Linux, OpenBSD, FreeBSD i MacOSX. Kończy połączenia TLS/SSL nasłuchując na porcie 443 (domyślny port dla połączeń HTTPS) i przekazuje niezaszyfrowany ruch do Varnish Cache , powinno działać również z innymi backendami.
Obsługuje TLS1.2 i TLS1.3 oraz starsze TLS 1.0/1.1, obsługuje ALPN (Negocjacja protokołu warstwy aplikacji) i NPN (Negocjacja następnego protokołu) dla HTTP/2, protokołu PROXY do sygnalizowania klienta IP/port do backendu, połączenia gniazda domeny UNIX ze źródłem, SNI (Wskazanie nazwy serwera), z certyfikatami wieloznacznymi lub bez. Dodatkowo sprawdza się w przypadku dużych instalacji, które wymagają aż 15 000 gniazd odsłuchowych i 500 000 certyfikatów.
Jako kontynuacja naszych dwóch poprzednich artykułów na temat instalowania Varnish Cache dla serwerów HTTP Nginx i Apache, w tym przewodniku pokazano, jak włączyć HTTPS< dla Varnish Cache przy użyciu Hitch TLS Proxy w CentOS/RHEL 8.
W tym przewodniku założono, że zainstalowałeś Varnish dla serwera WWW Nginx lub Apache. W przeciwnym razie zobacz:
- Jak zainstalować Varnish Cache 6 dla serwera WWW Nginx na CentOS/RHEL 8
- Jak zainstalować Varnish Cache 6 dla serwera WWW Apache na CentOS/RHEL 8
Krok 1: Zainstaluj Hitch na CentOS/RHEL 8
1. Pakiet Hitch znajduje się w repozytorium EPEL (Dodatkowe pakiety dla Enterprise Linux). Aby go zainstalować, najpierw włącz EPEL w swoim systemie, a następnie zainstaluj pakiet. Jeśli nie masz zainstalowanego pakietu OpenSSL, zainstaluj go również.
dnf install epel-release
dnf install hitch openssl
2. Po zakończeniu instalacji pakietu będziesz musiał skonfigurować Varnish Cache do pracy z Hitch. Musisz także skonfigurować Hitch, aby używał certyfikatów SSL/TLS i Varnish jako backendu. Główny plik konfiguracyjny Hitcha znajduje się w /etc/hitch/hitch.conf, co wyjaśniono poniżej.
Krok 2: Konfiguracja pamięci podręcznej lakieru dla Hitch
3. Następnie włącz Varnish, aby nasłuchiwać na dodatkowym porcie (w naszym przypadku 8443) przy użyciu protokołu PROXY wsparcie w zakresie komunikacji z Hitch.
Otwórz więc plik usługi Varnish systemd do edycji.
systemctl edit --full varnish
Poszukaj linii ExecStart i dodaj dodatkową flagę -a
o wartości 127.0.0.1:8443,proxy. Użycie wartości 127.0.0.1:8443 oznacza, że Varnish zaakceptuje tylko połączenie wewnętrzne (z procesów działających na tym samym serwerze, czyli w tym przypadku hitch), ale nie połączenia zewnętrzne.
ExecStart=/usr/sbin/varnishd -a :80 -a 127.0.0.1:8443,proxy -f /etc/varnish/default.vcl -s malloc,256m
Zapisz plik, a następnie uruchom ponownie usługę Varnish, aby zastosować najnowsze zmiany.
systemctl restart varnish
Krok 3: Uzyskanie certyfikatów SSL/TLS
4. W tej sekcji wyjaśnimy, jak utworzyć pakiet certyfikatów SSL/TLS do użycia w Hitch. W tym przewodniku wyjaśnimy różne opcje korzystania z certyfikatu z podpisem własnym, certyfikatu komercyjnego lub certyfikatu z Let's Encrypt.
Aby utworzyć certyfikat z podpisem własnym (którego powinieneś używać tylko w lokalnym środowisku testowym), możesz skorzystać z narzędzia 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
Następnie utwórz pakiet certyfikatu i klucza w następujący sposób.
cat tecmint.crt tecmint.key >tecmint.pem
Uwaga: do użytku produkcyjnego możesz kupić certyfikat od komercyjnego urzędu certyfikacji (CA) lub pobierz darmowy, automatyczny i w pełni rozpoznawalny certyfikat od Let's Encrypt. Następnie utwórz pakiet PEM.
Jeśli kupiłeś certyfikat od komercyjnego CA, musisz połączyć klucz prywatny, certyfikat i pakiet CA, jak pokazano.
cat example.com.key example.com.crt example.com-ca-bundle.crt > /etc/ssl/example.com.pem
W przypadku Let's Encrypt certyfikat, klucz prywatny i pełny łańcuch będą przechowywane w lokalizacji /etc/letsencrypt/live/example.com/, więc utwórz pakiet jak pokazano .
cat /etc/letsencrypt/live/example.com/fullchain.pem /etc/letsencrypt/live/example.com/privkey.pem >/etc/letsencrypt/live/example.com/example.com_bundle.pem
Krok 4: Konfiguracja i uruchomienie zaczepu
5. Następnie skonfiguruj Varnish jako backend dla Hitch i określ pliki certyfikatów SSL/TLS, które mają być używane HTTPS, w głównym pliku konfiguracyjnym Hitch otwórz go do edycji.
vi /etc/hitch/hitch.conf
Sekcja frontend definiuje adresy IP i port, których Hitch będzie nasłuchiwał. Domyślna konfiguracja polega na nasłuchiwaniu na wszystkich interfejsach IPv4 i IPv6 podłączonych do serwera i działaniu na porcie 443 oraz obsłudze przychodzących HTTPS< żądania, przekazując je Varnish.
Zmień domyślny port proxy backendu z 6086 na 8443 (port używany do przekazywania żądań do Varnish) w pliku Zaczep plik konfiguracyjny, używając parametru backend. Określ także plik certyfikatu, używając parametru pem-file, jak pokazano.
backend = "[127.0.0.1]:8443"
#pem-dir = "/etc/pki/tls/private"
pem-file = "/etc/ssl/tecmint.lan/tecmint.pem"
Zapisz plik i zamknij go.
6. Teraz uruchom usługę hitch i włącz ją, aby automatycznie uruchamiała się przy starcie systemu. Należy zauważyć, że przełącznik --now
używany z opcją Enable powoduje również uruchomienie usługi systemowej, a następnie sprawdzenie jej stanu i działania w następujący sposób.
systemctl enable --now hitch
systemctl status hitch
7. Zanim przystąpisz do testowania, czy Twoja witryna/aplikacja działa teraz w trybie HTTPS, musisz zezwolić na port usługi HTTPS 443 w zaporę, aby umożliwić przechodzenie przez zaporę żądań kierowanych do tego portu na serwerze.
firewall-cmd --zone=public --permanent --add-service=https
firewall-cmd --reload
Krok 5: Testowanie zakończenia protokołu SSL/TLS za pomocą konfiguracji Varnish Cache-Hitch
8. Nadszedł czas na przetestowanie konfiguracji Varnish Cache-Hitch. Otwórz przeglądarkę internetową i użyj adresu IP swojej domeny lub serwera, aby poruszać się po HTTPS.
https://www.example.com
OR
https://SERVER_IP/
Po załadowaniu strony indeksowej aplikacji internetowej sprawdź nagłówki HTTP, aby potwierdzić, że treść jest udostępniana za pośrednictwem Varnish Cache.
Aby to zrobić, kliknij prawym przyciskiem myszy załadowaną stronę internetową, wybierz Sprawdź z listy opcji, aby otworzyć narzędzia programistyczne. Następnie kliknij kartę Sieć i Załaduj ponownie stronę, a następnie wybierz żądanie wyświetlenia nagłówków HTTP, jak pokazano na poniższym zrzucie ekranu.
Krok 6: Przekierowanie HTTP na HTTPS w Varnish Cache
9. Aby Twoja witryna internetowa działała wyłącznie w trybie HTTPS, musisz przekierować cały ruch HTTP do HTTPS. Można to zrobić dodając następującą konfigurację w pliku konfiguracyjnym Hitch.
vi /etc/hitch/hitch.conf
Najpierw dodaj linię import std; tuż pod vlc 4.0;, a następnie poszukaj podprogramu vlc_recv, który jest pierwszym podprogramem VCL wykonywanym natychmiast po tym, jak Varnish Cache przeanalizuje żądanie klienta w jego podstawową strukturę danych. Tutaj możemy modyfikować nagłówki żądań i uruchamiać syntezator w celu przekierowania żądań klientów.
Zmodyfikuj go tak, aby wyglądał tak.
sub vcl_recv {
if (std.port(server.ip) != 443) {
set req.http.location = "https://" + req.http.host + req.url;
return(synth(301));
}
}
Pamiętaj, że protokół PROXY umożliwia Varnish zobaczenie portu nasłuchiwania Hitch 443 z pliku server.ip< zmienna. Zatem linia std.port(server.ip) zwraca numer portu, na którym odebrano połączenie klienta.
Jeśli port nie jest 443 dla HTTPS (co sprawdzane jest przez (std.port(server.ip) != 443)), podprogram ustawi nagłówek lokalizacji HTTP żądania (set req.http.location) na bezpieczne żądanie („https://” + req.http.host< + req.url) po prostu prosząc przeglądarkę internetową o załadowanie wersji strony internetowej HTTPS (tj. przekierowanie adresu URL).
Nagłówek Location zostanie wysłany do podprogramu vcl_synth (który jest wywoływany za pomocą return(synth(301))) z kodem stanu HTTP: 301 (Przeniesiony na stałe).
10. Następnie dodaj następujący podprogram vcl_synth (jednym z jego wielu zastosowań jest przekierowywanie użytkowników), aby przetworzyć powyższy syntezator.
sub vcl_synth {
if (resp.status == 301) {
set resp.http.location = req.http.location;
set resp.status = 301;
return (deliver);
}
}
Sprawdza, czy status odpowiedzi to 301, nagłówek HTTP Location w odpowiedzi jest ustawiony na nagłówek HTTP Location w żądaniu, które w rzeczywistości jest przekierowaniem do HTTPS i wykonuje akcję dostarczania.
Akcja dostarczania tworzy odpowiedź na podstawie odpowiedzi z backendu, przechowuje odpowiedź w pamięci podręcznej i wysyła ją do klienta.
Zapisz plik i zamknij go.
11. Jeszcze raz zastosuj nowe zmiany w konfiguracji Varnish, uruchamiając ponownie usługę. Następnie użyj narzędzia wiersza poleceń curl, aby potwierdzić przekierowanie z HTTP do HTTPS.
systemctl restart varnish
curl -I http://eaxmple.com/
W przeglądarce odpowiedź jest również taka sama, jak pokazano na poniższym zrzucie ekranu.
Mamy nadzieję, że do tego momentu wszystko działało prawidłowo. Jeśli nie, napisz komentarz lub zadaj pytanie, korzystając z poniższego formularza opinii. Aby zapoznać się z zaawansowanymi opcjami konfiguracji, przejdź do dokumentacji Varnish Cache i dokumentacji Hitch.