托管在EC2实例上的my R plumber API存在连接问题

托管在EC2实例上的my R plumber API存在连接问题,r,amazon-ec2,plumber,R,Amazon Ec2,Plumber,我已经创建了一个安装在AWS EC2实例上的R PlumberAPI,但是我公司的web开发人员试图在我的API上执行GET请求,却收到了一个连接错误。我不知道为什么。以下是他们从开发服务器运行的内容,以尝试获取托管在my 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.

我已经创建了一个安装在AWS EC2实例上的R PlumberAPI,但是我公司的web开发人员试图在我的API上执行GET请求,却收到了一个连接错误。我不知道为什么。以下是他们从开发服务器运行的内容,以尝试获取托管在my 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开发人员仍然无法通过连接从我的端点获取API。是否有一些我没有做的事情允许他们访问API

如果您能帮助解决此问题,我们将不胜感激

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

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


一如既往地谢谢你

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

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

你可以打开那些端口。但是,每当你想提供一项新服务,要求他们打开一个新端口时,你就不得不回到网络

但这正是反向代理发挥作用的地方

我用

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

工作示例

以下示例在以下位置配置终结点:

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

(请注意,对于nginx专家,这里可能存在一些效率低下的问题,我深表歉意)

您可以用同样的方法添加更多API


编辑响应:


关于如何支持HTTPS,您需要一个证书和一个域名(不能从IP中做HTTPS),但是如果两者都有,那么NGNIX就有很容易的演练。

您是否考虑过安装在您的办公室(不在本地机器上,而是在您的办公网络上)的防火墙(或代理)。谢谢。我将回顾一下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;
}