# Let's Encrypt работает без www, но не с www

**URL:** https://meta.discourse.org/t/letsencrypt-working-without-www-not-with-www/139004
**Category:** Support
**Created:** [18.Январь.2020 06:17:47 UTC](https://meta.discourse.org/t/letsencrypt-working-without-www-not-with-www/139004 "2020-01-18T06:17:47Z")
**Posts on this page:** 13
**Page:** 1

<div class="post-metadata">

### Author: ![Jarland](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jarland/32/166904_2.png) [@Jarland](https://meta.discourse.org/u/Jarland)
#### Post date: [18.Январь.2020 06:17:47 UTC](https://meta.discourse.org/t/letsencrypt-working-without-www-not-with-www/139004/1 "2020-01-18T06:17:47Z")

</div>

Надеюсь, кто-нибудь сможет дать совет — я буду вам очень благодарен. Поясню ситуацию.

Я не раз настраивал Discourse на своём домене hostballs[.]com. Каждый раз при посещении www[.]hostballs[.]com происходил корректный перенаправление на hostballs[.]com, поскольку сертификат LetsEncrypt покрывал оба варианта — с www и без. Это, насколько я знаю, стандартное поведение Discourse при использовании его реализации LetsEncrypt.

В настоящее время моя новая установка Discourse настраивает SSL только для версии без www (так как именно этот адрес указан как URL), но не покрывает www. Из-за этого пользователи, переходящие на www[.]hostballs[.]com, не получают перенаправления, а видят ошибку SSL. Учитывая, что стандартное поведение, насколько мне известно, отличается от этого, а установка Discourse слишком строго контролируется, чтобы я просто захотел запустить certbot и всё настроить вручную (разве это не сделает регулярные обновления забавными?), я не уверен, какой путь выбрать.

Пытаясь решить проблему, я закомментировал шаблоны ssl и LE, а также адрес электронной почты для LE в файле app.yml. Затем я удалил директории letsencrypt и ssl из /shared/standalone. Пересобрал сайт без SSL, после чего снова включил эти опции в app.yml и пересобрал его, чтобы сгенерировать новые сертификаты и конфигурации SSL. Хотя это сработало, проблема с www так и не была решена.

Столкнулся ли кто-нибудь ещё с подобной ситуацией и нашёл ли решение?

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [18.Январь.2020 09:02:23 UTC](https://meta.discourse.org/t/letsencrypt-working-without-www-not-with-www/139004/2 "2020-01-18T09:02:23Z")

</div>

Конечно! Это немного дополнительная работа, но всё достаточно просто и является очень распространённым сценарием. См.:

> [@Set up Let’s Encrypt with multiple domains / redirects](https://meta.discourse.org/t/setting-up-let-s-encrypt-with-multiple-domains/56685?u=merefield):
>
> NOTE: @pfaffman says: This page needs to be cleaned up. There is now a new ENV setting that will let you add more hostnames. In your app.yml under your DISCOURSE\_HOSTNAME line (it can go many places but that one makes sense), add DISCOURSE\_HOSTNAME\_ALIASES: domain.com,other.domain.com and early reports suggest that you’ll get valid certs for those domains and that accessing https://domain.com will properly redirect you to your DISCOURSE\_HOSTNAME without a certificate error. If you do that an…

А затем:

> [@(Superseded) Redirect additional domain(s) to your Discourse instance](https://meta.discourse.org/t/redirect-single-multiple-domain-s-to-your-discourse-instance/18492?u=merefield):
>
> warning 2024-04-09 @pfaffman edited this to say that this is no longer necessary, as the current NGINX config in the [standard install](https://meta.discourse.org/t/142537?silent=true) redirects everything to https://HOSTNAME. You can test this by entering your IP address and see that it gets redirected. If you want multiple domains pointed to your server, you probably want them to have valid https certificates. To do that, follow instructions at [Set up Let’s Encrypt with multiple domains / redirects](https://meta.discourse.org/t/set-up-let-s-encrypt-with-multiple-domains-redirects/56685). So you want to redirect domain(s) to yo…

---

<div class="post-metadata">

### Author: ![Stephen](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/stephen/32/95011_2.png) [@Stephen](https://meta.discourse.org/u/Stephen)
#### Post date: [18.Январь.2020 17:00:17 UTC](https://meta.discourse.org/t/letsencrypt-working-without-www-not-with-www/139004/3 "2020-01-18T17:00:17Z")

</div>

Если приведенные выше советы кажутся вам слишком сложными, вы также можете настроить простую DNS-перенаправку. Большинство регистраторов предоставляют эту услугу.

Discourse не может быть опубликован по нескольким URL-адресам: корневая запись (без www) и «A»-запись для www — это разные адреса. Как только вы назначите FQDN для своего сайта, любые дополнительные адреса необходимо обрабатывать с помощью перенаправления.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [18.Январь.2020 18:11:35 UTC](https://meta.discourse.org/t/letsencrypt-working-without-www-not-with-www/139004/4 "2020-01-18T18:11:35Z")

</div>

Если ни один из предложенных вариантов вам не подходит, вы можете использовать `www.example.com` и перенаправлять на сайт с www с помощью [http://forcewww.com/](http://forcewww.com/).

---

<div class="post-metadata">

### Author: ![Jarland](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jarland/32/166904_2.png) [@Jarland](https://meta.discourse.org/u/Jarland)
#### Post date: [18.Январь.2020 23:32:23 UTC](https://meta.discourse.org/t/letsencrypt-working-without-www-not-with-www/139004/5 "2020-01-18T23:32:23Z")

</div>

Спасибо, друзья. Позвольте мне изложить некоторые детали, которые могут помочь кому-то в будущем.

Всё началось с того, что один пользователь сообщил, что посещение www не работает и выдаёт ошибку сертификата. При прямом переходе по ссылке https, которую он предоставил в теме отчёта, я столкнулся с той же проблемой. Раньше при использовании www я не сталкивался с этим, а перенаправлялся на корневой домен без проблем. Это привело меня к выводу, что моя установка после недавней миграции каким-то образом повреждена и не ведёт себя в соответствии с характеристиками по умолчанию новой установки Discourse.

Поэтому я установил свежую копию Discourse на новом домене, чтобы проверить, работает ли www по умолчанию при использовании корневого домена. Я перешёл на домен, затем отредактировал URL в адресной строке и добавил «www.» в начало. Перенаправление на корневой домен прошло без проблем, как я и ожидал. Затем я решил попробовать ещё одну вещь: вручную ввёл «https://» перед ним. После этого возникла та же ошибка сертификата.

Таким образом, то, что могло заставить меня предположить, что настройка сертификата для www является поведением по умолчанию в реализации Let’s Encrypt в Discourse, на самом деле могло быть тем, что мой браузер по умолчанию использовал порт 80, скрывая часть http/https URL при изменении адреса в строке.

По крайней мере, это моя лучшая оценка ситуации на данный момент.

---

<div class="post-metadata">

### Author: ![Stephen](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/stephen/32/95011_2.png) [@Stephen](https://meta.discourse.org/u/Stephen)
#### Post date: [19.Январь.2020 07:07:03 UTC](https://meta.discourse.org/t/letsencrypt-working-without-www-not-with-www/139004/6 "2020-01-19T07:07:03Z")

</div>

Да, любой запрос к IP-адресу вашего сервера на порту 80 будет перенаправлен на фактический FQDN по HTTPS, www не является исключением.

---

<div class="post-metadata">

### Author: ![Jarland](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jarland/32/166904_2.png) [@Jarland](https://meta.discourse.org/u/Jarland)
#### Post date: [19.Январь.2020 08:02:19 UTC](https://meta.discourse.org/t/letsencrypt-working-without-www-not-with-www/139004/7 "2020-01-19T08:02:19Z")

</div>

Самый простой способ для тех, кто использует свой корневой домен и хочет, чтобы www был подписан Let’s Encrypt для корректного перенаправления по HTTPS, без излишнего усложнения и использования другого веб-сервера для управления перенаправлением:

Замените это:

> issue\_cert() {  
> LE\_WORKING\_DIR=“${LETSENCRYPT\_DIR}” $$ENV\_LETSENCRYPT\_DIR/acme.sh --issue $2 -d $$ENV\_DISCOURSE\_HOSTNAME --keylength $1 -w /var/www/discourse/public  
> }

На это:

> issue\_cert() {  
> LE\_WORKING\_DIR=“${LETSENCRYPT\_DIR}” $$ENV\_LETSENCRYPT\_DIR/acme.sh --issue $2 -d $$ENV\_DISCOURSE\_HOSTNAME -d www.$$ENV\_DISCOURSE\_HOSTNAME --keylength $1 -w /var/www/discourse/public  
> }

В файле:  
/var/discourse/templates/web.letsencrypt.ssl.template.yml

Затем, конечно:

> ./var/discourse/launcher rebuild app

---

<div class="post-metadata">

### Author: ![Stephen](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/stephen/32/95011_2.png) [@Stephen](https://meta.discourse.org/u/Stephen)
#### Post date: [19.Январь.2020 08:07:19 UTC](https://meta.discourse.org/t/letsencrypt-working-without-www-not-with-www/139004/8 "2020-01-19T08:07:19Z")

</div>

Это не решение: изменения будут утрачены при обновлении шаблонов, и по одной этой причине такой подход не рекомендуется.

Если вы хотите модифицировать файлы внутри контейнера, используйте хуки в вашем файле app.yml.

---

<div class="post-metadata">

### Author: ![Jarland](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jarland/32/166904_2.png) [@Jarland](https://meta.discourse.org/u/Jarland)
#### Post date: [19.Январь.2020 08:15:44 UTC](https://meta.discourse.org/t/letsencrypt-working-without-www-not-with-www/139004/9 "2020-01-19T08:15:44Z")

</div>

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

Разве что не запустить другой веб-сервер где-то ещё, конечно.

---

<div class="post-metadata">

### Author: ![Stephen](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/stephen/32/95011_2.png) [@Stephen](https://meta.discourse.org/u/Stephen)
#### Post date: [19.Январь.2020 08:16:47 UTC](https://meta.discourse.org/t/letsencrypt-working-without-www-not-with-www/139004/10 "2020-01-19T08:16:47Z")

</div>

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

---

<div class="post-metadata">

### Author: ![Jarland](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jarland/32/166904_2.png) [@Jarland](https://meta.discourse.org/u/Jarland)
#### Post date: [19.Январь.2020 08:19:01 UTC](https://meta.discourse.org/t/letsencrypt-working-without-www-not-with-www/139004/11 "2020-01-19T08:19:01Z")

</div>

Правильно, я уже вижу одну попытку, которая была прервана из-за изменения файла, что нарушило способ, которым они настраивали его изменение в app.yml:

> [@Problem in installing Let's Encrypt SSL for www and non-www](https://meta.discourse.org/t/problem-in-installing-lets-encrypt-ssl-for-www-and-non-www/88515/10):
>
> Similar situation here. I installed Discourse on example.com and had a CNAME DNS record for www.example.com. Now I went to [https://check-your-website.server-daten.de](https://check-your-website.server-daten.de) and got a bad rating, because the SSL certificate was not valid for www.example.com and also http://www.example.com was forwarding to https://example.com. Steps I took: Replace CNAME record for www.example.com by A and AAAA records. Add www.example.com as an additional domain to app.yml following [Redirect additional domain(s) t…](https://meta.discourse.org/t/redirect-single-multiple-domain-s-to-your-discourse-instance/18492)

Независимо от того, редактируем ли мы файл напрямую или позволяем app.yml изменить его после, обновление может изменить этот файл и нарушить ваш способ его редактирования в любом случае.

---

<div class="post-metadata">

### Author: ![Stephen](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/stephen/32/95011_2.png) [@Stephen](https://meta.discourse.org/u/Stephen)
#### Post date: [19.Январь.2020 08:21:39 UTC](https://meta.discourse.org/t/letsencrypt-working-without-www-not-with-www/139004/12 "2020-01-19T08:21:39Z")

</div>

Моя мысль в том, что любое изменение этого шаблона снова сломает его. За последние несколько лет метод PUPS/hooks ломался только из-за одного изменения — добавления поддержки ECC.

---

<div class="post-metadata">

### Author: ![system](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/system/32/443519_2.png) [@system](https://meta.discourse.org/u/system)
#### Post date: [18.Февраль.2020 08:22:03 UTC](https://meta.discourse.org/t/letsencrypt-working-without-www-not-with-www/139004/13 "2020-02-18T08:22:03Z")

</div>

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.
