我为我的网站编写了一个反向代理,作为负载均衡器。我用Node编写了它,使用了nodejitsu hppt-proxy。我的网站是一个AngularJS应用程序,它使用websocket连接从服务器获取数据。 http服务器是一个节点Express应用程序。一切正常。
当我查看Google如何为我的网站编制索引时,我的问题就出现了。我无法让Google看到我的内容。我只能看到没有视图的index.html文件。所以我决定使用节点Prerender并在服务器端为Google-bot渲染html。
问题在于我无法使Prerender / PhantomJS的websocket连接与我的代理一起工作。当我使用curl向代理发送请求时,请求的结尾为'?_ escaped_fragment ='作为一个搜索机器人,我可以看到代理将请求发送到我的http服务器,后者又将其发送给Prerender。我可以从Prerender / PhantomJS控制台看到我的Angular应用程序工作正常,并尝试打开websocket连接。该请求找到了我的代理方式,代理将其识别为连接升级事件。但由于某些原因,代理它并不起作用。我的http服务器上什么都没有。所有其他东西加载正常(index.html,静态资源)但http服务器没有得到websocket连接请求。
知道是什么导致问题或如何调试它? http-proxy模块和websockets是否存在已知问题?
当我使用curl发送请求时,请使用以'结尾的网址发送请求?_ escaped_fragment ='直接到我的Express.js http服务器的端口,它再次工作,在端口80上发送到代理的请求导致所有挂起和Prerender / PhantomJS超时。没有错误,但一切都挂了。
我在我的代理中记录了websocket请求并且盯着他们看了一个小时,试图比较有效的websocket请求(从Chrome访问我的角度应用程序)和那些没有用的webocket请求,也就是说Prerender / PhantomJS请求。没有看到任何明显的东西,但它并不意味着没有任何东西。我不太了解这些请求的属性。
您可以找到我的服务器代码here。反向代理是" proxy.js",Express http服务器是" server.js",该服务器的websocket连接模块是" websockets.js"
任何想法都会非常受欢迎。昨天我用这个修整了整整一天但没有成功......