хуйу нас не матерятся
Если Вы ещё не в курсе, гугл уже давно https сайты ранжирует выше, чем http. А в ближайших планах он начнёт помечать все http сайты как небезопасные. К счастью "Let's Encrypt" предоставляет бесплатные сертификаты.
Первое что нужно сделать это ознакомиться с инструкцией: https://letsencrypt.org/getting-started/
Из которой мы узнаём что нам нужны Certbot и shh доступ к серверу. На этом месте я передаю пламенный привет всем любителям shared хостингов и конструкторов сайтов. 5$ за собственный сервер это так дорого, Вы же не лохи, у Вас же серьёзный бизнес.
Если у Вас нет ssh доступа к серверу, или Вы не знаете что это, не читайте дальше.
Заходим на страницу Certbot: https://certbot.eff.org/#ubuntuxenial-nginx и читаем её внимательно.
Действуем по инструкции, устанавливаем letsencrypt:
sudo apt-get install letsencrypt
Останавливаем nginx:
sudo service nginx stop
Сервер можно не останавливать, но тогда придётся сперва его переконфигурировать, чтобы доступ к папке /.well-known был всегда открыт.
Теперь получаем сам сертификат:
letsencrypt certonly --standalone -d example.com -d www.example.com
В процессе Вас попросят согласиться с условиями использования:
и ввести email для связи:
Файлы сертификата будут лежать в папке: /etc/letsencrypt/archive/_ВАШ_ДОМЕН, а в папке /etc/letsencrypt/live/_ВАШ_ДОМЕН будут лежать симлинки, которые нам потребуются позднее. Сертификаты, обязательно, забэкапте.
Открываем конфигурационный файл Вашего веб-сайта, это будет что-то вроде: /etc/nginx/sites-available/default
Всё где есть упоминание 80 порта комментируем, или удаляем, например:
listen 80;
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
И все подобные строки. Вместо них добавляем:
listen 443 ssl;
server_name _ВАШ_ДОМЕН_ www._ВАШ_ДОМЕН_;
Этим мы сообщили серверу, что слушать нужно ssl порт, а не http. Далее добавляем поддержку сертификата:
ssl_certificate /etc/letsencrypt/live/_ВАШ_ДОМЕН_/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/_ВАШ_ДОМЕН_/privkey.pem;
Запускаем nginx:
service nginx start
И проверяем. Теперь адрес http://ВАШ_ДОМЕН не должен открываться, зато адрес https://ВАШ_ДОМЕН должен работать.
Фиксим, в этот же конф. файл добавляем секцию:
>
server {
listen 80;
server_name _ВАШ_ДОМЕН_ www._ВАШ_ДОМЕН_;
return 301 https://$host$request_uri;
}
Перезапускаем nginx:
service nginx restart
Опять проверяем адрес: http://ВАШ_ДОМЕН сейчас он должен автоматически редиректиться на https адрес.
Теоретически, теперь у нас всё готово. Но мы можем ещё улучшить шифрование. Давайте cгенерируем сильную группу Дефи-Хелмана:
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
И допишем конфиг nginx:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security max-age=15768000;
# Итоговый конфиг для nginx с https:
server {
listen 80;
server_name _ВАШ_ДОМЕН_ www._ВАШ_ДОМЕН_;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name _ВАШ_ДОМЕН_ www._ВАШ_ДОМЕН_;
ssl_certificate /etc/letsencrypt/live/_ВАШ_ДОМЕН_/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/_ВАШ_ДОМЕН_/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security max-age=15768000;
root /var/www/_ВАШ_ДОМЕН_;
index index.html index.htm index.php;
proxy_read_timeout 20;
proxy_send_timeout 20;
gzip on;
gzip_disable "msie6";
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
location ~ /. {
deny all;
}
location ~* /(?:uploads|files)/.*.php$ {
deny all;
}
location = /xmlrpc.php {
deny all;
access_log off;
log_not_found off;
}
location ~* ^.+.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
access_log off;
log_not_found off;
}
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
}
Ага, автор частенько любит позадротить. И почти все мои инструкции- это просто напоминалка самому себе, как и что я делал.
автор забыл указать, что это все нужно делать только если вам нечем заняться и хочется позадротствовать. На самом деле сербот все настройки делает автоматически и все что нужно это: sudo certbot --nginx
Полная инструкция перевода - перевел так сервер в https на котором крутилось 3 сайта: Подготовляшка к установке софта: sudo apt-get update sudo apt-get install software-properties-common sudo add-apt-repository universe sudo add-apt-repository ppa:certbot/certbot sudo apt-get update
Сама установка софта: sudo apt-get install certbot python-certbot-nginx Перевод в https на автомате (установщик сам создаст сертификаты, сам их засунет в нужные папки, сам их в расписание впихнет, вы ничего не делаете): sudo certbot --nginx готово. делал все на убунте