Как да добавите 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):