Как да добавите HTTPS към nginx на Ubuntu Server (и по-горе) @ 900913 - Нашето цифрово всичко

Наличието на HTTPS на уебсайт отдавна се смята за лукс. Има много причини за това: собствениците на блогове и "визитни картички" не са се къпали специално за сигурност, а самият сертификат струва пари (около 100 долара на година).

Но напоследък има все по-голям натиск върху собствениците на уеб ресурси:

  • Google обеща да повиши сайтове с HTTPS в издаването;
  • Браузърите псуват страници с полета за парола без HTTPS;
  • В крайна сметка сертификатите станаха безплатни.

Защо се нуждаете от сертификат за сайт?

Let's Encrypt предлага безплатни сертификати като „Този ​​сертификат е издаден за този домейн“. Тоест всъщност гарантира само, че никой жокер не е променил сайта, което означава, че данните се изпращат безопасно. Повечето сайтове на такава защита - зад очите!

Настройване на Let's Encrypt с nginx на Ubuntu

Този метод е тестван няколко пъти на PHP сайтове (включително wordpress) и Django сайтове (чрез uwsgi).

Първо инсталирайте необходимите пакети за добавяне на ppa хранилища:

Нека добавим програмата certbot, която ще актуализира нашите сертификати. Отбелязвам, че Let's Encrypt издава сертификати за 2 месеца, така че трябва да се актуализира автоматично - това ще направи certbot.

Е, нека инсталираме самия certbot - все пак неговото хранилище е добавено!

След това трябва да добавим пътя, по който услугата Let's Encrypt ще провери дали сме.

Много ръководства съветват да добавите местоположение /.well-known, но certbot и letsencrypt използват /.well-known/acme-challenge. В това отношение имах известни затруднения, когато го настройвах за Django услуга.

Презаредете конфигурациите на nginx:

И сега вече можем да започнем да генерираме сертификати:

В този момент certbot ще постави специални файлове в /path/to/static, които ще бъдат достъпни на http://domain-name.ru/.well-know/acme-challenge. Сървърът let's encrypt отива на този url и проверява дали сме ние, никой не е заменил нашия сайт. След като проверката приключи, certbot ще постави подписаните от letsencrypt сертификати в директорията /etc/letsrncrypt/live/domain-name.ru (ще ги използваме).

След което можем да активираме https:

И прочетете отново конфигурацията на nginx отново:

Сега проверяваме дали https работи (отиваме на сайта чрез https).

Е, за да използвате винаги https, настройте пренасочване от http към https:

Прочетете още веднъж конфигурацията на nginx:

Сега всичко трябва да работи.

Погрижете се за безопасността на вашите потребители - сега е и "безплатно".

Отговори на въпроси от читатели

В: Правилно ли разбирам, че ботът certbot ще влиза в услугата Let's Encrypt и ще подновява сертификатите на всеки 2 месеца?

О: Съвременните версии на certbot добавят запис в crontab за автоматични актуализации.

Ако не искате да разчитате на някой друг да се погрижи за актуализацията, можете да добавите /usr/bin/letsencrypt renew && nginx -s презареждане. Веднъж на ден/седмично е добре. Например, от потребител, който има права да letsencrypt renew и nginx -s reload, изпълнете:

– всеки ден в полунощ по време на сървъра.

Въпрос: Трябва ли да се създаде тази /.well-known/acme-challenge/ директория или не?

О: Описаното местоположение съдържа основната директива. Той сочи къмдиректорията, към която ще сочи този URL адрес. Посочваме същатадиректория на certbot като --webroot-path - той сам ще я създаде и ще генерира необходимите файловеза да провери дали това наистина е домейнът, за който се твърди, че е.

Q: Добре, всичко работи - но има един нюанс - чрез http показва нормален работещ сайт, но си струва да го посетите през https - издава nginx пънче - сякаш е инсталиран бла бла бла

О: Всички местоположения трябва да бъдат дублирани в сървър с https (този с listen 443), защото това е отделен сървър, който се намира на отделен порт.

Има опция да обвиете всичко това с proxy_pass на http сървър, но обикновено бих посъветвал всички местоположения и директиви a la "gzip on" и т.н. да бъдат прехвърлени на https сървър. След това - проверете и пренасочете самия http към https. Например така:

Като цяло, цялата конфигурация на сайта може да изглежда така (в примера, приложение uwsgi):