Azure 网站使用套接字协议启动我的 Hapi Node.js 站点

Azure Web Site starting my Hapi Node.js site with socket protocol

每当我将 Hapi.js Web 应用程序部署到 Azure 时,它​​都会使用套接字协议启动服务器(请参阅下面的输出)。

socket:\.\pipe\b5c0af85-9393-4dcb-bd9a-3ba9b41ed6fb
  GET              /                              
  GET              /{param*}                      
  GET              /api/employees                 
  POST             /api/employees                 
  GET              /api/employees/{id}            
  PUT              /api/employees/{id}            
  DELETE           /api/employees/{id}            
  POST             /api/worklog                   
  GET              /login                         
  POST             /login                         
Hapi server started @ socket:\.\pipe\b5c0af85-9393-4dcb-bd9a-3ba9b41ed6fb
150914/214730.270, [response], socket:\.\pipe\b5c0af85-9393-4dcb-bd9a-3ba9b41ed6fb: [1;32mget[0m / {} [32m200[0m (316ms) 

但是,每当我在本地 运行ning 时,它就会开始使用 http...我没有 运行 使用 express 或 loopback 解决这个问题,只有 Hapi。我缺少某种配置吗?这是 server.connection 函数:

var server = new Hapi.Server();
var host = process.env.host || '0.0.0.0';
var port = process.env.port || 3000;

server.connection({host: host, port: port});

这很重要的原因是因为我无法将 socket://*<mydoamin>* 传递给 google 作为 OAuth 的回调 URI。

您不需要将 socket://<domain> 传递给 google,您可以将正常的 https://yourDomain.com 甚至 https://yourSiteName.azurewebsites.net 传递给 Google OAuth 回调,它应该会像您预期的那样工作。

节点应用程序正在监听管道而不是普通的 tcp 套接字这一事实只是 iisnode 的一个实现细节。基本上,问题是节点有它自己的网络服务器,所以你不能将它与其他网络服务器(如 IIS、Apache、nginx 等)一起使用。 iisnode 弥合了 IIS 和节点之间的差距,因为它允许 IIS 监听服务器上的 HTTP 端口machine 80 并且当 IIS 在该端口上收到请求时,它只是将其转发到正在侦听命名管道的节点进程。这使您可以像通常在 Windows 服务器机器上那样在 IIS 中管理您的站点,而实际上是在节点中编写您的应用程序。

您可以将其视为盒子上的 2 个网络服务器 运行,一个 (IIS) 充当另一个(节点)的代理,所有工作都在其中实际进行。 iisnode 开发人员选择使用命名管道而不是普通的 tcp 套接字这一事实很奇怪(尽管可以理解,因为您不能像管道一样轻松地保留端口本身),但事实就是如此。