Поиск по сайту:

Как настроить терминацию Varnish SSL с помощью веб-сервера Nginx в Rocky Linux 8


На этой странице

  1. Предпосылки
  2. Установка веб-сервера Nginx
  3. Создание SSL с помощью Certbot
  4. Настройка порта Nginx по умолчанию
  5. Настройка терминации SSL с веб-сервером Nginx
  6. Автоматический переход с HTTP на HTTPS с помощью Varnish.
  7. Подтвердить терминацию Varnish SSL
  8. Заключение

ПО кеширования Varnish по умолчанию не поддерживает SSL/TLS. Вам потребуется дополнительное программное обеспечение, чтобы включить поддержку SSL/TLS в Varnish.

Терминация SSL — это метод включения SSL/TLS в Varnish. Вы можете использовать Hitch, Nginx или Apache, чтобы включить завершение SSL для HTTP-акселератора Varnish.

Программное обеспечение для терминации SSL будет работать на HTTPS-порту 443 и обрабатывать все HTTPS-запросы от клиентов. После этого все запросы будут перенаправлены в программное обеспечение кэширования лака, а затем перенаправлены на исходный внутренний сервер.

Предпосылки

В этой статье вы узнаете, как настроить Varnish SSL Termination с веб-сервером Nginx.

Прежде чем начать, убедитесь, что у вас есть следующие требования:

  • Сервер Linux с установленным Varnish.
  • Привилегии root
  • Доменное имя

В этом примере мы использовали сервер Rocky Linux с установленным поверх него Varnish. И мы будем использовать доменное имя example.io.

Теперь давайте начнем.

Установка веб-сервера Nginx

Если вы используете Nginx в качестве серверной части Varnish, пропустите этот первый шаг.

На этом первом этапе вы будете устанавливать Nginx в системе Linux.

1. Для дистрибутива на основе Debian/Ubuntu выполните приведенную ниже команду apt, чтобы установить веб-сервер Nginx.

sudo apt install nginx -y

2. В операционной системе CentOS/RockyLinux/AlmaLinux выполните приведенную ниже команду DNF, чтобы установить веб-сервер Nginx.

sudo dnf install nginx -y

3. После завершения установки Nginx запустите и включите веб-сервер Nginx с помощью следующей команды.

sudo systemctl enable --now nginx

Если у вас есть ошибка, оставьте ее. На следующем шаге вы будете настраивать Nginx.

Сгенерируйте SSL с помощью Certbot

На этом этапе вы установите инструмент cerbot и создадите сертификаты SSL от Letsencrypt для домена example.io.

1. Сначала добавьте порты HTTP и HTTPS в системный брандмауэр.

В системах Debian/Ubuntu выполните приведенную ниже команду ufw, чтобы открыть порты HTTP и HTTPS.

sudo ufw allow http
sudo ufw allow https
sudo ufw reload

Для систем CentOS/RockyLinux/AlmaLinux выполните приведенную ниже команду firewall-cmd.

sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload

2. Затем установите инструмент certbot с помощью следующей команды.

Установите инструмент certbot в системах Debian/Ubuntu с помощью приведенной ниже команды apt.

sudo apt install certbot -y

Установите инструмент certbot в системах CentOS/RockyLinux/AlmaLinux, используя приведенную ниже команду DNF.

sudo dnf install certbot -y

3. Прежде чем создавать SSL Letsencrypt, остановите службу Varnish, работающую на порту HTTP по умолчанию.

sudo systemctl stop varnish
sudo systemctl stop nginx

4. Теперь выполните приведенную ниже команду certbot, чтобы сгенерировать SSL Letsencrypt. И не забудьте изменить доменное имя и адрес электронной почты.

sudo certbot certonly --agree-tos --email  --standalone --preferred-challenges http -d example.io

После завершения процесса certbot ваш сертификат будет доступен в каталоге /etc/letsencrypt/live/DOMAIN.COM/.

Сертификат fullchain.pem — это ваш открытый ключ SSL, а privkey.pem — ваш закрытый ключ SSL.

Настройка порта Nginx по умолчанию

Пропустите этот шаг, если вы используете веб-сервер Nginx в качестве серверной части для вашего HTTP-акселератора Varnish.

Если вы используете другой внутренний веб-сервер, вы должны настроить порт по умолчанию для Nginx.

1. Отредактируйте конфигурацию nginx по умолчанию с помощью редактора nano.

sudo nano /etc/nginx/nginx.conf

В разделе по умолчанию server { ... измените параметр listen на порт 8081, как показано ниже.

....

    server {
        listen       8081 default_server;
        listen       [::]:8081 default_server;

        ...trim...
    }

....

Сохраните конфигурацию и выйдите.

2. Теперь перезапустите службу Nginx, чтобы применить новую конфигурацию.

sudo systemctl restart nginx

Служба Nginx по умолчанию теперь работает на порту 8081.

Настройка SSL-терминации с помощью веб-сервера Nginx

Чтобы настроить терминацию SSL с помощью Nginx, вам необходимо создать новую конфигурацию блоков виртуального хоста/сервера, которая будет работать на HTTPS-порту 443.

Этот виртуальный хост обрабатывает все HTTPS-запросы от клиентов и перенаправляет все запросы на ускоритель HTTP Varnish.

1. Создайте новую конфигурацию блока сервера Nginx, используя следующую команду.

Если вы используете систему на базе Debian/Ubuntu, создайте новую конфигурацию /etc/nginx/sites-available/example.io.

sudo nano /etc/nginx/sites-available/example.io

Для системы CentOS/RockyLinux/AlmaLinux создайте новую конфигурацию /etc/nginx/conf.d/example.conf.

sudo nano /etc/nginx/conf.d/example.conf

Скопируйте и вставьте следующую конфигурацию. И обязательно измените доменное имя и путь сертификатов SSL.

server {

    listen 443 ssl http2;
    server_name example.io;
    ssl_certificate           /etc/letsencrypt/live/exmaple.io/fullchain.pem;
    ssl_certificate_key       /etc/letsencrypt/live/example.io/privkey.pem;

    ssl_session_cache  builtin:1000  shared:SSL:10m;
    ssl_protocols TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
    ssl_prefer_server_ciphers on;

    access_log            /var/log/nginx/example.io_access.log;
    error_log             /var/log/nginx/example.io_error.log;

        location / {
            proxy_pass http://127.0.0.1:80;
            proxy_set_header X-Real-IP  $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto https;
            proxy_set_header X-Forwarded-Port 443;
            proxy_set_header Host $host;
        }

  }

Сохраните конфигурацию и выйдите.

2. Затем для системы Debian/Ubuntu активируйте конфигурацию блока сервера с помощью следующей команды.

sudo ln -s /etc/nginx/sites-available/example.io /etc/nginx/sites-enabled/

3. Теперь выполните следующую команду, чтобы проверить конфигурацию Nginx, затем перезапустите службу Nginx, чтобы применить новую конфигурацию.

sudo nginx -t
sudo systemctl restart nginx

4. Теперь проверьте службу Nginx и порт HTTPS 443 с помощью следующей команды.

Проверьте статус службы Nginx с помощью приведенной ниже команды systemctl.

sudo systemctl status nginx

Убедитесь, что служба Nginx активна и работает.

Проверьте HTTPS-порт 443 в вашей системе с помощью приведенной ниже команды ss.

ss -antpl | grep 443

Убедитесь, что порт HTTPS 443 находится в состоянии LISTEN.

LISTEN 0      128          0.0.0.0:443        0.0.0.0:*    users:(("nginx",pid=4787,fd=8),("nginx",pid=4786,fd=8),("nginx",pid=4785,fd=8))

Теперь вы завершили базовую настройку терминации SSL с помощью веб-сервера Nginx.

Автоматический переход с HTTP на HTTPS с помощью Varnish

На этом шаге вы настроите Varnish для автоматического перенаправления HTTP на протокол HTTPS. Этого можно добиться, создав новое правило Varnish в конфигурации default.vcl.

1. Отредактируйте конфигурацию лака /etc/varnish/default.vcl с помощью редактора nano.

nano /etc/varnish/default.vcl

Скопируйте и вставьте следующую конфигурацию в параметр sub vcl_recv { ... }. И обязательно измените доменное имя на свой домен.

sub vcl_recv {

    ...trim...

    if (client.ip != "127.0.0.1" && req.http.host ~ "example.io") {
       set req.http.x-redir = "https://example.io" + req.url;
       return(synth(850, ""));
    }

    ...trim...
{

Затем добавьте следующую конфигурацию в конец строки. Это определит метод перенаправления на HTTP 301.

sub vcl_synth {
    if (resp.status == 850) {
       set resp.http.Location = req.http.x-redir;
       set resp.status = 301;
       return (deliver);
    }
}

Сохраните конфигурацию лака и выйдите.

2. Затем перезапустите службу Varnish, чтобы применить новую конфигурацию, используя следующую команду.

sudo systemctl restart varnish

И вы выполнили автоматическую переадресацию HTTP и HTTPS с помощью правила Varnish.

Подтвердить терминацию Varnish SSL

Чтобы протестировать терминацию Varnish SSL, вы можете использовать веб-браузер или команду curl.

1. Откройте веб-браузер и введите имя своего домена в адресной строке. Для этого примера использовался веб-браузер Firefox.

http://example.io

Вы будете автоматически перенаправлены на протокол HTTPS.

Щелкните правой кнопкой мыши веб-страницу и выберите меню Проверить.

Перейдите на вкладку Сеть и нажмите кнопку Обновить.

Щелкните запрос корневого URL-адреса, и вы увидите результат, аналогичный приведенному ниже.

Запрос к http://example.io автоматически перенаправляется на протокол HTTPS https://example.io с кодом состояния 301.

Сервер Varnish обрабатывает все запросы клиентов.

2. Чтобы проверить терминацию SSL лака с помощью curl, используйте следующую команду.

curl -I http://example.io

Вы увидите подробный заголовок HTTP, как показано ниже.

Запрос перенаправляется на протокол HTTPS https://example.io с кодом состояния HTTP 301. Сервер лака обрабатывает все запросы от клиентов.

Заключение

Поздравляем! Вы изучили настройку Varnish SSL Termination с веб-сервером Nginx.

Кроме того, вы изучили базовую команду certbot для создания бесплатного SSL Letsencrypt и базовое правило лака для автоматического перенаправления с HTTP на HTTPS.