Я размещаю веб-приложение на 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-перенаправление, как в вашем собственном примере.