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

Минимальная конфигурация HttpModules IIS7 для веб-сайта со статическим содержимым

Я пытаюсь настроить действительно быстрый, сжатый, кэшированный веб-сайт со статическим контентом, чтобы обслуживать только .jpg, .css и .js.

Я хочу удалить из конфигурации сайта все функции, которые не требуются:

Но эта конфигурация продолжает давать сбой:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
     <urlCompression doStaticCompression="true" doDynamicCompression="false" />
    <caching enabled="true" enableKernelCache="true">
      <profiles>
        <add extension=".gif" policy="DontCache" kernelCachePolicy="CacheUntilChange" duration="0.00:01:00" location="Any" />
        <add extension=".png" policy="DontCache" kernelCachePolicy="CacheUntilChange" duration="0.00:01:00" location="Any" />
        <add extension=".js" policy="DontCache" kernelCachePolicy="CacheUntilChange" duration="0.00:01:00" location="Any" />
        <add extension=".css" policy="DontCache" kernelCachePolicy="CacheUntilChange" duration="0.00:01:00" location="Any" />
        <add extension=".jpg" policy="DontCache" kernelCachePolicy="CacheUntilChange" duration="0.00:01:00" location="Any" />
        <add extension=".jpeg" policy="DontCache" kernelCachePolicy="CacheUntilChange" duration="0.00:01:00" location="Any" />
      </profiles>
    </caching>
    <staticContent>
      <remove fileExtension=".js" />
      <mimeMap fileExtension=".js" mimeType="text/javascript" />
      <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="30.00:00:00" />
    </staticContent>
        <modules>
            <clear />
            <add name="HttpRedirectionModule" lockItem="false" />
            <add name="StaticFileModule" lockItem="false" />
            <add name="CustomLoggingModule" lockItem="false" />
            <add name="CustomErrorModule" lockItem="false" />
            <add name="IsapiModule" lockItem="false" />
            <add name="AnonymousAuthenticationModule" lockItem="false" />
        </modules>  
</system.webServer>
</configuration>

Вы на самом деле не сказали, что происходит, или не предоставили сообщения об ошибках, но я собираюсь рискнуть и предположить.

Я предполагаю, что когда вы делаете <clear /> внутри модулей вы получаете ошибку «Нарушение блокировки». Это связано с тем, что на более высоком уровне иерархии настроек IIS7 раздел модулей (и сами модули) настроены как заблокированные, поэтому вы не можете переопределить / удалить их в файле web.config. Это сделано намеренно, поскольку именно модули составляют работающую систему IIS.

Чтобы иметь возможность <clear /> модулей в web.config необходимо сделать следующее:

  • Сделайте резервную копию %windir%\System32\inetsrv\config\applicationHost.config
  • Открыть %windir%\System32\inetsrv\config\applicationHost.config - вам нужно будет открыть свой редактор как администратор. Кроме того, если вы используете 64-битную Windows, вам нужно будет использовать 64-битный редактор, чтобы увидеть файл.
  • Найти <configSections> площадь - в sectionGroup для system.WebServer - будет строка, в которой говорится:
    <section name="modules" allowDefinition="MachineToApplication" overrideModeDefault="Deny" />
    Изменить overrideModeDefault быть Allow вместо того Deny.

Это все еще не позволит вам сделать <clear /> в файле web.config / modules, поскольку многие из основных модулей заблокированы индивидуально.

  • Теперь ищите <modules> раздел в applicationHost.config.
  • Многие из перечисленных здесь модулей имеют lockItem атрибут установлен на True. Измени их всех, чтобы они были False.
  • Сохраните файл applicationHost.config.

Теперь вы сможете <clear /> модули в вашем файле web.config.