Использование модуля перезаписи URL-адресов IIS для указания на Azure CDN

У меня установлен модуль перезаписи URL-адресов на моем веб-сервере под управлением Windows Server 2012 R2 по URL-адресу вида: http://staging.mysite.net/

У меня есть изображения, шрифты, скрипты и т. д., загруженные в Azure CDN.

Я указал следующие правила в своем Web.config:

<rewrite>
    <rules>
        <rule name="CDN: fonts" stopProcessing="true">
            <match url="^fonts/(.*)" />
            <action type="Rewrite" url="http://cdn.staging.mysite.net/fonts/{R:1}" appendQueryString="true" />
        </rule>
        <rule name="CDN: images" stopProcessing="true">
            <match url="^images/(.*)" />
            <action type="Rewrite" url="http://cdn.staging.mysite.net/images/{R:1}" appendQueryString="true" />
        </rule>
        <rule name="CDN: pdf" stopProcessing="true">
            <match url="^pdf/(.*)" />
            <action type="Rewrite" url="http://cdn.staging.mysite.net/pdf/{R:1}" appendQueryString="true" />
        </rule>
        <rule name="CDN: scripts" stopProcessing="true">
            <match url="^scripts/(.*)" />
            <action type="Rewrite" url="http://cdn.staging.mysite.net/scripts/{R:1}" appendQueryString="true" />
        </rule>
        <rule name="CDN: style" stopProcessing="true">
            <match url="^style/(.*)" />
            <action type="Rewrite" url="http://cdn.staging.mysite.net/style/{R:1}" appendQueryString="true" />
        </rule>
    </rules>
</rewrite>

Все возвращается как ошибка 404, хотя файлы существуют. Например, на моей странице есть ссылка на /images/en-us/logo.png. Я убедился, что http://cdn.staging.mysite.net/images/en-us/logo.png действительно существует.

Кроме того, функция «Тестовый шаблон» оснастки «Перезапись URL» показывает, что {R1} возвращает en-us/logo.png, когда вы вводите либо images/en-us/logo.png, либо /images/en-us/logo.png в поле «Введите данные для проверки».

На мгновение я попытался использовать type="Redirect" вместо type="Rewrite", но это приводит к дублированию запроса/ответа с сервера. Первый — 301, второй — 200. Мне нужен только ответ 200.

++ Очевидно, что mysite.net не является моим доменом и используется только в качестве примера.


person eat-sleep-code    schedule 08.04.2014    source источник


Ответы (1)


Я использую следующее правило, чтобы переписать все запросы для всего в моей папке /assets, которая работает:

<rewrite>
  <rules>
    <rule name="Rewrite to CDN">
      <match url="^assets/(.+)$" />
      <action type="Rewrite" url="http://cdn.domain.com/{R:0}" />
    </rule>
   </rules>
</rewrite>
person Tom Hall    schedule 16.04.2014
comment
Странно, единственное, что я действительно вижу, это то, что вы не используете stopProcessing=true или appendQueryString=true. Сегодня вечером я попробую удалить их из своих правил, чтобы посмотреть, решит ли это проблему. - person eat-sleep-code; 16.04.2014
comment
Также используется немного другое регулярное выражение для сопоставления URL-адреса и URL-адрес перезаписи {R: 0} вместо {R: 1}. - person Tom Hall; 17.04.2014
comment
Изменил мой, чтобы он соответствовал вашему стилю, удалил stopProcessing=true, удалил appendQueryString=true, изменил регулярное выражение, чтобы оно соответствовало вашему шаблону, и переключил URL-адрес, чтобы он был похож на ваш (без имени папки и используйте {R:0}). Все равно не повезло! Он все еще выглядит так, как будто он не работает. - person eat-sleep-code; 17.04.2014
comment
Используете ли вы модуль маршрутизации запросов приложений? Я только что нашел этот ответ: stackoverflow.com/questions/14269149/ - person eat-sleep-code; 17.04.2014
comment
Да, используя маршрутизацию запросов приложений, я забыл, что «включить прокси» по умолчанию отключено, как только вы его включите, он должен работать сразу. - person Tom Hall; 17.04.2014
comment
Я установил ARR3 с помощью установщика веб-платформы, перезапустил, не вижу никаких опций для него в диспетчере iis?? - person eat-sleep-code; 17.04.2014
comment
Вам нужно заглянуть под свой серверный узел (самый верхний элемент в левой части дерева), а не на свой сайт, в диспетчере IIS, и вы увидите «Кэш маршрутизации запросов приложений», войдите в него, а затем на справа нажмите «Настройки прокси-сервера», здесь вы можете включить прокси. - person Tom Hall; 17.04.2014
comment
даже не видя кэша маршрутизации запросов приложений. Я использую IIS 8.5. - person eat-sleep-code; 17.04.2014
comment
Другой вопрос. Напишите сейчас, если вы запускаете тест скорости страницы или веб-страницы на сайте, он не знает, что вы используете CDN, потому что перезапись происходит на уровне IIS (супер быстро!). Но есть ли в любом случае — возможно, с исходящим правилом — чтобы URL-адрес CDN возвращался обратно в такие инструменты? - person eat-sleep-code; 17.04.2014
comment
Да, абсолютно, и, если честно, это может быть лучшим решением. Это поможет вам начать работу: stackoverflow.com/a/17316973/705800 - person Tom Hall; 17.04.2014
comment
У меня никогда не работали исходящие правила. Я получаю ошибку 500 всякий раз, когда пытаюсь реализовать исходящее правило. Так что на данный момент я просто обслуживаю их с тем же доменом, что и остальная часть моего контента, используя входящее правило и маршрутизацию запросов приложений. - person eat-sleep-code; 24.04.2014