Назад | Перейти на главную страницу

CNAME в Route 53 - перенаправление с www на не-www не работает

Я размещаю веб-приложение на AWS с Nginx 1.6.3 и django 1.7.6

Я хочу перенаправить www.mydomain.com к mydomain.com через Маршрут 53

Другими словами, показывая mydomain.com/foo в адресной строке, когда пользователь ввел www.mydomain.com/foo


Конфигурация Route 53

mydomain.com

www.mydomain.com


С приведенной выше конфигурацией mydomain.com хорошо работает, но www.mydomain.com возвращается ошибка 400, неверный запрос ошибка. Конечно, я пробовал это в секретном режиме (без кеша) с достаточным интервалом времени (более 24 часов). Добавление http:// спереди возвращает ту же ошибку.


    server {
        listen 80;
        server_name www.mydomain.com;
        return 301 $scheme://mydomain.com$request_uri;
    }

Если я добавил код выше в nginx.conf, www.mydomain.com перенаправлен на mydomain.com как я и предполагал. Однако я не уверен, что для использования службы CNAME необходимо редактировать конфигурацию веб-сервера. Как я могу использовать службу CNAME без редактирования веб-сервера?

Это похоже на ожидаемое поведение. То, что происходит, когда HTTP-сервер получает запрос, с которым он не знает, что делать, может отличаться, но перенаправления не ожидается, если только это не произойдет на уровне HTTP.

А CNAME запись просто заявляет, что данное имя в DNS является псевдонимом другого имени в DNS.

Что происходит, когда у вас CNAME запись на месте заключается в том, что когда ваш HTTP-клиент делает A или AAAA при запросе псевдонима они получат IP-адрес, связанный с возвращенным фактическим именем.

Затем они подключатся к этому адресу, зная, что это адрес, связанный с именем, которое они искали (псевдоним), и сделают совершенно нормальный запрос.

Когда у вас есть виртуальные хосты на основе имен, HTTP-сервер заботится о том, Host заголовок говорит, и клиент поместит любое имя хоста, которое было в URL-адресе, по которому он перешел, в качестве значения этого заголовка (в этом примере, псевдонима).

Если вы хотите перенаправить HTTP-клиент, вам понадобится HTTP-перенаправление, как в вашем собственном примере.