使用iisnode

时间:2015-11-23 12:28:53

标签: node.js iis cookies session-cookies iisnode

我使用iisnode将节点与IIS结合使用,并且我在设置CookieSession选项secure:true时遇到了麻烦。

我在IIS上使用HTTPS,并且我将任何HTTP重定向到HTTPS。 但即便如此,如果我设置CookieSession选项secure:true,会话在登录后也不会有任何内容。

  

安全:一个布尔值,指示cookie是否仅通过HTTPS发送(HTTP默认为false,HTTPS默认为true)。

我被迫使用secure:false让它发挥作用。为什么?

1 个答案:

答案 0 :(得分:5)

<强>原因

iisnode代理从IIS到运行express的节点应用程序的请求。 ssl连接在IIS终止,您的节点应用程序收到http请求。当应用程序通过安全连接需要Cookie时,cookieSessionexpress-session将不会设置Cookie。

解决

x-forwarded-proto标题设置为&#39; https&#39;时,您需要告诉Express它可以信任代理。

您可以通过添加proxy:true config

来完成此操作
app.use(express.session({
  proxy : true, 
  secret: 'your-secret-key',
  cookie: {
    secure: true
  }            
}));

或者您可以告诉Express全球信任代理:

app.set('trust proxy', 1)

还要在web.config中将enableXFF设置为true。它使iisnode将x-forwarded-proto(和x-forwarded-for)请求标头添加到快速应用程序。

<configuration>
  <system.webServer>

    <!-- ... -->

    <iisnode enableXFF="true" />

  </system.webServer>
</configuration>

<强> PREREQUISITE

iisnode至少需要0.2.11版才能让enableXFF配置添加x-forwarded-proto请求HTTP标头。您可以通过查看iisnode.dll中可能安装的C:\Program Files\iisnode文件的属性来检查您拥有的iisnode版本。如果&lt;&lt; s&lt; 0.2.11,只需从任何下载链接here下载最新版本。安装后,它会告诉您需要重新启动服务器。我可以告诉你,iisreset命令(在高架cmd框中)就足够了。