如何通过特定 IP 路由 API 请求?

How to route API Requests through a specific IP?

我正在制作 iOS 和 Android 应用程序。我们需要应用程序中的充值功能。我们正计划使用一家公司提供的 Recharge API。

出于安全原因,API 仅允许通过特定 IP 白名单 IP 地址进行请求。

这个IP地址最好是我们服务器的IP。

但我们在应用程序中使用 Firebase 作为数据库、存储和身份验证。

那么我们如何才能让我们的用户通过应用程序发出的 API 请求能够通过并且不会导致错误,因为用户的 IP 地址不会被列入白名单?

部署您选择的服务器可以是 Ubuntu 或 Windows,您选择的语言可以将您的请求路由到所需的第 3 方 API。

理想情况下,来自您客户端的所有请求都将发送到您的服务器,然后您的服务器将请求解析给第 3 方并响应给您的客户端。

您可以查看示例 NodeJS/Express REST 实现,它可以针对您所需的用例进行扩展。

https://scotch.io/tutorials/build-a-restful-api-using-node-and-express-4

您将需要代理来自您用户的 API 请求,这样,对于您的 API 提供商,所有请求似乎都来自同一个静态 IP 地址,该地址将被列入白名单。

代理是一种被动软件组件,它基本上在一端接收请求,并将它们转发到另一端的 API 服务器。换句话说,它代表您的用户进行 API 调用。

您可以使用 NGINX、HAProxy 或任何可用的反向代理,或者使用您选择的语言编写自定义反向代理 - 因为这不是一项艰巨的任务。

这里是如何在 linux 盒子上使用 HAProxy 设置反向代理。

首先,从 linux 终端安装 haproxy

apt update && apt install haproxy

然后导航到文件夹 /etc/haproxy

cd /etc/haproxy

将默认配置文件重命名为haproxy.cfg.backup

mv haproxy.cfg{,.backup}

现在,创建一个新的配置文件,haproxy.cfg

nano haproxy.cfg

加上以下内容,然后保存修改。

global
    log /dev/log    local0
    log /dev/log    local1 notice
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
    stats timeout 30s
    user haproxy
    group haproxy
    daemon

defaults
    log global
    mode http
    timeout connect 5000
    timeout client  50000
    timeout server  50000

frontend api_proxy
    bind *:8080
    mode http
    default_backend remote_api_server

backend remote_api_server
    #replace 10.10.10.10 with the actual Ip address
    server server1 10.10.10.10:443 ssl

10.10.10.10 替换为 API 提供商 IP 地址,并将 443 替换为实际端口。

如果 API 没有使用 HTTPS,删除 ssl 选项

8080 是您的用户将连接到的端口。随便改。

现在,使用以下命令启动 haproxy:

haproxy -D -f haproxy.cfg

您可以验证 haproxy 是否正在侦听端口 8080

telnet localhost 8080

将您的应用配置为通过代理 URL 调用充值 API,这将是:

http://your_server_ip_address:8080/your/api/url

不过您需要在生产环境中配置 HTTPS。

查看下面的 link 了解如何使用 haproxy 配置 SSL

https://www.ibm.com/support/knowledgecenter/en/SSTPQH_1.0.0/com.ibm.cloudant.local.install.doc/topics/configure_haproxy.html

如果有帮助请告诉我。

这是 nginx 的面包和黄油。

这样的位置块会将请求代理到上游;

    location / {
        proxy_redirect          off;
        proxy_pass_header       Server;
        proxy_set_header        X-Real-IP $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header        X-Scheme $scheme;
        proxy_set_header        Host upstream-host.com.au;
        proxy_set_header        X-NginX-Proxy true;
        proxy_connect_timeout   5;
        proxy_read_timeout      240;
        proxy_intercept_errors  on;

        proxy_pass      upstream-host.com.au:443;
    }

这对我来说效果很好。真的很容易设置,我发现 HAProxy 在配置中有点挑剔,因为这要容易得多。