Вопрос по iis-7, node.js – Обслуживание статических файлов из iisnode с перезаписью URL

2

Я использую правило перезаписи в моем файле web.config для приложения узла, работающего под issnode, чтобы указать на мой файл server.js. myapp / * указывает на server.js.

    <rule name="myapp" enabled="true">
      <match url="myapp/*" />
      <action type="Rewrite" url="server.js" />
    </rule>

Это работало замечательно www.mywebsite.com/myapp/ загрузил бы мое приложение. Я хотел получить перенаправление из корня веб-сайта, чтобы www.mywebsite.com/ запускало мое приложение. Поэтому я изменил свой файл web.config

    <rule name="myapp" enabled="true">
      <match url="/*" />
      <action type="Rewrite" url="server.js" />
    </rule>

Так что это запускает server.js и обслуживает мой статический html-файл, единственная проблема - ссылки на любые внешние файлы из моего html-файла (css, js, images и т. Д.). Просто получайте 500 с за каждый запрос. Я использую это для обслуживания статических файлов

        var libpath = require('path');
        var _path = "."; <-- This seems to be the problem


        var uri = url.parse(req.url).pathname;
    var filename = libpath.join(_path, uri);
    fs.readFile(filename, "binary", function (err, file) {
            if (err) {
            res.writeHead(500, {
                "Content-Type": "text/plain"
            });
                 res.write(err + "\n");
                 res.end();
                return;
            }

         var type = mime.lookup(filename);
            res.writeHead(200, {
                "Content-Type": type
            });
         res.write(file, "binary");
         res.end();
        });

    break;

Поэтому мой вопрос заключается в том, как указать корневой каталог приложения / сервера моего узла для обслуживания статических файлов.

Спасибо

Jono

Ваш Ответ

2   ответа
5

модуль перезаписи URL таким образом, чтобы обработчик статических файлов IIS обрабатывал запросы на статическое содержимое, а не node.js. Использование IIS для обработки статического содержимого значительно повышает производительность по сравнению с обработкой этих файлов с использованием любых механизмов node.js благодаря оптимизации на уровне ядра, связанной с кэшированием, и отсутствию необходимости разбивать код JavaScript.

Для стандартной конфигурации web.config, которая достигает этого, см.https: //github.com/tjanczuk/iisnode/issues/160#issuecomment-560654

У меня были проблемы с предложенным файлом web.config, и в итоге я получил следующее: Pastebin.com / hULgnCTg GotDibbs
@ GotDibbs То же самое для меня. Tomasz web.config создает бесконечные циклы перенаправления, когда я захожу на mydomain / index.html. Я просто скопировал и вставил свой код. Однако ваш код работает мгновенно. Christiaan Westerbeek
Я тоже пользуюсь образцомweb.config и мне не повезло, обслуживая статические файлы /public/hello.html) Ben Collins
3

правила, поэтому я внес некоторые изменения:

<system.webServer>
  <handlers>
    <clear />
    <add name="iisnode" path="/index.js" verb="*" modules="iisnode" />
    <add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" />
  </handlers>
  <rewrite>
    <rules>
      <rule name="static">
        <action type="Rewrite" url="www{REQUEST_URI}" />
      </rule>
      <rule name="serve-static" stopProcessing="true">
        <conditions logicalGrouping="MatchAny">
          <add input="{REQUEST_FILENAME}" matchType="IsFile" />
          <add input="{REQUEST_URI}" pattern="^/www/$" />
        </conditions>
      </rule>
      <rule name="node">
        <action type="Rewrite" url="index.js" />
      </rule>
    </rules>
  </rewrite>
</system.webServer>
равило @First ставит перед всеми запросами префиксwww, мой каталог клиентов. Второе правило прекращает обработку, если файл существует или запрашивается корневой путь Третье правило переписывает все остальное под именем моего внутреннего сценария Node, чтобы оно могло быть обработано обработчиком iisnode.

Обратите внимание, что путь обработчика iisnode установлен в/index.js, который, кажется, устраняет конфликты с клиентскими файлами с тем же именем.

Спасибо, я потратил кучу времени, чтобы найти решение, не имея <add name = "StaticFile" path = " "глагол =" "modules =" StaticFileModule, DefaultDocumentModule, DirectoryListingModule "resourceType =" Either "requireAccess =" Read "/> ничего не работает в статическом обслуживании, чего нет в ответе Томаша и в онлайн-примерах tahsintahsin

Похожие вопросы