如何通过特定 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
如果有帮助请告诉我。
这是 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 在配置中有点挑剔,因为这要容易得多。
我正在制作 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
如果有帮助请告诉我。
这是 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 在配置中有点挑剔,因为这要容易得多。