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、图像等)中引用任何外部文件,每个请求只需 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;

所以我的问题是如何指向我的节点应用程序/服务器的根目录来提供静态文件。

谢谢

城野

4

2 回答 2

5

在 iisnode 中提供静态内容的最佳方式是配置 URL 重写模块,以便 IIS 静态文件处理程序处理对静态内容的请求,而不是 node.js。与使用任何 node.js 机制为这些文件提供服务相比,让 IIS 服务静态内容具有很大的性能优势,因为围绕缓存进行了内核级优化,并且不必中断 JavaScript 代码。

有关实现此目的的样板 web.config 配置,请参阅https://github.com/tjanczuk/iisnode/issues/160#issuecomment-5606547

于 2012-05-09T17:57:34.060 回答
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>
  • 第一条规则为所有请求添加前缀www,我的客户端目录。
  • 如果文件存在或请求根路径,则第二条规则停止处理
  • 第三条规则将其他任何内容重写为我的后端节点脚本的名称,以便 iisnode 处理程序可以获取它。

请注意,iisnode 处理程序路径设置为/index.js似乎消除了与同名客户端文件的冲突。

于 2016-08-18T21:15:42.093 回答