3

我想使用 Google App Engine 向将位于防火墙/路由器/NAT 后面的设备发起 http 流量。这些设备将接收来自 GAE 的命令。我可以让设备轮询 GAE 以查找新消息,但这会占用大量流量。或者,我可以尝试永久保持打开连接,但这非常昂贵且糟糕。

这些设备没有静态 IP 地址。但是,它们会定期与 Google App Engine 进行通信,然后设备可以侦听它们刚刚打开的端口以进行任何传入通信。如果我理解TCP 打孔,因为设备已经将流量发送到 GAE,它们将分配一个端口,该端口转换为设备正在侦听的端口,相应地,GAE 在防火墙中有一个可用的孔。

但是,为了让 GAE 向设备发送流量,它需要知道设备在其公共 IP 上分配的端口。问题就在这里,因为 GAE 没有为传入流量提供源/远程端口。在不知道设备刚刚使用的端口的情况下,我无法向设备发送除 http 响应消息之外的任何内容。我实际上无法向该设备发起 http/tcp 消息。

那么,是否有人知道为 GAE 获取传入源/远程端口的方法,或者知道向防火墙后面的设备发起流量的另一种方法?

TL;DR:你究竟是如何获得发送到 GAE 上的应用程序的 http 消息的远程端口的?

4

2 回答 2

1

对于未来的搜索者,要跟进 koma 的响应,这里是 nginx 组合反向代理和正向代理的配置,应该可以解决问题。设备通过端口 80 将所有流量发送给它,该端口被反向代理到 App Engine。相反,App Engine 使用端口 8080 上的转发代理向防火墙设备发送请求,这样所有 GAE 流量似乎都来自同一个 IP。远程 ip 和远程端口作为代理请求的标头添加。

worker_processes  2;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    gzip  on;

    server {
        listen       8080;

        location / {
            resolver 8.8.8.8;
            proxy_pass http://$http_host$uri$is_args$args;
            proxy_set_header        X-Real-IP       $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

    server {
       listen      80;

       location / {
            proxy_pass  http://something.appspot.com;
            proxy_redirect off;
            proxy_buffering off;
            proxy_set_header        Host            something.appspot.com;
            proxy_set_header        X-Real-IP       $remote_addr;
            proxy_set_header        X-Real-Port     $remote_port;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }

}
于 2013-07-03T23:28:40.003 回答
1

由于不推荐使用安全数据连接器,因此您最好的选择是部署一个代理传入请求的服务。您有许多选项,例如配置防火墙和设置端口转发或 apache 反向代理。

如果您的内部地址发生变化,那么这也是处理此问题的地方。例如,您可以让 DHCP 服务器触发 apache 反向代理中的配置更改。

于 2013-07-02T19:50:15.033 回答