Ubuntu Club. Переезд wordpress на https


Бесплатный переезд Wordpress-блога на SSL

Бесплатный переезд Wordpress-блога на SSL

Инструкция по переезду сайта с HTTP на HTTPS с помощью бесплатного сертификата от известной удостоверяющей организации «Let’s Encrypt». Подойдет для любого сайта, использующего сервер Nginx на Ubuntu, но особенно – для сайта на Wordpress.

1. Подготовка к установке

Необходимо заменить все абсолютные ссылки, ведущие на медиа-контент с http:// в начале адреса, на относительные или универсальные.

Например заменитьhttp://ubuntuclub.org/content/images/2015/Jul/race.jpgна/content/images/2015/Jul/race.jpgилиhttp://ubuntuclub.org/content/images/2015/Jul/race.jpgна//ubuntuclub.org/content/images/2015/Jul/race.jpg

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

Аналогично нужно поступить со всеми скриптами и стилевыми файлами.

Например заменить:<script src="http://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>на<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>или на<script src="//ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>

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

2. Установка SSL-сертификата

Установка скрипта генерации сертификата Certbot

cd ~ git clone https://github.com/certbot/certbot sudo mv certbot /usr/share/

Если у вас еще не установлен менеджер пакетов git, то предварительно запустите

sudo apt-get install git

Подготовка Nginx к генерации сертификатов

Добавьте правило в секцию server конфигурации вашего сайта, позволяющее скрипту certbot проверять ваш сайт

server { ... location /.well-known { root /usr/share/nginx/html; } ... }

Вместо /usr/share/nginx/html можно указать другой путь, куда certbot сможет складывать свои временные файлы проверки.

Перезагрузите Nginx

sudo service nginx restart

Генерация сертификатов

Запустите проверку возможности выпуска сертификата

sudo /usr/share/certbot/certbot-auto certonly --dry-run --webroot --agree-tos --email email@вашсайт.ru -w /usr/share/nginx/html -d вашсайт.ru -d www.вашсайт.ru

Где email@вашсайт.ru – ваш email, по которому Letsencrypt.org сможет связываться с вами (необязательный параметр) и /usr/share/nginx/html – путь, в котором certbot будет создавать каталог .well-known для проверки и выпуска сертификата.

Если проверка прошла успешно, запустите первичный выпуск сертификата

sudo /usr/share/certbot/certbot-auto certonly --webroot --agree-tos --email email@вашсайт.ru -w /usr/share/nginx/html -d вашсайт.ru -d www.вашсайт.ru

При успешной проверке и генерации ваш сертификат будет лежать в каталоге /etc/letsencrypt/live/вашсайт.ru.

Подключение сертификатов

Осталось указать пути до сертификатов в секции server конфигурации вашего сайта в Nginx

server { listen 443 ssl; server_name вашсайт.ru www.вашсайт.ru; ... ssl on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers RC4:HIGH:!aNULL:!MD5:!kEDH; ssl_session_cache shared:SSL:10m; ssl_prefer_server_ciphers on; ssl_certificate /etc/letsencrypt/live/вашсайт.ru/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/вашсайт.ru/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/вашсайт.ru/chain.pem; ... }

После перезагрузки Nginx страницы сайта за https:// получат заветный зеленый замочек в браузере валидного сертификата.

Продление сертификатов

Сертификаты Letsencrypt.org выдаются сроком на три месяца, поэтому нужно добавить в crontab команду обновления и продления сертификата.Открываем настройки системного крона

sudo nano /etc/crontab

и добавляем команду, запускающую каждый первый день месяца обновление сертификата

0 10 1 * * root /usr/share/certbot/certbot-auto renew > /dev/null 2>&1

3. Переезд Wordpress на HTTPS

Используйте нижеприведенный конфиг для Wordpress на Nginx+PHP-FPM, который принудительно открывает все страницы блога по https, используя подготовленные сертификаты Letsencrypt.org

sudo nano /etc/nginx/sites-available/вашсайт.ru

Код конфига

server { listen 80; server_name вашсайт.ru www.вашсайт.ru; access_log /usr/share/nginx/logs/nginx.access.log; error_log /usr/share/nginx/logs/nginx.error.log info; if ($request_method !~ ^(GET|HEAD|POST)$ ) { return 444; } location /.well-known { root /usr/share/nginx/html; } location / { return 301 https://$server_name$request_uri; } } server { listen 443 ssl; server_name вашсайт.ru www.вашсайт.ru; ssl on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers RC4:HIGH:!aNULL:!MD5:!kEDH; ssl_session_cache shared:SSL:10m; ssl_prefer_server_ciphers on; ssl_certificate /etc/letsencrypt/live/вашсайт.ru/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/вашсайт.ru/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/вашсайт.ru/chain.pem; root /usr/share/nginx/html; index index.php; client_max_body_size 1000M; gzip_vary on; access_log /usr/share/nginx/logs/nginx.ssl.access.log; error_log /usr/share/nginx/logs/nginx.ssl.error.log info; if ($request_method !~ ^(GET|HEAD|POST)$ ) { return 444; } if ($server_name ~* www\.(.*)) { set $host_without_www $1; rewrite ^(.*)$ http://$host_without_www$1 permanent; } location / { try_files $uri $uri/ /index.php; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param HTTPS on; fastcgi_split_path_info ^(.+\.php)(/.+)$; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } location ~ /\. { deny all; } location ~* ^.+.(js|css|png|jpg|jpeg|gif|ico)$ { access_log off; expires max; } location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } }

После этого еще раз перезагрузите Nginx и добавьте HTTPS-версию сайта в Яндекс.Вебмастер и Google Webmaster Tools.

ubuntuclub.org

Переезд сайта на https для Wordpress, последовательность

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

Смешанный контент

У меня тоже после переезда на https в строке браузера появилось не защищенное соединение, а предупреждающий значок о том, что соединение защищено не до конца. Если нажать на него курсором, вам покажут текст — «Часть этой страницы (это может быть конкретное изображение или изображения) не защищены».

Как устранить ошибки?

Конечно, после внесенных выше изменений, WordPress автоматически включает перенаправление со старых адресов на новые. Но, наверняка, у многих найдутся ссылки на изображения или проставленные вручную внутренние ссылки. И тогда, чтобы найти и устранить эти ошибки придется самостоятельно редактировать страницы. В 90% случаев, смешанный контекст это именно это.

Что помогло еще

Итак, по порядку. Идем на сайт сервиса по сканированию незащищенного контента: поиск небезопасных изображений, скриптов и CSS-файлов.

https://www.jitbit.com/sslcheck/

Запускаем проверку, в результате сканирования получаем строчки с незащищёнными адресами.

После этого устанавливаем плагин Search Regex для замены ссылок.

Подставляем найденную ссылку в верхнее поле, нажимаем «Найти», находим, после этого подставляем правильный адрес во вторую строчку и нажимаем «Заменить». Смотрим на результат замены и нажимаем обязательно «Заменить и Сохранить». Таким образом изменяем адреса всех найденных изображений.

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

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

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

И последнее. Проверьте все остальные страницы сайта на защищенное соединение. Вы можете также обнаружить смешанный контент и проставленные вручную ссылки с незащищенными адресами, которые необходимо будет исправить.

seorange.ru

Переезд Wordpress сайта на https или как настроить SSL в nginx на A+ : Отзыв

Настала пора переезжать на новый и безопасный протокол HTTPS. Большинство статей об установке SSL сертификатов и интеграции процесса переезда с Яндексом как оказалось устарели, поэтому пишу свою.

В Яндексе переезд проходит плавно, проседания трафика не замечено, ТИЦ остался тем же и на старом и на новом сайте, за две недели почти все страницы были переиндексированы со старого сайта на новый, а еще через 3 дня Вебмастер показал, что сайты склеились.

Если к страницам сайта были подключены комментарии Facebook, то они в результате переезда будут потеряны, так как формально страница будет иметь новый адрес. Комментарии ВКонтакте при этом не учитывают протокол и остаются на месте.

Порядок действий по переезду на https такой:

1. Делаем бэкап своим любимым способом:— базы данных сайта— файлов сайта— настроек nginx

2. Рекомендуется обновить все пакеты на сервере. У меня на сервере стоит Centos 7 для неё команда такая:

yum update

3. Разрешим на постоянной основе соединение на SSL порт 443/tcp и перегрузим правила

firewall-cmd --permanent --zone=public --add-port=443/tcp firewall-cmd --reload

4. Убедимся, что SSL порт 443 открыт:

firewall-cmd --zone=public --list-ports

5. Заходим на сайт https://certbot.eff.org/ Это сайт организации Let’s Encrypt, которая выдаёт SSL-сертификаты бесплатно на 90 дней с возможностью их дальнейшего автоматического продления — так чтобы один раз настроил и забыл. Выбираем там в выпадающих списках nginx и Centos/RHEL 7 — в результате чего внизу появится инструкция на английском.

6. Подключаем репозиторий EPEL (если не подключен, у меня уже подключен) и после этого устанавливаем утилиты

yum -y install yum-utils yum-config-manager --enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optional

7. Устанавливаем сам Certbot — клиент для обновления сертификатов

yum install certbot-nginx

8. Запускаем первоначальную настройку Certbot

certbot --nginx

Запустится программа, которая выдаст несколько диалогов:8.1. вводим свой email для регистрации на Let’s Encrypt8.2. читаем и соглашаемся с условиями использования8.3. соглашаемся или отказываемся от почтовой рассылки8.4. программа выведет все домены настроенные в nginx — чтобы установить сертификаты для всех доменов сразу, можно просто нажать Enter или ввести номера необходимых доменов через пробел, например для site.ru и www.site.ru8.5. программа спросит вносить ли изменения в конфиги nginx, чтобы перенаправить весь трафик с http на https — соглашаемся, то есть жмём 2 и Enter

9. Перезагружаем nginx

systemctl restart nginx

С этого момента сайты начинают работать на HTTPS. Если открыть сайт в браузере http://site.ru, то он будет перенаправлен на https://site.ru

В конфигурационных файлах доменов в nginx можно увидеть, какие изменения Certbot внёс в них. Я немного подправил их для удобочитаемости в итоге получилось следующее:

# здесь 301-й редирект с https://www.site.ru на https://site.ru server { listen 443 ssl; server_name www.site.ru; rewrite ^ https://site.ru$request_uri? permanent; ssl_certificate /etc/letsencrypt/live/site.ru/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/site.ru/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot } # здесь 301-й редирект с http://www.site.ru на https://site.ru server { listen www.site.ru:80; server_name www.site.ru; rewrite ^ https://site.ru$request_uri? permanent; } # здесь 301-й редирект с http://site.ru на https://site.ru server { listen site.ru:80; server_name site.ru; rewrite ^ https://site.ru$request_uri? permanent; } # здесь основная конфигурация https://site.ru server { listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/site.ru/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/site.ru/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot server_name site.ru; # здесь идут дальнейшие директивы }

Если на сервере несколько сайтов, то для всех кроме одного можно из бэкапа вернуть конфиги nginx на время пока делаются дальнейшие настройки по переезду. И далее настраивать HTTPS только для одного сайта, а остальные пока будут доступны по HTTP. Кстати, несколько https-сайтов на одном сервере могут спокойно работать через один ip-адрес благодаря технологии Server Name Indication (SNI), которую поддерживает nginx и все современные браузеры.

10. Вносим дополнения в файл /etc/letsencrypt/options-ssl-nginx.conf который подключается в конфигурации nginx выше. Они нам позволят увеличить SSL-рейтинг сайта с A до A+

# эти директивы задал сам Certbot ssl_session_cache shared:le_nginx_SSL:10m; # здесь я увеличил значение с 1 до 10 ssl_session_timeout 1440m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers "ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS"; # эти директивы я добавил ssl on; add_header Strict-Transport-Security "max-age=31536000;"; resolver 8.8.8.8 8.8.4.4 valid=300s; ssl_stapling on; ssl_stapling_verify on; resolver_timeout 10s;

И вновь перезагружаем nginx. Проверить SSL-рейтинг сайта можно здесь: https://www.ssllabs.com/ssltest/ — там в поле вписать свой домен.

11. Заменим в исходных кодах сайта конструкцию http://site.ru на https://site.ru, где site.ru — наш домен. Для этого можно открыть файл бэкапа базы данных сайта в любимом текстовом редакторе и сделать автозамену http://site.ru на https://site.ru. Затем необходимо импортировать измененный бэкап на сервер БД. После этой манипуляции в WordPress может слететь:— настройка вывода меню, которая настраивается во Внешний вид — Меню — Управление областями— фоновое изображение сайта, если оно было назначено средствами WordPress — настраивается во Внешний вид — Фон — Фоновое изображение— текстовые виджеты в сайдбаре и подвале — они теряются бесследно, поэтому перед импортом изменённой базы данных их лучше где-то сохранить, чтобы потом можно было восстановить как было

12. Аналогично поступаем со всеми файлами сайта, в файлах с расширениями html, php, js, css ищем и заменяем все включения http://site.ru на https://site.ru

13. Заходим в админку WordPress в раздел «Настройки» — «Общие» и проверяем, что там в двух полях указано https://site.ru

14. Если в WordPress используется какой-то плагин для автоматической генерации карты сайта, то перегенерируем карту сайта, чтобы ссылки внутри нее стали с протоколом https.

15. В файле robots.txt нашего сайта в директивах host и sitemap меняем http на https вот так:

Sitemap: https://site.ru/sitemap.xml Host: https://site.ru

16. Добавим до тега </head> на страницах сайта нижеследующий код. Он необходим для правильной передачи реферрера сторонним сайтам.

<meta name="referrer" content="origin">

17. Если к сайту подключены скрипты сторонних сервисов:— ВКонтакте: https://vk.com/apps?act=manage в Настройках приложения для сайта меняем адрес сайта на https— Facebook https://developers.facebook.com/apps/ в Настройках приложения для сайта меняем адрес сайта на https— социальные кнопки Share42 http://share42.com/ru — перегенерировать код и заменить его на сайте— комментарии ВКонтакте для сайта https://vk.com/dev/Comments — перегенерировать код и заменить на сайте— комментарии FaceBook для сайта https://developers.facebook.com/docs/plugins/comments/?locale=ru_RU — перегенерировать код и заменить на сайте— виджет группы Одноклассники для сайта https://apiok.ru/ext/group — перегенерировать код и заменить на сайте— виджет группы Facebook для сайта https://developers.facebook.com/docs/plugins/page-plugin — перегенерировать код и заменить на сайте— виджет группы ВКонтакте для сайта https://vk.com/dev/Community — перегенерировать код и заменить на сайте

18. Запустим в Вебмастере Mail.ru переезд сайта на https https://webmaster.mail.ru— зайти в Настройки сайта и отметить галочку Показывать «https»

19. Запустим в Вебмастере Bing переезд сайта на https https://www.bing.com/webmaster/home/mysites— Заходим в Средства диагностики — Перемещение сайта и выбираем:

#!/bin/sh date_time=`date +"%Y-%m-%d_%H-%M"` le_dir='/mnt/disk_backup/letsencrypt' tar -czvf $le_dir/le_$date_time.tar.gz -C /etc/ letsencrypt /usr/bin/find $le_dir -type f -mtime +30 -exec rm {} \; #хранить файлы не старше 30 дней

23. Настроим автопродление сертификатов. На сайте производителя рекомендуется запускать обновление сертификатов дважды в сутки, при этом обновятся сертификаты не ранее, чем за 30 дней до окончания срока своего действия, который составляет 90 дней. Добавим в cron строки:

0 0 * * * root /usr/bin/certbot renew --allow-subset-of-names --post-hook 'nginx -s reload' 1 12 * * * root /usr/bin/certbot renew --allow-subset-of-names --post-hook 'nginx -s reload' # запустит команду в 00:00 и в 12:01 # renew - обновит сертификаты # --allow-subset-of-names - обновит сертификаты даже если один из доменов был удалён с сервера # --post-hook 'nginx -s reload' - перезагрузит nginx после обновления сертификатов 0 2 * * * root /backup/le.sh >/dev/null 2>&1 # запустит скрипт бэкапа папки letsencrypt в 02:00 и отработает тихо без лишних сообщений

После каждого запуска обновления сертификатов в каталоге /var/log/letsencrypt создаётся log-файл, количество которых ограничено 100 штуками и не регулируется.

24. Перезагрузим cron

systemctl restart crond.service
P.S.

Со временем нам может понадобиться получить SSL-сертификат для нового домена, для этого:

1. Вновь запускаем настройку Certbot

certbot --nginx

Запустится программа, которая задаст два вопроса:1.1. программа выведет все домены настроенные в nginx — здесь вводим через пробел номера новых доменов newdomain.ru и www.newdomain.ru и нажимаем Enter1.2. программа спросит вносить ли изменения в конфиги nginx, чтобы перенаправить весь трафик с http на https — соглашаемся

2. В конфигурационном файле домена в nginx можно увидеть, какие изменения Certbot внёс в него. Можно подправить его для удобочитаемости аналогично тому, как я сделал это выше в пункте 9. При этом следует обратить внимание на директивы ssl_certificate и ssl_certificate_key — пути до ключей в них будут отличаться от путей для ранее добавленных доменов.

3. Перезагружаем nginx

systemctl restart nginx

С этого момента сайт работает на HTTPS. Если открыть сайт в браузере http://www.newdomain.ru, то он будет перенаправлен на https://newdomain.ru

Обновление сертификата для нового домена будет происходить согласно ранее сделанным настройкам автопродления сертификатов в пункте 23.

P.P.S.

Посмотреть какие SSL-сертификаты установлены в системе и сколько дней они ещё действительны можно такой командой:

certbot certificates

А изменить состав доменов, содержащихся в сертификате или даже заменить домены полностью можно такой командой:

certbot certonly --cert-name site.ru -d site.com,www.site.com     Метки: certbot, facebook, google, https, letsencrypt, nginx, ssl, вконтакте, домен, настройка, переезд, сайт, сервер, сертификат, файл, яндекс

Поделиться статьей:  

horoshiy-otzyv.ru


Смотрите также

Prostoy-Site | Все права защищены © 2018 | Карта сайта