В данном мануале – о том, как разместить сайт используя Cloudflare и Nginx на хостинге, работающем под управлением Ubuntu Server 20.04.
Cloudflare – это сервис, который размещается между клиентом и веб-сервером. Сервис выступает в качестве обратного прокси и работая в сочетании с веб-сервером Nginx, служба предоставляет сеть доставки контента (CDN), выступает в качестве DNS, а также, предоставляет набор инструментария для защиты от DDoS. Cloudflare – это ещё один метод организации доступа к домену с использованием более безопасного протокола https.
Создание сертификата
Для того, чтобы защитить соединение между вашим веб-сервером и серверами Cloudflare необходимо установить бесплатный TLS-сертификат на ваш Nginx. Эти сертификаты создаются при помощи Центра Сетификации Cloudflare Origin CA.
В качестве первого шага зарегистрируйтесь на Cloudflare, или авторизуйтесь на Cloudflare, если учётная запись для входа на сервис у вас уже есть. Далее, нужно выбрать ваш домен и переключиться во вкладку Origin Server раздела SSL/TLS. Там будет доступна кнопка Create Certificate, нажмите на неё:
Оставьте все опции по умолчанию и нажмите Next:
В открывшемся далее окне система покажет вам сгенерированные тексты сертификата и приватного ключа. Прежде чем нажать ОК, скопируйте сертификат и секретный ключ. После нажатия кнопки ОК, содержимое ключей отображаться больше не будет.
Далее, на своём сервере перейдите в директорию /etc/ssl/
и откройте файл cert.perm
:
$ cd /etc/ssl
$ sudo nano cert.pem
В этот файл вставьте содержимое сертификата, который был создан на CloudFlare. После чего откройте файл key.pem
$ sudo nano key.pem
и вставьте в него содержимое секретного ключа.
В случае, если при копировании содержимого сертификата и приватного ключа в cert.perm
и key.pem
в них добавятся пустые строки, эти строки следует удалить. Иначе, ваш веб-сервер будет воспринимать такие ключи как недействительные.
Установка сертификата в Nginx
Теперь нужно внести изменения в конфигурацию вашего веб-сервера для защиты соединения между Cloudflare и вашим VPS.
Для начала произвести некоторые настройки на интерфейсе брандмауэра UFW. Чтобы посмотреть его статус, наберите:
$ sudo ufw status
Если в списке разрешённых сервисов нет службы Nginx, добавьте в UFW профиль Nginx. После чего перезапустите брандмауэр и убедитесь, что внесённые изменения разрешают доступ сервису Nginx:
$ sudo ufw allow 'Nginx Full'
$ sudo ufw reload
$ sudo ufw status
Далее, удалите директорию сайта, созданного по умолчанию на веб-сервере, если вы его не удалили ранее:
$ sudo rm /etc/nginx/sites-enabled/default
Перейдите в каталог вашего домена и откройте файл его конфигурации. Вместо your-site.com
используйте имя сайта, для которого вы производите настройки:
$ cd /etc/nginx/sites-available
$ sudo nano your-site.com
В этот файл нужно внести следующие изменения:
- Открыть на прослушивание порт 80 с перенаправлением запросов на https.
- Открыть на прослушивание порт 443 с поддержкой сертификата и приватного ключа.
server
{
listen 80;
listen [::]:80;
server_name your-site.com www.your-site.com;
return 302 https://$server_name$request_uri;
}
server
{
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate /etc/ssl/cert.pem;
ssl_certificate_key /etc/ssl/key.pem;
server_name your-site.com www.your-site.com;
root /var/www/your-site.com/html;
index index.html index.htm index.nginx-debian.html;
server_name your-site.com www.your-site.com;
location /
{
try_files $uri $uri/ =404;
}
}
Перед выходом сохраните внесённые изменения (если вы используете nano, нажмите Ctrl-X,
затем Y
и Enter
).
Протестируйте Nginx на корректность синтаксиса:
$ sudo nginx -t
Если тест не показал ошибок, Nginx нужно перезапустить:
$ sudo systemctl restart nginx
Теперь перейдите на сайт Cloudflare и во вкладке Overview раздела SSL/TSL установите режим шифрования в значение Full (strict):
После применения этих настроек ваш домен должен быть доступен по своему адресу, но с использованием протокола https:
Authenticated Origin Pulls
На данном этом этапе, необходимо произвести настройку аутентификации TLS-клиента. Это нужно вашему веб-серверу для подтверждения своего взаимодействия с Cloudflare.
Загрузите сертификат Cloudflare по прямой ссылке, перейдите на вашем VPS в директорию /etc/ssl/
и создайте в ней файл cloudflare.crt
:
$ cd /etc/ssl
$ sudo nano cloudflare.crt
Вставьте в этот файл содержимое сертификата и закройте файл, сохранив внесённые в него изменения.
Далее, перейдите в каталог вашего домена и откройте для редактирования его конфигурационный файл:
$ cd /etc/nginx/sites-available
$ sudo nano your-site.com
Добавьте в него две строки, относящиеся к SSL-сертификации:
server
{
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;
server_name your-site.com www.your-site.com;
root /var/www/your-site.com/html;
index index.html index.htm index.nginx-debian.html;
server_name your-site.com www.your-site.com;
location /
{
try_files $uri $uri/ =404;
}
}
Перед выходом необходимо сохранить внесённые в файл изменения, после чего, протестируйте Nginx на наличие синитаксических ошибок:
$ sudo nginx -t
Если проверка не показала ошибок, ещё раз перезапустите службу:
$ sudo systemctl restart nginx
Теперь на сайте Cloudflare откройте вкладку Origin Server из раздела SSL/TLS и активируйте флажок Authenticated Origin Pulls:
После этого ваш домен будет доступен с использованием протокола https. Но, если вы попробуете отключить Authenticated Origin Pulls, то при попытке доступа к вашему сайту сервер вернёт ошибку. Это означает, что ваш запрос на доступ не был подписан Центром Сертификации. Для возобновления доступности домена, снова активируйте флаг Authenticated Origin Pulls на сайте Cloudflare.
Таким образом, вы узнали как разместить ваш сайт используя Cloudflare и Nginx на Ubuntu 20.04. Теперь, вы сможете настроить доступ к вашему ресурсу через сертификатом защищённый протокол.