2015-09-14 19 views
0

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

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) 

但是,每当我运行这个地方,它开始使用http ...我还没有碰到使用明示或回送,只哈皮这个问题。是否有某种我缺少的配置?这是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>*,以谷歌作为回调的URI的OAuth。

+0

您使用的是什么Azure服务?网络应用?还有别的吗? –

+1

是的,使用与Kudu部署脚本一起部署的Azure Web Apps,一个iisnode.yml和一个生成的web.config –

回答

0

您不需要通过socket://<domain>谷歌,你会传递正常https://yourDomain.com甚至https://yourSiteName.azurewebsites.net谷歌OAuth回调,它应该像你所期望的那样工作。

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

您可以将其视为在该框上运行的2个Web服务器,其中一个(IIS)充当其他所有工作实际发生的其他节点的代理。 iisnode开发人员选择使用命名管道而不是普通的tcp套接字的事实很奇怪(虽然有点可以理解,因为你不能像管道一样容易地保留一个端口),但事实就是这样。

+0

所以事实证明,我忽略了bell.js/hapi auth中的“location”属性,它传递了我的服务器uri设置在hapi上......并且由于Azure/IIS在命名管道中运行,这就是获取'socket:\\。\ pipe \ *'协议的位置。 –