Google compute engine 服务器在Google计算引擎中发送事件

Google compute engine 服务器在Google计算引擎中发送事件,google-compute-engine,gcloud,Google Compute Engine,Gcloud,我正试图获得一个应用程序,它使用服务器发送的事件在谷歌计算引擎上运行,当SSH被放入框中时,我可以查看它们,但不能通过ephermeral IP(又名为 curl 0.0.0.0/route 从盒子内部工作,但 curl xx.xx.xx.xx/route 只是挂起,查看其他路由的头,在框和外部字之间似乎存在某种缓存代理,阻止服务器发送的事件传出,因为连接尚未完成,nginx也存在类似问题,直到您将proxy\u cache设置为off,但据我所知,没有关于配置计算引擎使用的代理的文档 是否

我正试图获得一个应用程序,它使用服务器发送的事件在谷歌计算引擎上运行,当SSH被放入框中时,我可以查看它们,但不能通过ephermeral IP(又名为

curl 0.0.0.0/route
从盒子内部工作,但

curl xx.xx.xx.xx/route
只是挂起,查看其他路由的头,在框和外部字之间似乎存在某种缓存代理,阻止服务器发送的事件传出,因为连接尚未完成,nginx也存在类似问题,直到您将proxy\u cache设置为off,但据我所知,没有关于配置计算引擎使用的代理的文档

是否可以从Google计算引擎执行服务器发送的事件?如果可以,您需要做什么才能让它工作

编辑

请求是使用browser EventSource对象创建的,因此它具有默认的头,看起来是
Accept:text/event stream
Cache Control:no Cache
,加上
Referer
User Agent

我添加的标题是
内容类型:文本/事件流
缓存控制:无缓存
,以及
连接:保持活动状态

在AWS中运行时,如果我在nginx后面运行它(假设我适当地修改了配置),那么一切都很好


在GoogleComputeEngine中,其他页面加载良好,但包含服务器发送事件的路由只是挂起,甚至从未接收到头。我怀疑谷歌在GCE盒和外部世界之间粘贴代理的原因是添加了
Via:HTTP/1.1 proxy10205
头。

在较低的网络层上可能有魔力,但在GCE上的虚拟机和外部IP的互联网之间没有(透明或其他)代理。我不确定Via头从哪里来,浏览器/客户端没有配置代理吗

在GCE上,外部IP没有以最直接的方式进行配置,尽管这可能会使堆栈中的某些东西绊倒。我认为对于外部IP,外部IP本身不会出现在VM配置中的任何地方,而是通过1-1 NAT转换为VM内部IP。Loadbalanced IP最终会在主机上显示外部IP(尽管这些IP是以一种有趣的方式配置的)

尽管我不认为任何事情都应该真正关心SSE的服务器IP,也许可以尝试设置一个只指向该实例的负载平衡IP,看看它是否工作得更好?

HTTP响应中的“Via:HTTP/1.1 proxy10205”不是来自Google Compute Engine

GCE不会删除服务器发送的事件标题。我在下面列出了一些简单的步骤,可以帮助您在GCE VM实例上配置演示服务器发送的事件:

  • 使用CentOS映像创建GCE实例
  • 安装Apache web服务器和PHP:

    $ sudo yum install httpd php 
    
  • 使用以下内容创建包含html内容的index.html文件:

  • 在www根目录($sudo vi/var/www/html/demo_sse.PHP)中创建一个名为demo_sse.PHP的PHP文件,其内容如下:

  • 
    
    现在访问该网页。还可以使用curl命令验证标头:

    $ curl -H "Accept:text/event-stream" --verbos http://<YOUR-GCE-IP ADDRESS>/demo_sse.php  
    
    $curl-H“接受:文本/事件流”--verboshttp:///demo_sse.php  
    
    我认为您需要提供更多信息,以便更好地诊断原因。你能用你看到的标题更新吗?发送和接收?到目前为止,我还没有听说GCE有任何与代理相关的问题,但这里有一个可能对您有用的线索:考虑到它在内部工作,而不是在外部工作,您是否确保所有防火墙规则都设置为允许流量?(我想你有,但只是问一下。)更新了更多的信息,我能找到的唯一可以设置的防火墙规则是那些除了指定地址之外不转发任何内容的规则,因此我可以访问所有其他页面的事实使我认为我设置正确,如果有其他类型的防火墙规则我找不到,那可能就是问题所在。问题不在于头被剥离,而是整个响应被缓冲
    $ curl -H "Accept:text/event-stream" --verbos http://<YOUR-GCE-IP ADDRESS>/demo_sse.php