One place for hosting & domains

      Хостинг

      Хостинг сайта с использованием Cloudflare и Nginx в Ubuntu 18.04


      Автор выбрал фонд Electronic Frontier Foundation для получения пожертвований в рамках программы Write for DOnations.

      Введение

      Cloudflare — это служба, располагающаяся между посетителем и сервером владельца сайта, выступающая как обратный прокси-сервер для сайтов. Cloudflare предоставляет сеть доставки контента (CDN), а также защиту от DDoS и распределенные службы сервера доменных имен.

      Nginx — это популярный веб-сервер, на котором размещены многие крупнейшие сайты с самым большим трафиком в Интернете. Организации часто обслуживают сайты с помощью Nginx и используют Cloudflare как поставщика CDN и DNS.

      В этом обучающем модуле вы научитесь защищать свой сайт, обслуживаемый Nginx, сертификатом ЦС Origin от Cloudflare и настраивать Nginx для использования запросов pull с аутентификацией. Преимущества такой системы заключаются в том, что вы используете CDN и быстрое разрешение DNS от Cloudflare и гарантируете проведение всех соединений через Cloudflare. Это не даст вредоносным запросам достичь вашего сервера.

      Предварительные требования

      Для прохождения данного обучающего руководства вам потребуется следующее:

      Шаг 1 — Генерирование сертификата TLS от ЦС Origin

      Центр сертификации Cloudflare Origin позволяет сгенерировать бесплатный сертификат TLS, подписанный Cloudflare, для установки на ваш сервер Nginx. Используя сгенерированный сертификат TLS Cloudflare, вы можете защитить соединение между серверами Cloudflare и вашим сервером Nginx.

      Для генерирования сертификата с использованием ЦС Origin выполните вход в свою учетную запись Clouflare через браузер. Выберите домен, который хотите защитить, и перейдите в раздел SSL/TLS панели управления Cloudflare. Откройте вкладку Origin Server (Сервер Origin) и нажмите кнопку Create Certificate (Создать сертификат):

      Опция создания сертификата в панели управления Cloudflare

      Оставьте выбранной опцию по умолчанию Let Cloudflare generate a private key and a CSR (Позволить Cloudflare сгенерировать закрытый ключ и CSR).

      Опции графического интерфейса ЦС Origin

      Нажмите Next (Далее), и вы увидите диалоговое окно с сертификатом Origin и закрытым ключом. Вам потребуется переместить сертификат Origin и закрытый ключ с сервера Cloudflare на ваш сервер. Для дополнительной безопасности информация закрытого ключа больше не будет отображаться, поэтому вам следует скопировать ключ на свой сервер, прежде чем нажать OK.

      Диалоговое окно с сертификатом Origin и закрытым ключом

      Мы будем использовать каталог /etc/ssl на сервере для хранения сертификата Origin и файлов закрытого ключа. Эта папка уже существует на сервере.

      Вначале скопируйте содержимое сертификата Origin, отображаемое в диалоговом окне вашего браузера.

      Затем откройте на сервере файл /etc/ssl/cert.pem в предпочитаемом текстовом редакторе:

      • sudo nano /etc/ssl/cert.pem

      Добавьте в файл содержимое сертификата. Сохраните файл и закройте редактор.

      Затем вернитесь в браузер и скопируйте содержимое закрытого ключа. Откройте файл /etc/ssl/key.pem для редактирования:

      • sudo nano /etc/ssl/key.pem

      Вставьте в файл закрытый ключ, закройте файл и выйдите из редактора.

      Примечание. Иногда при копировании сертификата и ключа из панели управления Cloudflare и их вставке в соответствующие файлы на сервере в файлы могут быть добавлены пустые строки. Nginx рассматривает такие сертификаты и ключи как некорректные, поэтому следует убедиться, что в файлах нет пустых строк.

      Предупреждение. Сертификату ЦС Cloudflare Origin CA доверяет только Cloudflare, и поэтому его следует использовать только на серверах Origin, имеющих активное подключение к Cloudflare. Если вы приостановите или отключите Cloudflare в любой момент, при обработке сертификата ЦС Origin CA будет выведена ошибка отсутствия доверия к сертификату.

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

      Шаг 2 — Установка сертификата ЦС Origin в Nginx

      В предыдущем разделе мы сгенерировали сертификат Origin и закрытый ключ, используя панель управления Cloudlfare, а также сохранили файлы на сервере. Теперь мы обновим конфигурацию Nginx нашего сайта, чтобы использовать сертификат Origin и закрытый ключ для защиты соединения между серверами Cloudflare и вашим сервером.

      Для начала убедитесь, что брандмауэр UFW разрешает трафик HTTPS. Включите опцию Nginx Full, которая открывает порт 80 (HTTP) и порт 443 (HTTPS):

      • sudo ufw allow 'Nginx Full'

      Перезагрузите UFW:

      Убедитесь, что новые правила разрешены и брандмауэр UFW активен:

      Результат должен будет выглядеть следующим образом:

      Output

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6)

      Теперь вы готовы к настройке серверного блока Nginx. Во время установки Nginx создает серверный блок по умолчанию. Удалите его, если он еще существует, поскольку мы уже настроили персонализированный серверный блок для вашего домена:

      • sudo rm /etc/nginx/sites-enabled/default

      Затем откройте файл конфигурации Nginx для вашего домена:

      • sudo nano /etc/nginx/sites-available/your_domain

      Файл должен выглядеть следующим образом:

      /etc/nginx/sites-available/your_domain

      server {
              listen 80;
              listen [::]:80;
      
              root /var/www/your_domain/html;
              index index.html index.htm index.nginx-debian.html;
      
              server_name your_domain www.your_domain;
      
              location / {
                      try_files $uri $uri/ =404;
              }
      }
      
      

      Мы изменим конфигурацию Nginx, чтобы она выполняла следующее:

      • Прослушивание порта 80 и перенаправление всех запросов с использованием https.
      • Прослушивание порта 443 и использование сертификата Origin и закрытого ключа, добавленных на предыдущем шаге.

      Измените файл, чтобы он выглядел следующим образом:

      /etc/nginx/sites-available/your_domain

      server {
          listen 80;
          listen [::]:80;
          server_name your_domain www.your_domain;
          return 302 https://$server_name$request_uri;
      }
      
      server {
      
          # SSL configuration
      
          listen 443 ssl http2;
          listen [::]:443 ssl http2;
          ssl        on;
          ssl_certificate         /etc/ssl/cert.pem;
          ssl_certificate_key     /etc/ssl/key.pem;
      
          server_name your_domain www.your_domain;
      
          root /var/www/your_domain/html;
          index index.html index.htm index.nginx-debian.html;
      
      
          location / {
                  try_files $uri $uri/ =404;
          }
      }
      

      Сохраните файл и выйдите из редактора.

      Протестируйте файлы конфигурации Nginx на отсутствие ошибок синтаксиса:

      Если проблем обнаружено не будет, перезапустите Nginx для активации изменений:

      • sudo systemctl restart nginx

      Откройте раздел SSL/TLS панели управления Cloudflare, перейдите на вкладку Overview (Обзор) и измените режим шифрования SSL/TLS на Full (strict) (Полный (строгий)). Это предпишет Cloudflare всегда шифровать соединение между Cloudflare и вашим сервером Nginx.

      Активируйте полный (строгий) режим SSL на панели управления Cloudflare

      Теперь откройте свой сайт по адресу https://your_domain и убедитесь, что он правильно настроен. Вы увидите свою домашнюю страницу, и браузер сообщит, что сайт защищен.

      В следующем разделе мы настроим аутентификацию запросов pull ЦС Origin для подтверждения того, что ваш сервер взаимодействует именно с Cloudflare, а не с каким-то другим сервером. Так мы настроим Nginx принимать только те запросы, в которых используется действующий сертификат клиента от Cloudflare, а все запросы, не проходящие через Cloudflare, будут отбрасываться.

      Шаг 3 — Настройка запросов pull ЦС Origin с аутентификацией

      Сертификат ЦС Origin помогает Cloudflare подтверждать взаимодействие с правильным сервером Origin. На этом шаге мы используем аутентификацию клиента TLS, чтобы подтвердить взаимодействие вашего сервера Nginx с Cloudflare.

      При установлении связи TLS с аутентификацией клиента обе стороны предоставляют сертификат для проверки. Сервер Origin настроен так, чтобы принимать только те запросы, в которых используется действующий сертификат клиента от Cloudflare. Запросы, не проходящие через Cloudflare, будут отклоняться, поскольку у них не будет сертификата Cloudflare. Это означает, что злоумышленники не смогут обходить меры безопасности Cloudflare и подключаться к вашему серверу Nginx напрямую.

      Cloudflare предоставляет сертификаты, подписанные ЦС со следующим сертификатом:

      -----BEGIN CERTIFICATE-----
      MIIGCjCCA/KgAwIBAgIIV5G6lVbCLmEwDQYJKoZIhvcNAQENBQAwgZAxCzAJBgNV
      BAYTAlVTMRkwFwYDVQQKExBDbG91ZEZsYXJlLCBJbmMuMRQwEgYDVQQLEwtPcmln
      aW4gUHVsbDEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzETMBEGA1UECBMKQ2FsaWZv
      cm5pYTEjMCEGA1UEAxMab3JpZ2luLXB1bGwuY2xvdWRmbGFyZS5uZXQwHhcNMTkx
      MDEwMTg0NTAwWhcNMjkxMTAxMTcwMDAwWjCBkDELMAkGA1UEBhMCVVMxGTAXBgNV
      BAoTEENsb3VkRmxhcmUsIEluYy4xFDASBgNVBAsTC09yaWdpbiBQdWxsMRYwFAYD
      VQQHEw1TYW4gRnJhbmNpc2NvMRMwEQYDVQQIEwpDYWxpZm9ybmlhMSMwIQYDVQQD
      ExpvcmlnaW4tcHVsbC5jbG91ZGZsYXJlLm5ldDCCAiIwDQYJKoZIhvcNAQEBBQAD
      ggIPADCCAgoCggIBAN2y2zojYfl0bKfhp0AJBFeV+jQqbCw3sHmvEPwLmqDLqynI
      42tZXR5y914ZB9ZrwbL/K5O46exd/LujJnV2b3dzcx5rtiQzso0xzljqbnbQT20e
      ihx/WrF4OkZKydZzsdaJsWAPuplDH5P7J82q3re88jQdgE5hqjqFZ3clCG7lxoBw
      hLaazm3NJJlUfzdk97ouRvnFGAuXd5cQVx8jYOOeU60sWqmMe4QHdOvpqB91bJoY
      QSKVFjUgHeTpN8tNpKJfb9LIn3pun3bC9NKNHtRKMNX3Kl/sAPq7q/AlndvA2Kw3
      Dkum2mHQUGdzVHqcOgea9BGjLK2h7SuX93zTWL02u799dr6Xkrad/WShHchfjjRn
      aL35niJUDr02YJtPgxWObsrfOU63B8juLUphW/4BOjjJyAG5l9j1//aUGEi/sEe5
      lqVv0P78QrxoxR+MMXiJwQab5FB8TG/ac6mRHgF9CmkX90uaRh+OC07XjTdfSKGR
      PpM9hB2ZhLol/nf8qmoLdoD5HvODZuKu2+muKeVHXgw2/A6wM7OwrinxZiyBk5Hh
      CvaADH7PZpU6z/zv5NU5HSvXiKtCzFuDu4/Zfi34RfHXeCUfHAb4KfNRXJwMsxUa
      +4ZpSAX2G6RnGU5meuXpU5/V+DQJp/e69XyyY6RXDoMywaEFlIlXBqjRRA2pAgMB
      AAGjZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgECMB0GA1Ud
      DgQWBBRDWUsraYuA4REzalfNVzjann3F6zAfBgNVHSMEGDAWgBRDWUsraYuA4REz
      alfNVzjann3F6zANBgkqhkiG9w0BAQ0FAAOCAgEAkQ+T9nqcSlAuW/90DeYmQOW1
      QhqOor5psBEGvxbNGV2hdLJY8h6QUq48BCevcMChg/L1CkznBNI40i3/6heDn3IS
      zVEwXKf34pPFCACWVMZxbQjkNRTiH8iRur9EsaNQ5oXCPJkhwg2+IFyoPAAYURoX
      VcI9SCDUa45clmYHJ/XYwV1icGVI8/9b2JUqklnOTa5tugwIUi5sTfipNcJXHhgz
      6BKYDl0/UP0lLKbsUETXeTGDiDpxZYIgbcFrRDDkHC6BSvdWVEiH5b9mH2BON60z
      0O0j8EEKTwi9jnafVtZQXP/D8yoVowdFDjXcKkOPF/1gIh9qrFR6GdoPVgB3SkLc
      5ulBqZaCHm563jsvWb/kXJnlFxW+1bsO9BDD6DweBcGdNurgmH625wBXksSdD7y/
      fakk8DagjbjKShYlPEFOAqEcliwjF45eabL0t27MJV61O/jHzHL3dknXeE4BDa2j
      bA+JbyJeUMtU7KMsxvx82RmhqBEJJDBCJ3scVptvhDMRrtqDBW5JShxoAOcpFQGm
      iYWicn46nPDjgTU0bX1ZPpTpryXbvciVL5RkVBuyX2ntcOLDPlZWgxZCBp96x07F
      AnOzKgZk4RzZPNAxCXERVxajn/FLcOhglVAKo5H0ac+AitlQ0ip55D2/mf8o72tM
      fVQ6VpyjEXdiIXWUq/o=
      -----END CERTIFICATE-----
      

      Также вы можете загрузить сертификат напрямую из Cloudflare здесь.

      Скопируйте этот сертификат.

      Затем создайте файл /etc/ssl/cloudflare.crt для хранения сертификата Cloudflare:

      • sudo nano /etc/ssl/cloudflare.crt

      Добавьте сертификат в файл. Сохраните файл и выйдите из редактора.

      Обновите конфигурацию Nginx для использования запросов pull ЦС Origin с аутентификацией TLS. Откройте файл конфигурации вашего домена:

      • sudo nano /etc/nginx/sites-available/your_domain

      Добавьте директивы ssl_client_certificate и ssl_verify_client, как показано в следующем примере:

      /etc/nginx/sites-available/your_domain

      . . .
      
      server {
      
          # SSL configuration
      
          listen 443 ssl http2;
          listen [::]:443 ssl http2;
          ssl        on;
          ssl_certificate         /etc/ssl/cert.pem;
          ssl_certificate_key     /etc/ssl/key.pem;
          ssl_client_certificate /etc/ssl/cloudflare.crt;
          ssl_verify_client on;
      
          . . .
      

      Сохраните файл и выйдите из редактора.

      Проведите тестирование и убедитесь, что в вашей конфигурации Nginx нет ошибок синтаксиса:

      Если проблем обнаружено не будет, перезапустите Nginx для активации изменений:

      • sudo systemctl restart nginx

      Для аутентификации запросов pull откройте раздел SSL/TLS в панели управления Cloudflare, перейдите на вкладку Origin Server (Сервер Origin) и включите опцию Authenticated Origin Pulls (Запросы pull сервера Origin с аутентификацией).

      Включить запросы pull сервера Origin с аутентификацией

      Откройте сайт по адресу https://your_domain для проверки правильности настройки. Как и в предыдущем случае, вы увидите свою домашнюю страницу.

      Чтобы ваш сервер принимал только запросы, подписанные ЦС Cloudflare, отключите опцию Authenticated Origin Pulls (Запросы pull сервера Origin с аутентификацией) и перезагрузите свой сайт. Вы должны получить следующее сообщение об ошибке:

      Сообщение об ошибке

      Ваш сервер Origin выдаст сообщение об ошибке, если запрос не подписан ЦС Cloudflare.

      Примечание. Большинство браузеров кэшируют запросы, и, чтобы увидеть вышеуказанное изменение, вы можете использовать режим инкогнито/ конфиденциального просмотра в своем браузере. Чтобы не дать Cloudflare кэшировать запросы во время настройки сайта, перейдите на вкладку Overview (Обзор) в панели управления Cloudflare и включите опцию Development Mode (Режим разработки).

      Теперь вы знаете, что все работает нормально, и вам нужно будет вернуться в раздел SSL/TLS на панели управления Cloudflare, перейти на вкладку Origin Server (Сервер Origin) и включить опцию Authenticated Origin Pulls (Запросы pull ЦС Origin с аутентификацией).

      Заключение

      В этом обучающем модуле мы защитили сайт на базе Nginx посредством шифрования трафика между Cloudflare и сервером Nginx с использованием сертификата ЦС Origin от Cloudflare. Затем мы настроили запросы pull ЦС Origin с аутентификацией на сервере Nginx, чтобы он принимал только запросы с серверов Cloudflare, и чтобы никто больше не мог подключиться к серверу Nginx напрямую.



      Source link

      Хостинг сайта с использованием Cloudflare и Nginx в Ubuntu 20.04


      Автор выбрал фонд Electronic Frontier Foundation для получения пожертвований в рамках программы Write for DOnations.

      Введение

      Cloudflare — это служба, располагающаяся между посетителем и сервером владельца сайта, выступающая как обратный прокси-сервер для сайтов. Cloudflare предоставляет сеть доставки контента (CDN), а также защиту от DDoS и распределенные службы сервера доменных имен.

      Nginx — это популярный веб-сервер, на котором размещены многие крупнейшие сайты с самым большим трафиком в Интернете. Организации часто обслуживают сайты с помощью Nginx и используют Cloudflare как поставщика CDN и DNS.

      В этом обучающем модуле вы научитесь защищать свой сайт, обслуживаемый Nginx, сертификатом ЦС Origin от Cloudflare и настраивать Nginx для использования запросов pull с аутентификацией. Преимущества такой системы заключаются в том, что вы используете CDN и быстрое разрешение DNS от Cloudflare и гарантируете проведение всех соединений через Cloudflare. Это не даст вредоносным запросам достичь вашего сервера.

      Предварительные требования

      Для прохождения данного обучающего руководства вам потребуется следующее:

      Шаг 1 — Генерирование сертификата TLS от ЦС Origin

      Центр сертификации Cloudflare Origin позволяет сгенерировать бесплатный сертификат TLS, подписанный Cloudflare, для установки на ваш сервер Nginx. Используя сгенерированный TLS сертификат TLS Cloudflare, вы можете защитить соединение между серверами Cloudflare и вашим сервером Nginx.

      Для генерирования сертификата с использованием ЦС Origin выполните вход в свою учетную запись Cloudflare через браузер. Выберите домен, который хотите защитить, и перейдите в раздел SSL/TLS панели управления Cloudflare. Откройте вкладку Origin Server (Сервер Origin) и нажмите кнопку Create Certificate (Создать сертификат):

      Опция создания сертификата в панели управления Cloudflare

      Оставьте выбранной опцию по умолчанию Let Cloudflare generate a private key and a CSR (Позволить Cloudflare сгенерировать закрытый ключ и CSR).

      Опции графического интерфейса ЦС Origin

      Нажмите Next (Далее), и вы увидите диалоговое окно с сертификатом Origin и закрытым ключом. Вам потребуется переместить сертификат Origin и закрытый ключ с сервера Cloudflare на ваш сервер. Для дополнительной безопасности информация закрытого ключа больше не будет отображаться, поэтому вам следует скопировать ключ на свой сервер, прежде чем нажать OK.

      Диалоговое окно с сертификатом Origin и закрытым ключом

      Мы будем использовать каталог /etc/ssl на сервере для хранения сертификата Origin и файлов закрытого ключа. Эта папка уже существует на сервере.

      Вначале скопируйте содержимое сертификата Origin, отображаемое в диалоговом окне вашего браузера.

      Затем откройте на сервере файл /etc/ssl/cert.pem в предпочитаемом текстовом редакторе:

      • sudo nano /etc/ssl/cert.pem

      Добавьте в файл содержимое сертификата. Сохраните файл и закройте редактор.

      Затем вернитесь в браузер и скопируйте содержимое закрытого ключа. Откройте файл /etc/ssl/key.pem для редактирования:

      • sudo nano /etc/ssl/key.pem

      Вставьте в файл закрытый ключ, закройте файл и выйдите из редактора.

      Примечание. Иногда при копировании сертификата и ключа из панели управления Cloudflare и их вставке в соответствующие файлы на сервере в файлы могут быть добавлены пустые строки. Nginx рассматривает такие сертификаты и ключи как некорректные, поэтому следует убедиться, что в файлах нет пустых строк.

      Предупреждение. Сертификату ЦС Cloudflare Origin доверяет только Cloudflare, и поэтому его следует использовать только на серверах Origin, имеющих активное подключение к Cloudflare. Если вы приостановите или отключите Cloudflare в любой момент, при обработке сертификата ЦС Origin будет выведена ошибка отсутствия доверия к сертификату.

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

      Шаг 2 — Установка сертификата ЦС Origin в Nginx

      В предыдущем разделе мы сгенерировали сертификат Origin и закрытый ключ, используя панель управления Cloudlfare, а также сохранили файлы на сервере. Теперь мы обновим конфигурацию Nginx нашего сайта, чтобы использовать сертификат Origin и закрытый ключ для защиты соединения между серверами Cloudflare и вашим сервером.

      Для начала убедитесь, что брандмауэр UFW разрешает трафик HTTPS. Включите опцию Nginx Full, которая открывает порт 80 (HTTP) и порт 443 (HTTPS):

      • sudo ufw allow 'Nginx Full'

      Перезагрузите UFW:

      Убедитесь, что новые правила разрешены и брандмауэр UFW активен:

      Результат должен будет выглядеть следующим образом:

      Output

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6)

      Теперь вы готовы к настройке серверного блока Nginx. Во время установки Nginx создает серверный блок по умолчанию. Удалите его, если он еще существует, поскольку мы уже настроили персонализированный серверный блок для вашего домена:

      • sudo rm /etc/nginx/sites-enabled/default

      Затем откройте файл конфигурации Nginx для вашего домена:

      • sudo nano /etc/nginx/sites-available/your_domain

      Файл должен выглядеть следующим образом:

      /etc/nginx/sites-available/your_domain

      server {
              listen 80;
              listen [::]:80;
      
              root /var/www/your_domain/html;
              index index.html index.htm index.nginx-debian.html;
      
              server_name your_domain www.your_domain;
      
              location / {
                      try_files $uri $uri/ =404;
              }
      }
      
      

      Мы изменим конфигурацию Nginx, чтобы она выполняла следующее:

      • Прослушивание порта 80 и перенаправление всех запросов с использованием https.
      • Прослушивание порта 443 и использование сертификата Origin и закрытого ключа, добавленных на предыдущем шаге.

      Измените файл, чтобы он выглядел следующим образом:

      /etc/nginx/sites-available/your_domain

      server {
          listen 80;
          listen [::]:80;
          server_name your_domain www.your_domain;
          return 302 https://$server_name$request_uri;
      }
      
      server {
      
          # SSL configuration
      
          listen 443 ssl http2;
          listen [::]:443 ssl http2;
          ssl_certificate         /etc/ssl/cert.pem;
          ssl_certificate_key     /etc/ssl/key.pem;
      
          server_name your_domain www.your_domain;
      
          root /var/www/your_domain/html;
          index index.html index.htm index.nginx-debian.html;
      
      
          location / {
                  try_files $uri $uri/ =404;
          }
      }
      

      Сохраните файл и выйдите из редактора.

      Протестируйте файлы конфигурации Nginx на отсутствие ошибок синтаксиса:

      Если вы не обнаружите проблем, перезапустите Nginx для внесения изменений:

      • sudo systemctl restart nginx

      Откройте раздел SSL/TLS панели управления Cloudflare, перейдите на вкладку Overview (Обзор) и измените режим шифрования SSL/TLS на Full (strict) (Полный (строгий)). Это предпишет Cloudflare всегда шифровать соединение между Cloudflare и вашим сервером Nginx.

      Активация полного (строгого) режима SSL на панели управления Cloudflare

      Теперь откройте свой сайт по адресу https://your_domain и убедитесь, что он правильно настроен. Вы увидите свою домашнюю страницу, и браузер сообщит, что сайт защищен.

      В следующем разделе мы настроим аутентификацию запросов pull ЦС Origin для подтверждения того, что ваш сервер взаимодействует именно с Cloudflare, а не с каким-то другим сервером. Так мы настроим Nginx принимать только те запросы, в которых используется действующий сертификат клиента от Cloudflare, а все запросы, не проходящие через Cloudflare, будут отбрасываться.

      Шаг 3 — Настройка запросов pull ЦС Origin с аутентификацией

      Сертификат ЦС Origin помогает Cloudflare подтверждать взаимодействие с правильным сервером Origin. На этом шаге мы используем аутентификацию клиента TLS, чтобы подтвердить взаимодействие вашего сервера Nginx с Cloudflare.

      При установлении связи TLS с аутентификацией клиента обе стороны предоставляют сертификат для проверки. Сервер Origin настроен так, чтобы принимать только те запросы, в которых используется действующий сертификат клиента от Cloudflare. Запросы, не проходящие через Cloudflare, будут отклоняться, поскольку у них не будет сертификата Cloudflare. Это означает, что злоумышленники не смогут обходить меры безопасности Cloudflare и подключаться к вашему серверу Nginx напрямую.

      Cloudflare предоставляет сертификаты, подписанные ЦС со следующим сертификатом:

      -----BEGIN CERTIFICATE-----
      MIIGCjCCA/KgAwIBAgIIV5G6lVbCLmEwDQYJKoZIhvcNAQENBQAwgZAxCzAJBgNV
      BAYTAlVTMRkwFwYDVQQKExBDbG91ZEZsYXJlLCBJbmMuMRQwEgYDVQQLEwtPcmln
      aW4gUHVsbDEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzETMBEGA1UECBMKQ2FsaWZv
      cm5pYTEjMCEGA1UEAxMab3JpZ2luLXB1bGwuY2xvdWRmbGFyZS5uZXQwHhcNMTkx
      MDEwMTg0NTAwWhcNMjkxMTAxMTcwMDAwWjCBkDELMAkGA1UEBhMCVVMxGTAXBgNV
      BAoTEENsb3VkRmxhcmUsIEluYy4xFDASBgNVBAsTC09yaWdpbiBQdWxsMRYwFAYD
      VQQHEw1TYW4gRnJhbmNpc2NvMRMwEQYDVQQIEwpDYWxpZm9ybmlhMSMwIQYDVQQD
      ExpvcmlnaW4tcHVsbC5jbG91ZGZsYXJlLm5ldDCCAiIwDQYJKoZIhvcNAQEBBQAD
      ggIPADCCAgoCggIBAN2y2zojYfl0bKfhp0AJBFeV+jQqbCw3sHmvEPwLmqDLqynI
      42tZXR5y914ZB9ZrwbL/K5O46exd/LujJnV2b3dzcx5rtiQzso0xzljqbnbQT20e
      ihx/WrF4OkZKydZzsdaJsWAPuplDH5P7J82q3re88jQdgE5hqjqFZ3clCG7lxoBw
      hLaazm3NJJlUfzdk97ouRvnFGAuXd5cQVx8jYOOeU60sWqmMe4QHdOvpqB91bJoY
      QSKVFjUgHeTpN8tNpKJfb9LIn3pun3bC9NKNHtRKMNX3Kl/sAPq7q/AlndvA2Kw3
      Dkum2mHQUGdzVHqcOgea9BGjLK2h7SuX93zTWL02u799dr6Xkrad/WShHchfjjRn
      aL35niJUDr02YJtPgxWObsrfOU63B8juLUphW/4BOjjJyAG5l9j1//aUGEi/sEe5
      lqVv0P78QrxoxR+MMXiJwQab5FB8TG/ac6mRHgF9CmkX90uaRh+OC07XjTdfSKGR
      PpM9hB2ZhLol/nf8qmoLdoD5HvODZuKu2+muKeVHXgw2/A6wM7OwrinxZiyBk5Hh
      CvaADH7PZpU6z/zv5NU5HSvXiKtCzFuDu4/Zfi34RfHXeCUfHAb4KfNRXJwMsxUa
      +4ZpSAX2G6RnGU5meuXpU5/V+DQJp/e69XyyY6RXDoMywaEFlIlXBqjRRA2pAgMB
      AAGjZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgECMB0GA1Ud
      DgQWBBRDWUsraYuA4REzalfNVzjann3F6zAfBgNVHSMEGDAWgBRDWUsraYuA4REz
      alfNVzjann3F6zANBgkqhkiG9w0BAQ0FAAOCAgEAkQ+T9nqcSlAuW/90DeYmQOW1
      QhqOor5psBEGvxbNGV2hdLJY8h6QUq48BCevcMChg/L1CkznBNI40i3/6heDn3IS
      zVEwXKf34pPFCACWVMZxbQjkNRTiH8iRur9EsaNQ5oXCPJkhwg2+IFyoPAAYURoX
      VcI9SCDUa45clmYHJ/XYwV1icGVI8/9b2JUqklnOTa5tugwIUi5sTfipNcJXHhgz
      6BKYDl0/UP0lLKbsUETXeTGDiDpxZYIgbcFrRDDkHC6BSvdWVEiH5b9mH2BON60z
      0O0j8EEKTwi9jnafVtZQXP/D8yoVowdFDjXcKkOPF/1gIh9qrFR6GdoPVgB3SkLc
      5ulBqZaCHm563jsvWb/kXJnlFxW+1bsO9BDD6DweBcGdNurgmH625wBXksSdD7y/
      fakk8DagjbjKShYlPEFOAqEcliwjF45eabL0t27MJV61O/jHzHL3dknXeE4BDa2j
      bA+JbyJeUMtU7KMsxvx82RmhqBEJJDBCJ3scVptvhDMRrtqDBW5JShxoAOcpFQGm
      iYWicn46nPDjgTU0bX1ZPpTpryXbvciVL5RkVBuyX2ntcOLDPlZWgxZCBp96x07F
      AnOzKgZk4RzZPNAxCXERVxajn/FLcOhglVAKo5H0ac+AitlQ0ip55D2/mf8o72tM
      fVQ6VpyjEXdiIXWUq/o=
      -----END CERTIFICATE-----
      

      Также вы можете загрузить сертификат напрямую из Cloudflare здесь.

      Скопируйте этот сертификат.

      Затем создайте файл /etc/ssl/cloudflare.crt для хранения сертификата Cloudflare:

      • sudo nano /etc/ssl/cloudflare.crt

      Добавьте сертификат в файл. Сохраните файл и выйдите из редактора.

      Обновите конфигурацию Nginx для использования запросов pull ЦС Origin с аутентификацией TLS. Откройте файл конфигурации вашего домена:

      • sudo nano /etc/nginx/sites-available/your_domain

      Добавьте директивы ssl_client_certificate и ssl_verify_client, как показано в следующем примере:

      /etc/nginx/sites-available/your_domain

      . . .
      
      server {
      
          # SSL configuration
      
          listen 443 ssl http2;
          listen [::]:443 ssl http2;
          ssl_certificate         /etc/ssl/cert.pem;
          ssl_certificate_key     /etc/ssl/key.pem;
          ssl_client_certificate /etc/ssl/cloudflare.crt;
          ssl_verify_client on;
      
          . . .
      

      Сохраните файл и выйдите из редактора.

      Проведите тестирование Nginx и убедитесь, что в вашей конфигурации Nginx нет ошибок синтаксиса:

      Если проблем обнаружено не будет, перезапустите Nginx для активации изменений:

      • sudo systemctl restart nginx

      Для аутентификации запросов pull откройте раздел SSL/TLS в панели управления Cloudflare, перейдите на вкладку Origin Server (Сервер Origin) и включите опцию Authenticated Origin Pulls (Запросы pull сервера Origin с аутентификацией).

      Включить запросы pull сервера Origin с аутентификацией

      Откройте сайт по адресу https://your_domain для проверки правильности настройки. Как и в предыдущем случае, вы увидите свою домашнюю страницу.

      Чтобы ваш сервер принимал только запросы, подписанные ЦС Cloudflare, отключите опцию Authenticated Origin Pulls (Запросы pull сервера Origin с аутентификацией) и перезагрузите свой сайт. Вы должны получить следующее сообщение об ошибке:

      Сообщение об ошибке

      Ваш сервер Origin выдаст ошибку, если ЦС Cloudflare не подпишет запрос.

      Примечание. Большинство браузеров кэшируют запросы, и, чтобы увидеть вышеуказанное изменение, вы можете использовать режим инкогнито/конфиденциального просмотра в своем браузере. Чтобы не дать Cloudflare кэшировать запросы во время настройки сайта, перейдите на вкладку Overview (Обзор) в панели управления Cloudflare и включите опцию Development Mode (Режим разработки).

      Теперь вы знаете, что все работает нормально, и вам нужно будет вернуться в раздел SSL/TLS на панели управления Cloudflare, перейти на вкладку Origin Server (Сервер Origin) и включить опцию Authenticated Origin Pulls (Запросы pull ЦС Origin с аутентификацией).

      Заключение

      В этом обучающем модуле мы защитили сайт на базе Nginx посредством шифрования трафика между Cloudflare и сервером Nginx с использованием сертификата ЦС Origin от Cloudflare. Затем мы настроили запросы pull ЦС Origin с аутентификацией на сервере Nginx, чтобы он принимал только запросы с серверов Cloudflare, и чтобы никто другой не мог подключиться к серверу Nginx напрямую.



      Source link

      Хостинг веб-сайта с Caddy в Ubuntu 18.04


      Автор выбрал фонд Free and Open Source Fund для получения пожертвования в рамках программы Write for DOnations.

      Введение

      Caddy — это простой и безопасный веб-сервер, имеющий ряд функций, которые могут быть полезны для хостинга веб-сайтов. Например, он может автоматически получать и управлять сертификатами TLS из Let’s Encrypt для использования HTTPS и включает поддержку HTTP/2. HTTPS — это система защиты трафика, которым пользователи обмениваются с сервером.Она очень быстро становится стандартом для любого запущенного в производственную среду веб-сайта. Без HTTPS браузеры Chrome и Firefox будут предупреждать, что ваш веб-сайт является «небезопасным» при отправке пользователями учетных данных.

      Ранее для установки Caddy рекомендовалось загружать предварительно подготовленные бинарные файлы с сайта проекта Caddy. Однако изменения в лицензировании Caddy означает, что вы больше не можете использовать эти предварительно подготовленные бинарные файлы в коммерческих целях, если не оплатите лицензионный сбор, даже если вы используете Caddy для внутренних нужд вашего бизнеса. К счастью, исходный код Caddy остается полностью открытым, и вы можете создать сборку Caddy самостоятельно, чтобы избежать проблем с лицензированием.

      В этом обучающем руководстве вы выполните сборку Caddy из исходного кода и используете его для хостинга веб-сайта, защищенного с помощью HTTPS. Эти задачи подразумевают компиляцию, настройку с помощью Caddyfile и установку плагинов. В конце вы узнаете, как обновить вашу установку при появлении новой версии.

      Предварительные требования

      • Сервер Ubuntu 18.04 с привилегиями root и дополнительная учетная запись без прав root. Вы можете выполнить настройку, следуя указаниям документа Начальная настройка сервера для Ubuntu 18.04. В этом руководстве нашим пользователем без прав root будет sammy.
      • Зарегистрированное полное доменное имя. В этом обучающем руководстве мы будем использовать your_domain. Вы можете купить доменное имя на Namecheap, получить его бесплатно на Freenom или воспользоваться услугами любого предпочитаемого регистратора доменных имен.
      • Запись DNS A с your_domain​​​, указывающая на публичный IP-адрес вашего сервера. В руководстве Введение в DigitalOcean DNS содержится подробная информация по их добавлению.
      • Набор инструментов для языка Go, установленный на вашем сервере. Воспользуйтесь нашим руководством Установка Go и настройка локальной среды программирования в Ubuntu 18.04 для настройки Go. Создавать примеры проектов не нужно.
      • Персональный токен доступа (ключ API) с правами на чтение и запись для вашей учетной записи DigitalOcean. Его создание описано в материале Создание персонального токена доступа.

      Шаг 1 — Сборка Caddy

      В этом шаге вы выполните сборку Caddy из исходного кода с возможностью последующего добавления плагинов без внесения изменений в исходный код Caddy.

      Для целей настоящего обучающего руководства вы будете хранить исходный код в директории ~/caddy. Создайте директорию, запустив следующую команду:

      Перейдите в директорию:

      Вы сохраните исходный код для запуска и настройки Caddy в файле с именем caddy.go. Создайте файл с помощью следующей команды:

      Добавьте следующие строки:

      ~/caddy/caddy.go

      package main
      
      import (
          "github.com/caddyserver/caddy/caddy/caddymain"
      )
      
      func main() {
          // caddymain.EnableTelemetry = false
          caddymain.Run()
      }
      

      Этот код импортирует Caddy непосредственно из Github (с помощью Git) и запускает его, используя точку входа — функцию main. Если вы хотите активировать телеметрию, разкомментируйте строку caddymain.EnableTelemetry и задайте значение true. После внесения изменений сохраните и закройте файл.

      Чтобы caddy.go мог использовать импортированные зависимости, необходимо инициализировать его в качестве модуля:

      Output

      go: creating new go.mod: module caddy

      В настоящий момент вы можете выполнить сборку стоковой версии Caddy из исходного кода, запустив следующую команду:

      Вы получите большое количество данных в выводе с информацией о том, какие библиотеки Go, загруженные в качестве зависимостей, необходимы для компиляции. Полученный в результате исполняемый файл хранится в файле $GOPATH/bin, как описано в предварительных требованиях.

      После завершения попробуйте запустить Caddy:

      Результат будет выглядеть примерно так:

      Output

      Activating privacy features... done. Serving HTTP on port 2015 http://:2015 WARNING: File descriptor limit 1024 is too low for production servers. At least 8192 is recommended. Fix with `ulimit -n 8192`.

      Это означает, что Caddy успешно запущен и доступен на порту 2015. Вы можете проигнорировать предупреждение, поскольку этот лимит будет корректироваться в последующих шагах без вашего вмешательства. Для выхода нажмите CTRL + C.

      Вы выполнили сборку и запустили Caddy. В следующем шаге вы выполните установку Caddy в качестве службы для ее автоматического запуска при загрузке, а затем измените настройки принадлежности и разрешений для обеспечения безопасности сервера.

      Шаг 2 — Установка Caddy

      Теперь, когда вы убедились в возможности выполнения сборки и запуска Caddy, пришло время настроить службу systemd, чтобы Caddy можно было запускать автоматически при загрузке системы. Дополнительную информацию о systemd можно найти в руководстве по основам Systemd.

      Для начала переместите бинарный файл Caddy в /usr/local/bin, стандартное местоположение для бинарных файлов, которые не управляются диспетчером пакетов Ubuntu и не используются для работы системы:

      • sudo mv $GOPATH/bin/caddy /usr/local/bin/

      Далее измените принадлежность бинарного файла Caddy на пользователя root:

      • sudo chown root:root /usr/local/bin/caddy

      Это предотвратит внесение изменений в исполняемый файл с помощью других учетных записей. Однако даже при использовании пользователя root для определения принадлежности Caddy рекомендуется запускать Caddy с помощью других учетных записей, не имеющих прав root и присутствующих в вашей системе. Это гарантирует, что в случае нарушения безопасности Caddy (или другой программы) злоумышленник не сможет изменять бинарный файл или выполнять команды от имени пользователя root.

      Далее установите для бинарного файла разрешения 755 — это позволит предоставить пользователю root полные права на чтение/запись/исполнение файла, в то время как остальные пользователи смогут только читать и исполнять файл:

      • sudo chmod 755 /usr/local/bin/caddy

      Поскольку процесс Caddy не будет запускаться с помощью пользователя root, Linux будет запрещать привязку к портам 80 и 443 (стандартные порты для HTTP и HTTPS соответственно), так как это привилегированные операции. Для удобства доступа к вашему домену Caddy необходимо привязать к одному из этих портов в зависимости от протокола. В противном случае вам потребуется добавить конкретный номер порта в URL-адрес домена в вашем браузере, чтобы просмотреть содержимое, которое он будет обслуживать.

      Чтобы позволить Caddy выполнять привязку к порту с низким номером без запуска root, воспользуйтесь следующей командой:

      • sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/caddy

      Утилита setcap определяет права для файлов. В этой команде она предоставляет право CAP_NET_BIND_SERVICE​​​ для бинарного файла Caddy, что позволяет исполняемому файлу выполнять привязку с номером ниже 1024. В этой команде она указывает возможности CAPNETBIND_SERVICE для бинарного файла Caddy, который позволяет привязку исполняющего файла к порту ниже 1024.

      Теперь вы завершили настройку бинарного файла Caddy и можете приступать к созданию конфигурации Caddy. Создайте директорию, где вы будете хранить файлы конфигурации Caddy, запустив следующую команду:

      Затем установите правильные разрешения для пользователя и группы:

      • sudo chown -R root:www-data /etc/caddy

      Установка пользователя в качестве root, а группы как www-data гарантирует, что у Caddy будет доступ к папке с правами на чтение и запись (через группу www-data) и что только учетная запись суперпользователя будет иметь аналогичные права на чтение и изменение. www-data — это используемые в Ubuntu по умолчанию пользователь и группа при работе с веб-сервером.

      В следующем шаге вы должны будете активировать автоматическое предоставление сертификата TLS из Let’s Encrypt. В процессе подготовки создайте директорию для хранения любых сертификатов TLS, которые будет получать Caddy, и укажите те же самые правила принадлежности, как и в случае с директорией /etc/caddy:

      • sudo mkdir /etc/ssl/caddy
      • sudo chown -R root:www-data /etc/ssl/caddy

      Caddy должен иметь возможность сохранять сертификаты в этой директории и считывать их оттуда, чтобы шифровать запросы. По этой причине необходимо изменить разрешения для директории /etc/ssl/caddy, чтобы она была доступна только посредством пользователя root и группы www-data:

      • sudo chmod 0770 /etc/ssl/caddy

      Далее создайте директорию для хранения файлов, которые будет размещать Caddy:

      Установите www-data в качестве владельца и группы директории:

      • sudo chown www-data:www-data /var/www

      Caddy считывает свою конфигурацию из файла с именем Caddyfile, который хранится в директории /etc/caddy. Создайте файл на диске, запустив следующую команду:

      • sudo touch /etc/caddy/Caddyfile

      Для установки службы Caddy загрузите юнит-файл systemd из репозитория Caddy на Github в директорию /etc/systemd/system, запустив следующую команду:

      • sudo sh -c 'curl https://raw.githubusercontent.com/caddyserver/caddy/master/dist/init/linux-systemd/caddy.service > /etc/systemd/system/caddy.service'

      Внесите изменения в разрешения файла службы, чтобы его мог изменять только владелец, т. е. root:

      • sudo chmod 644 /etc/systemd/system/caddy.service

      Затем перезагрузите службу systemd для обнаружения службы Caddy:

      • sudo systemctl daemon-reload

      Проверьте, удалось ли systemd обнаружить службу Caddy, запустив systemctl status:

      • sudo systemctl status caddy

      Результат будет выглядеть примерно так:

      Output

      ● caddy.service - Caddy HTTP/2 web server Loaded: loaded (/etc/systemd/system/caddy.service; disabled; vendor preset: e Active: inactive (dead) Docs: https://caddyserver.com/docs

      Если вы увидите аналогичный вывод, это значит, что новая служба была корректно обнаружена службой systemd.

      Во время выполнения предварительных требований по настройке сервера вы активировали ufw, простой брандмауэр, и разрешили подключения через SSH. Чтобы Caddy мог обслуживать трафик HTTP и HTTPS с вашего сервера, вам нужно будет разрешить прием такого трафика в ufw, запустив следующую команду:

      • sudo ufw allow proto tcp from any to any port 80,443

      Результат будет выглядеть следующим образом:

      Output

      Rule added Rule added (v6)

      Используйте ufw status, чтобы проверить, вступили ли в силу ваши изменения:

      Вывод должен выглядеть так:

      Output

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 80,443/tcp ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) 80,443/tcp (v6) ALLOW Anywhere (v6)

      Установка Caddy завершена, но вам необходимо настроить его для обслуживания любого контента. В следующем шаге вы должны будете настроить Caddy для обслуживания файлов из директории /var/www.

      Шаг 3 — Настройка Caddy

      В этом разделе вы создадите базовую конфигурацию Caddy для обслуживания статичных файлов с вашего сервера.

      Начнем с создания базового файла HTML в /var/www с названием index.html​​​:

      • sudo nano /var/www/index.html

      Добавьте следующие строки:

      /var/www/index.html

      <!DOCTYPE html>
      <html>
      <head>
        <title>Hello from Caddy!</title>
      </head>
      <body>
        <h1 style="font-family: sans-serif">This page is being served via Caddy</h1>
      </body>
      </html>
      

      При отображении в веб-браузере этот файл будет отображать заголовок с текстом This page is being served via Caddy​​​. Сохраните и закройте файл.

      Откройте файл конфигурации Caddyfile, созданный вами ранее:

      • sudo nano /etc/caddy/Caddyfile

      Добавьте следующие строки:

      /etc/caddy/Caddyfile

      :80 {
        root /var/www
        gzip
      }
      

      Это базовая конфигурация Caddy, которая объявляет, что порт 80 вашего сервера должен обслуживать файлы из директории /var/www, а для сокращения времени загрузки страниц со стороны клиента будет использоваться сжатие с помощью gzip.

      В большинстве случаев Caddy позволяет выполнять дальнейшую настройку директив конфигурации. Например, вы можете ограничить сжатие gzip только для файлов HTML и PHP и установить уровень сжатия 6 (1 — самый низкий, а 9 — самый высокий), добавив к директиве фигурные скобки и перечислив судбирективы ниже:

      /etc/caddy/Caddyfile

      :80 {
        root /var/www
        gzip {
            ext .html .htm .php
            level 6
        }
      }
      

      После внесения изменений сохраните и закройте файл.

      У Caddy есть огромное количество различных директив для самых разных случаев использования. Например, директива fastcgi может быть полезной для обеспечения возможностей PHP. Директива markdown может быть использована для автоматической конвертации файлов разметки в HTML, прежде чем обслуживать их, что может быть полезно для создания простого блога.

      Чтобы проверить, что все работает корректно, запустите службу Caddy:

      • sudo systemctl start caddy

      Затем запустите systemctl status, чтобы найти информацию о статусе службы Caddy:

      • sudo systemctl status caddy

      Вы увидите следующее:

      Output

      ● caddy.service - Caddy HTTP/2 web server Loaded: loaded (/etc/systemd/system/caddy.service; disabled; vendor preset: enabled) Active: active (running) since Thu 2020-03-12 11:17:49 UTC; 11s ago Docs: https://caddyserver.com/docs Main PID: 3893 (caddy) Tasks: 7 (limit: 1152) CGroup: /system.slice/caddy.service └─3893 /usr/local/bin/caddy -log stdout -log-timestamps=false -agree=true -conf=/etc/caddy/Caddyfile -root=/var/tmp Mar 12 11:17:49 caddy-article-update systemd[1]: Started Caddy HTTP/2 web server. Mar 12 11:17:49 caddy-article-update caddy[3893]: [INFO] Caddy version: v1.0.5 Mar 12 11:17:49 caddy-article-update caddy[3893]: Activating privacy features... done. Mar 12 11:17:49 caddy-article-update caddy[3893]: Serving HTTP on port 80 Mar 12 11:17:49 caddy-article-update caddy[3893]: http:// Mar 12 11:17:49 caddy-article-update caddy[3893]: [INFO] Serving http:// Mar 12 11:17:49 caddy-article-update caddy[3893]: [INFO][cache:0xc00007a7d0] Started certificate maintenance routine Mar 12 11:17:49 caddy-article-update caddy[3893]: [WARNING] Sending telemetry (attempt 1): Post "https://telemetry.caddyserver.com/v1/update/6a8159c4-3427-42 Mar 12 11:17:57 caddy-article-update caddy[3893]: [WARNING] Sending telemetry (attempt 2): Post "https://telemetry.caddyserver.com/v1/update/6a8159c4-3427-42 ...

      Теперь вы можете перейти на IP-адрес вашего сервера в браузере. Вы увидите следующий пример веб-страницы:

      Сообщение от Caddy

      Теперь вы настроили Caddy для обслуживания статичных файлов с вашего сервера. В следующем шаге вы должны будете расширить функционал Caddy с помощью плагинов.

      Шаг 4 — Использование плагинов

      Плагины предоставляют возможность изменения и расширения поведения Caddy. Обычно они предлагают дополнительные директивы конфигурации в соответствии с вашим вариантом использования. В этом разделе вы должны будете добавить и использовать плагины, установив плагин minify, который удаляет лишние пробелы и вычищает код, отправляемый клиенту, дополнительно снижая размер и время загрузки.

      Репозиторий плагина minify на GitHub — hacdias/caddy-minify.

      Перейдите в директорию с исходным кодом, который вы создали в шаге 1:

      Для добавления плагина в Caddy вам потребуется импортировать его в файл caddy.go​​​, который вы использовали при сборке Caddy. Откройте файл caddy.go для редактирования:

      Импортируйте плагин minify, добавив выделенную строку:

      ~/caddy/caddy.go

      package main
      
      import (
          "github.com/caddyserver/caddy/caddy/caddymain"
      
          _ "github.com/hacdias/caddy-minify"
      )
      
      func main() {
          // caddymain.EnableTelemetry = false
          caddymain.Run()
      }
      

      Сохраните и закройте файл.

      Некоторым плагинам может потребоваться несколько небольших изменений конфигурации, поэтому обязательно ознакомьтесь с документацией плагинов, которые вы устанавливаете. Вы можете найти список популярных плагинов в левой панели документации Caddy в разделе Плагины.

      Каждый раз при добавлении нового плагина необходимо выполнять повторную сборку Caddy. Это объясняется тем, что Go — это компилируемый язык программирования, то есть исходный код преобразуется в машинный код перед выполнением. Изменения, внесенные вами в определение импорта, изменили исходный код, но они не вступят в силу, пока бинарный файл не будет скомпилирован.

      Используйте команду go install для компиляции Caddy:

      После завершения необходимо переместить сгенерированный бинарный файл в /usr/local/bin​​​ и настроить разрешения для бинарного файла, как вы уже делали это ранее. Вы должны выполнять эти шаги каждый раз при выполнении пересборки Caddy, чтобы гарантировать функциональность и безопасность:

      • sudo mv $GOPATH/bin/caddy /usr/local/bin/
      • sudo chown root:root /usr/local/bin/caddy
      • sudo chmod 755 /usr/local/bin/caddy
      • sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/caddy

      Для начала использования плагина minify вам потребуется добавить директиву minify в Caddyfile. Откройте его для редактирования:

      • sudo nano /etc/caddy/Caddyfile

      Активируйте плагин, добавив следующую строку в блок конфигурации:

      /etc/caddy/Caddyfile

      :80 {
        root /var/www
        gzip
        minify
      }
      

      Перезапустите ваш сервер с помощью systemctl:

      • sudo systemctl restart caddy

      Теперь Caddy запущен и будет сжимать любые файлы, которые он обслуживает, включая файл index.html, созданный вами ранее. Вы можете наблюдать за «минимизацией» в работе, запросив содержимое вашего домена с помощью curl:

      Вы должны увидеть следующий вывод: Обратите внимание, что все ненужные пробелы были удалены, что подтверждает, что плагин minify работает.

      Output

      <!doctype html><title>Hello from Caddy!</title><h1 style=font-family:sans-serif>This page is being served via Caddy</h1>

      На этом шаге вы узнали, как расширить функционал Caddy с помощью плагинов. Далее вы должны будете активировать HTTPS, установив плагин tls.dns.digitalocean.

      Шаг 5 — Активация автоматического предоставления TLS с помощью Let’s Encrypt

      В этом разделе вы должны будете активировать автоматическое предоставление и обновление сертификата Let’s Encrypt, используя записи TXT DNS для верификации.

      Для верификации с помощью записей TXT DNS вы должны будете устанавливать плагин для взаимодействия с API DigitalOcean, который называется tls.dns.digitalocean. Процедура установки практически полностью повторяет процедуру установки плагина minify на предыдущем шаге. Для начала откройте caddy.go​​​:

      Добавьте репозиторий плагина в раздел с импортами:

      ~/caddy/caddy.go

      package main
      
      import (
          "github.com/caddyserver/caddy/caddy/caddymain"
      
          _ "github.com/hacdias/caddy-minify"
      
          _ "github.com/caddyserver/dnsproviders/digitalocean"
      )
      
      func main() {
          // caddymain.EnableTelemetry = false
          caddymain.Run()
      }
      

      Воспользуйтесь следующей командой для компиляции файла:

      Убедитесь, что Caddy остановлен с помощью systemctl, после чего завершите установку плагина, скопировав новую сборку Caddy, а затем снова настроив право владения и разрешения:

      • sudo systemctl stop caddy
      • sudo mv $GOPATH/bin/caddy /usr/local/bin/
      • sudo chown root:root /usr/local/bin/caddy
      • sudo chmod 755 /usr/local/bin/caddy
      • sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/caddy

      Далее необходимо настроить Caddy для работы с API DigitalOcean, чтобы настроить записи DNS. Caddy должен получить доступ к этому токену, используемому в качестве пременной среды, для настройки DNS DigitalOcean, поэтому вы должны будете изменить юнит-файл systemd:

      • sudo nano /etc/systemd/system/caddy.service

      Найдите строку, начинающуюся с Environment= в разделе [Service]. Эта строка определяет переменные среды, которые должны быть переданы в процесс Caddy. Добавьте пробел в конце этой строки, затем добавьте переменную DO_AUTH_TOKEN, за которой должен следовать токен, который вы только что создали:

      /etc/systemd/system/caddy.service

      [Service]
      Restart=on-abnormal
      
      ; User and group the process will run as.
      User=www-data
      Group=www-data
      
      ; Letsencrypt-issued certificates will be written to this directory.
      Environment=CADDYPATH=/etc/ssl/caddy DO_AUTH_TOKEN=your_token_here
      

      Сохраните и закройте этот файл, затем перезагрузите демон systemd, как вы делали ранее, чтобы убедиться, что конфигурация обновлена:

      • sudo systemctl daemon-reload

      Запустите systemctl status, чтобы проверить, что изменения конфигурации выполнены корректно:

      • sudo systemctl status caddy

      Вывод должен выглядеть следующим образом:

      Output

      ● caddy.service - Caddy HTTP/2 web server Loaded: loaded (/etc/systemd/system/caddy.service; disabled; vendor preset: enabled) Active: inactive (dead) Docs: https://caddyserver.com/docs ...

      Вам потребуется внести несколько незначительных изменений в ваш файл Caddyfile, поэтому откройте его для редактирования:

      • sudo nano /etc/caddy/Caddyfile

      Добавьте выделенные строки в Caddyfile, убедившись, что вы заменили your_domain на ваш собственный домен (вместо простого указания порта :80), и закомментируйте gzip:

      /etc/caddy/Caddyfile

      your_domain {
        root /var/www
        #gzip
        minify
        tls {
            dns digitalocean
        }
      }
      

      Использование домена, а не только порта для имени хоста, заставит Caddy обслуживать запросы через HTTPS. Директива tls определяет поведение Caddy при использовании TLS, а субдиректива dns указывает, что Caddy должен использовать систему DNS-01, а не HTTP-01.

      Теперь ваш веб-сайт готов к развертыванию. Запустите Caddy с помощью systemctl, а затем активируйте его, чтобы задать запуск при загрузке:

      • sudo systemctl start caddy
      • sudo systemctl enable caddy

      При открытии вашего домена в браузере вы будете автоматически перенаправлены на HTTPS, после чего будет отображаться то же самое сообщение.

      Ваша установка Caddy завершена и защищена, и вы можете продолжить настройку в соответствии с вашим вариантом использования.

      Если вы захотите обновить Caddy при выходе новой версии, вам потребуется обновить файл go.mod (он хранится в той же директории), который выглядит следующим образом:

      ~/caddy/go.mod

      module caddy
      
      go 1.14
      
      require (
              github.com/caddyserver/caddy v1.0.5
              github.com/caddyserver/dnsproviders v0.4.0
              github.com/hacdias/caddy-minify v1.0.2
      )
      

      Выделенная часть — это используемая вами версия Caddy. Когда новая версия появится на Github (см. страницу с тегами версии), вы можете заменить существующую версию в go.mod на новую, а затем скомпилировать Caddy согласно инструкциям из первых двух шагов. Вы можете сделать то же самое для всех импортируемых плагинов.

      Заключение

      Теперь у вас есть установленная служба Caddy, настроенная на вашем сервере и обслуживающая статичные страницы на желаемом домене, защиту которого обеспечивают TLS-сертификаты Let’s Encrypt.

      Следующим шагом будет разработка способа получения уведомлений при выходе новых версий Caddy. Например, вы можете использовать фид Atom для релизов Caddy или специальную службу, например dependencies.io.

      Дополнительную информацию о настройке Caddy см. в документации Caddy.



      Source link