Лучшая практика для 301 перенаправления www to не www site - PullRequest
0 голосов
/ 02 августа 2020

Я тщательно искал это, но пока не получил четкого ответа.

Например, скажем, у меня есть домен example.com, и я хочу, чтобы это был мой канонический URL (например, www.example.com следует 301 перенаправить на example.com.

Вот что я сделал:

  • с точки зрения DNS
    • добавил запись A для example.com к server IP
    • добавил запись CNAME для www.example.com в качестве псевдонима для example.com
  • для веб-сервера (я использовал nginx, если это имеет значение)
    • имеет значение Upstream для server IP
    • перенаправить все http на https
    • перенаправить конкретный www.example.com с конфигурацией запроса 301 следующим образом: return 301 $scheme://example.com;

А затем я протестировал с помощью средства проверки перенаправления, такого как this , и получил следующий результат:

  • http://example.com -> 301 редирект на https://example.com
  • http://www.example.com -> 301 редирект на https://www.example.com
  • https://example.com -> 200 OK, контент нормально обслуживается
  • https://www.example.com -> 301 перенаправление на https://example.com

Это похоже на то, чего я хотел достичь, и открытие всех этих 4 ссылок в моем Chrome браузере сработало. Все эти ссылки правильно перенаправляются на https://example.com со всеми действующими сертификатами.

Но если я попытаюсь проверить свой сайт, например, на woorank.com , или попытаюсь сделать запрос с помощью * Модуль 1096 * request мне сказали, что сертификат www.example.com недействителен.

>>> import requests
>>> r = requests.get("https://www.example.com")
>>> r
requests.exceptions.SSLError: HTTPSConnectionPool(host='www.example.id', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLCertVerificationError("hostname 'www.example.com' doesn't match 'example.com'")))

Это потому, что у меня был только один сертификат, зарегистрированный в домене example.com, и используйте его как для виртуального хоста example.com, так и для www.example.com.

Это потому, что я видел ссылку на форуме , в которой говорится, что:

Другой Причина использования DNS - избежать получения https для обоих доменов.

Что я пропустил?

РЕДАКТИРОВАТЬ:

Если это важно, я использую docker image nginx-proxy для автоматического создания виртуального хоста. Сертификат подписан как example.com, и у меня есть конфигурации example.com и www.example.com, созданные как virtualhost.

1 Ответ

0 голосов
/ 03 августа 2020

Согласно комментарию Ричарда Смита, да, оказывается, мне просто нужно использовать сертификат SAN для www.example.com И example.com. Не знаю.

Используя сертификат SAN, я могу создать только 1 сертификат для обоих типов домена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...