You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何搭建代理实现任意IP通过授权IP转发请求至客户API服务器

如何搭建代理实现任意IP通过授权IP转发请求至客户API服务器

兄弟,我太懂你这种程序员碰到网络配置问题抓瞎的感觉了!你要的其实就是一个转发代理/反向代理,完全能搞定,给你几个简单易上手的方案,不管你的授权服务器(1.1.1.1)是Linux、Windows甚至临时用Python搭都可以:

方案一:Linux 用 Nginx 做反向代理(推荐生产/长期用)

Nginx是业内常用的轻量服务器,做代理超稳,步骤也不复杂:

  1. 先在1.1.1.1上安装Nginx:
    • Debian/Ubuntu系统:sudo apt update && sudo apt install nginx
    • CentOS/RHEL系统:sudo yum install nginx
  2. 新建一个代理配置文件,比如:sudo nano /etc/nginx/sites-available/api-proxy,把下面内容粘进去,记得替换成实际的客户API地址和你想用的端口/域名:
server {
    listen 8080; # 可以改成你喜欢的端口,比如80、9000
    server_name your-dev-api.com; # 可选,绑定自定义域名,也可以直接用1.1.1.1

    location / {
        proxy_pass https://10.10.10.10; # 客户API的实际地址,http/https看情况
        # 转发必要的请求头,避免客户API校验失败
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
  1. 启用这个配置:sudo ln -s /etc/nginx/sites-available/api-proxy /etc/nginx/sites-enabled/
  2. 检查配置是否合法:sudo nginx -t,如果提示“test is successful”,就重启Nginx生效:sudo systemctl restart nginx

搞定后,你的同事Ugo和Stefano直接请求http://1.1.1.1:8080(或者你绑定的域名),Nginx就会自动把请求转发给10.10.10.10,再把响应原路返回给他们,完全透明。

方案二:Windows 环境下的两种选择

如果你的授权服务器是Windows,也有简单的办法:

选项1:用 IIS 搭反向代理

适合已经有IIS的服务器:

  1. 打开「服务器管理器」,安装「Web服务器(IIS)」,同时勾选「应用程序开发」里的「URL重写」模块,以及「应用程序请求路由(ARR)」。
  2. 打开IIS管理器,右键你的网站→「URL重写」→「添加规则」→选择「反向代理规则」,目标地址填http://10.10.10.10,其余默认配置即可,保存后测试一下就能用。

选项2:用 tinyproxy 轻量代理(绿色免安装)

适合不想折腾IIS的情况:

  1. 下载tinyproxy的Windows绿色版,解压后找到tinyproxy.conf配置文件。
  2. 找到Allow开头的行,注释掉原来的限制(比如Allow 127.0.0.1),改成Allow 0.0.0.0/0(允许所有IP访问)。
  3. 找到ReversePath配置,改成ReversePath "/" "http://10.10.10.10/"
  4. 双击tinyproxy.exe启动服务,同事访问http://1.1.1.1:8888(默认端口,可在配置里改)就能转发请求了。

方案三:Python 快速搭临时代理(仅开发测试用)

如果只是临时开发用,不想装复杂软件,用几行Python代码就能搞定:

  1. 在1.1.1.1上安装依赖:pip install flask requests
  2. 创建一个proxy.py文件,粘贴下面的代码:
from flask import Flask, request, Response
import requests

app = Flask(__name__)
# 替换成客户API的实际地址
TARGET_API = "http://10.10.10.10"

# 匹配所有请求路径和HTTP方法
@app.route('/', defaults={'path': ''}, methods=['GET', 'POST', 'PUT', 'DELETE'])
@app.route('/<path:path>', methods=['GET', 'POST', 'PUT', 'DELETE'])
def forward_request(path):
    # 拼接完整的目标URL
    target_url = f"{TARGET_API}/{path}"
    # 过滤掉Host头,避免目标服务器校验问题
    headers = {k: v for k, v in request.headers.items() if k.lower() != 'host'}
    
    # 转发请求到目标API
    response = requests.request(
        method=request.method,
        url=target_url,
        headers=headers,
        data=request.get_data(),
        cookies=request.cookies,
        allow_redirects=False
    )
    
    # 处理响应头,避免冲突
    excluded_headers = ['content-encoding', 'content-length', 'transfer-encoding', 'connection']
    response_headers = [(k, v) for k, v in response.raw.headers.items() if k.lower() not in excluded_headers]
    
    return Response(response.content, response.status_code, response_headers)

if __name__ == '__main__':
    # 监听所有IP,端口5000(可改)
    app.run(host='0.0.0.0', port=5000, debug=True)
  1. 运行脚本:python proxy.py,同事访问http://1.1.1.1:5000就能转发请求了。这个方案适合临时用,性能不如Nginx,但胜在快。

几个重要注意事项

  • 防火墙要开放对应的端口:比如你用8080端口,就要在1.1.1.1的防火墙里允许外部访问这个端口,不然同事连不上。
  • HTTPS适配:如果客户API是HTTPS,Nginx需要配置SSL证书(可以用免费的Let's Encrypt证书),Python脚本里的TARGET_API要改成https://开头。
  • 安全加固(可选):如果不想让所有人都能访问,可在代理里限制IP,比如Nginx里加allow 3.3.3.3; allow 4.4.4.4; deny all;,只允许你同事的IP访问。

备注:内容来源于stack exchange,提问作者realtebo

火山引擎 最新活动