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

CDN CNAME не разрешает происхождение клиента

Я настроил Edgecast CDN для зеркалирования всего моего статического контента. Поскольку я использую корень своего домена (donaldjenkins.com) для размещения моего основного сайта - с помощью Google Analytics, который устанавливает файлы cookie - я сохранил соответствующие статические файлы в отдельном без печенья домен (donaldjenkins.info), который используется только для этой цели. Я его настроил (используя это руководство для общего руководства) со следующей структурой, основанной на сочетании происхождения клиента и источника CDN, чтобы максимально использовать выбранное короткое доменное имя и предоставить значимые URL-адреса:

  1. http://donaldjenkins.info:80 установлен как происхождение клиента для контента, хранящегося в CDN в каталоге http://wac.62E0.edgecastcdn.net/8062E0/donaldjenkins.info;

  2. Затем я создал различные поддомены отдельного домена, с удобным названием cdn.dj, так как CDN-происхождение Edge CNAME для каждого из соответствующих типов статического содержимого:

    • js.cdn.dj указывает на исходный каталог http://wac.62E0.edgecastcdn.net/0062E0/donaldjenkins.info/js;
    • css.cdn.dj указывает на исходный каталог http://wac.62E0.edgecastcdn.net/0062E0/donaldjenkins.info/css;
    • images.cdn.dj указывает на исходный каталог http://wac.62E0.edgecastcdn.net/0062E0/donaldjenkins.info/images

и так далее. В результате получаются довольно красивые, короткие и понятные URL-адреса.

Файл зоны DNS для cdn.dj (да, это настоящее доменное имя, зарегистрированное в Джибути) настроено правильно:

cdn.dj          43200   IN   A       205.186.157.162     
css.cdn.dj      43200   IN   CNAME   wac.62E0.edgecastcdn.net.
images.cdn.dj   43200   IN   CNAME   wac.62E0.edgecastcdn.net.
js.cdn.dj       43200   IN   CNAME   wac.62E0.edgecastcdn.net.

DNS преобразуется в URL-адрес Edgecast:

$ host js.cdn.dj
js.cdn.dj is an alias for wac.62E0.edgecastcdn.net.
wac.62E0.edgecastcdn.net is an alias for gs1.wac.edgecastcdn.net.
gs1.wac.edgecastcdn.net has address 93.184.220.20

Но всякий раз, когда я пытаюсь получить файл в любом из каталогов, в которые сопоставлены ресурсы CNAME, я получаю 404:

$ curl http://js.cdn.dj/combined.js
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <title>404 - Not Found</title>
    </head>
    <body>
        <h1>404 - Not Found</h1>
    </body>
</html>

несмотря на то, что существует соответствующий файл происхождения клиента:

$ curl http://donaldjenkins.info/js/combined.js

извлекает содержимое combined.js файл. Тем не менее, с тех пор, как я установил CDN, прошло более чем достаточно времени для распространения DNS.

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

Это не имеет ничего общего с DNS. Вы не должны использовать исходные серверы CDN. Весь ваш контент находится на сервере вашего клиента. С исходными серверами CDN вы вручную (через FTP) загружаете на них контент.

Итак, удалите исходные серверы CDN. Удалите запись cdn.dj A (при условии, что вы просто хотите использовать cdn.dj для cdn)

Затем следуйте этим инструкциям из http://wiki.mediatemple.net/images/EdgeCast_HTTP_Small_Object_Guide_3.03.pdf:

Чтобы настроить наши пограничные серверы на распознавание вашего CNAME

  1. Перейдите на страницу Edge Cnames, которую можно найти на вкладке «Малый объект HTTP» в MCC.
  2. В параметре New Edge Cname введите имя нужной записи CNAME. CNAME следует указывать строчными буквами и не включать протокол (например, http: //). [Например, js.cdn.dj. -MAW]
  3. Выберите, будет ли указанная CNAME указывать на источник клиента или исходный сервер CDN. [В вашем случае происхождение клиента. -MAW]
  4. С помощью параметра Указывает на выберите корневое расположение на исходном сервере, на которое будет указывать CNAME. Если вы хотите указать конкретную папку, вам следует ввести косую черту (/), а затем указать путь к нужной папке. [Например: http://donaldjenkins.info/js для js.cdn.dj. -MAW]
  5. Щелкните Добавить.
  6. Убедитесь, что запись CNAME, указывающая на тот же домен, была зарегистрирована на вашем DNS-сервере. Эта запись CNAME должна соответствовать имени, присвоенному вашему пограничному CNAME. [Вы уже это сделали. -MAW]

Тогда вот что происходит:

  1. Веб-браузер запрашивает http://js.cdn.dj/combined.js
  2. CNAME отправляет запрос на wac.62E0.edgecastcdn.net.
  3. wac.62E0.edgecastcdn.net смотрит на заголовок HTTP-хоста и видит js.cdn.dj.
  4. wac.62E0.edgecastcdn.net просматривает свою конфигурацию и находит маскирующий URL для js.cdn.dj с сервером происхождения клиента http://donaldjenkins.info/js
  5. wac.62E0.edgecastcdn.net действует так, как если бы он только что получил запрос на URL http://wac.62E0.edgecastcdn.net/8062E0/donaldjenkins.info/js/combined.js.
  6. Combined.js обслуживается из кеша или извлекается из http://donaldjenkins.info:80/js/combined.js а потом служил.

Это потому, что вы неправильно настроили свой DNS.

Кажется, у вас включен подстановочный знак DNS, так что something.donaldjenkins.info будет записью A для 205.186.157.162.

Ваши поддомены css, js, images также указывают на этот IP, а не на CNAMES; Это заставляет меня думать, что вы их неправильно настроили.

Чтобы настроить images поддомены у вас должно быть что-то вроде:

images.cdn 43200 IN CNAME wac.62E0.edgecastcdn.net.

Я очень надеюсь, что ты скажешь *.cdn.dj как способ сократить donaldjenkins.info, как cdn.dj это не настоящий домен, который вы можете использовать.