1

我创建了一个托管在 AWS EC2 实例上的 R 管道工 API,但是我公司的 Web 开发人员尝试在我的 API 上执行 GET 请求时收到连接错误。我不确定为什么。以下是他们从开发服务器上运行的内容,以尝试获取托管在我的 API 端点上的数据:

curl -X GET http://12.345.678.90:8003/path-to-endpoint

这就是他们收到的...

About to connect() to 12.345.678.90 port 8003 (#0)  
Trying 12.345.678.90...   
Connection refused      
Failed connect to 12.345.678.90:8003; Connection refused
Closing connection 0 

. .

如果我只是在本地浏览器或任何浏览器中访问端点,那么它可以工作并显示数据,但由于某种原因,它没有使用 curl 程序进行连接。补充一点,这些相同的 URL 端点正在公司的生产服务器上运行,而不是在他们的开发服务器上运行 - 所以我不确定我的 EC2 实例是否根本不允许访问开发服务器 IP。

如何解决

在 EC2 实例中,我尝试制定自定义 TCP 规则以允许来自任何地方的入站连接。我的实例具有以下入站和出站安全规则:

在此处输入图像描述

在此处输入图像描述

尽管如此,我公司的 Web 开发人员仍然无法连接以从我的端点http://12.345.678.90:8003/path-to-endpoint获取 API 。有什么我没有做的事情允许他们访问 API 吗?

任何解决此问题的帮助将不胜感激!

Edit1:我正在与之合作的开发人员的评论-“如果我使用本地浏览器中的 http URL,那么它可以工作并显示 CSV,但由于某种原因,它没有使用 curl 程序显示。我们在其中添加了 12.345.678.90 IP我们的防火墙也是如此,但仍然没有运气。”

Edit2:这与主题有关,但与问题没有直接关系-我如何允许公共访问/通过 https(而不是 http)对我的端点进行任何访问。即使在我自己的本地浏览器中,我也无法通过 https URL 访问端点?

一如既往的感谢!

4

1 回答 1

1

我在内部运行了许多管道工 API。

通常,这是一个防火墙问题。

您可以打开这些端口。但是,每次您想提供一项新服务以要求他们打开一个新端口时,您都不得不返回网络。

但这就是反向代理大放异彩的地方。

我使用nginx

如果您将流量路由到端口 80 上的新端点,您可以拥有与端口一样多的端点(无需返回并要求更多防火墙)。

一个工作示例

以下示例在以下位置配置端点:

http://12.345.678.90/myplumberapi/path-to-endpoint

这个 nginx.conf 在端口 80 上提供服务

(nginx高手请注意,这里可能有些效率低下,见谅)

http {
        default_type application/json;
        sendfile   on;
        tcp_nopush on;
        server_names_hash_bucket_size 128;

        # note I only list one server here, but if you want
        # to serve your endpoints on more locations, change this
        upstream myplumberapi_pool {
                least_conn;
                server localhost:8003 weight=1;
        }


        map $http_upgrade $connection_upgrade {
                default upgrade;
                ''      close;
        }

        server {
                listen 80;
                listen  [::]:80 default_server;
                location /myplumberapi/ {
                            access_log /var/log/nginx/app.log;
                            rewrite ^/myplumberapi/(.*)$ /$1 break;
                            proxy_set_header Upgrade $http_upgrade;
                            proxy_set_header Connection $connection_upgrade;
                            proxy_set_header Host $host;
                            proxy_set_header X-Real-IP $remote_addr;
                            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                            proxy_pass http://myplumberapi_pool;
                            proxy_read_timeout 20d;
                            proxy_next_upstream error timeout http_500;
                    }

         }
}

events {
        worker_connections 4096;
}

你可以用同样的方式添加更多的API


对编辑的回应:

关于如何支持 https,您需要一个证书和一个域名(不能从 IP 执行 https),但如果两者都有,那么使用 nginx 可以轻松完成演练。

于 2018-07-12T23:22:15.147 回答