iis7 为 node.js 站点随机返回 404 not found 错误

Vla*_*aev 6 iis iis-7 node.js iisnode

服务器,位于德国
Windows Server 2008 / IIS 7
node.js 0.8.22
iisnode 0.2.2 x64

网页配置

<configuration>
  <system.webServer>
    <handlers>
      <add name="iisnode" path="server.js" verb="*" modules="iisnode" />
    </handlers>

    <rewrite>
      <rules>
        <rule name="DynamicContent">
          <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True"/>
          </conditions>
          <action type="Rewrite" url="server.js"/>
        </rule>
      </rules>
    </rewrite>

    <iisnode watchedFiles="*.js;lib\*;node_modules\*;styles\*;ui\*;views\*" />

  </system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)

服务器.js

var port = process.env.NODE_ENV == 'production' ? process.env.PORT : 3000;

require('./lib/server').listen(port);
Run Code Online (Sandbox Code Playgroud)

网站链接

问题:
有时我会收到 200 响应,但有时会收到 404(找不到文件或目录)。

如果我确实从俄罗斯、德国或美国请求,响应是 200。
如果我从中国请求,有时响应是 404(取决于 ISP、时间和其他方面)。

404 响应看起来像 iis 找不到 server.js

200 响应示例(使用 express Vpn,连接到美国):

<configuration>
  <system.webServer>
    <handlers>
      <add name="iisnode" path="server.js" verb="*" modules="iisnode" />
    </handlers>

    <rewrite>
      <rules>
        <rule name="DynamicContent">
          <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True"/>
          </conditions>
          <action type="Rewrite" url="server.js"/>
        </rule>
      </rules>
    </rewrite>

    <iisnode watchedFiles="*.js;lib\*;node_modules\*;styles\*;ui\*;views\*" />

  </system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)

404错误示例(没有VPN,来自中国的请求):

var port = process.env.NODE_ENV == 'production' ? process.env.PORT : 3000;

require('./lib/server').listen(port);
Run Code Online (Sandbox Code Playgroud)

iisnode 没有日志,也没有 404 请求的踪迹,所以我认为它们甚至还没有开始。

此服务器上的所有 iisnode/node.js 站点都存在相同的问题。
但是这台服务器上的Asp Net Mvc网站无论如何都返回200,所以可能不是中国金盾问题。

我可以提供任何信息。
任何帮助将不胜感激。

Luc*_*ate 1

尝试创建一条通往您的解决方案的路线来进行测试,例如:

//my route to test "GET", make sure if your route is "POST"
app.get('/test', function(req, res){
     res.json(true);
});
Run Code Online (Sandbox Code Playgroud)

现在使用url进行测试: http: //test.amelisa.ru/test

当没有到该路径的路由时会发生此错误。我遇到了同样的问题并且解决了。

我希望它有帮助。如果没有,请在“./lib/server”中分享您的代码以帮助更多人。