如何搭建代理实现任意IP通过授权IP转发请求至客户API服务器
如何搭建代理实现任意IP通过授权IP转发请求至客户API服务器
兄弟,我太懂你这种程序员碰到网络配置问题抓瞎的感觉了!你要的其实就是一个转发代理/反向代理,完全能搞定,给你几个简单易上手的方案,不管你的授权服务器(1.1.1.1)是Linux、Windows甚至临时用Python搭都可以:
方案一:Linux 用 Nginx 做反向代理(推荐生产/长期用)
Nginx是业内常用的轻量服务器,做代理超稳,步骤也不复杂:
- 先在1.1.1.1上安装Nginx:
- Debian/Ubuntu系统:
sudo apt update && sudo apt install nginx - CentOS/RHEL系统:
sudo yum install nginx
- Debian/Ubuntu系统:
- 新建一个代理配置文件,比如:
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; } }
- 启用这个配置:
sudo ln -s /etc/nginx/sites-available/api-proxy /etc/nginx/sites-enabled/ - 检查配置是否合法:
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的服务器:
- 打开「服务器管理器」,安装「Web服务器(IIS)」,同时勾选「应用程序开发」里的「URL重写」模块,以及「应用程序请求路由(ARR)」。
- 打开IIS管理器,右键你的网站→「URL重写」→「添加规则」→选择「反向代理规则」,目标地址填
http://10.10.10.10,其余默认配置即可,保存后测试一下就能用。
选项2:用 tinyproxy 轻量代理(绿色免安装)
适合不想折腾IIS的情况:
- 下载tinyproxy的Windows绿色版,解压后找到
tinyproxy.conf配置文件。 - 找到
Allow开头的行,注释掉原来的限制(比如Allow 127.0.0.1),改成Allow 0.0.0.0/0(允许所有IP访问)。 - 找到
ReversePath配置,改成ReversePath "/" "http://10.10.10.10/"。 - 双击
tinyproxy.exe启动服务,同事访问http://1.1.1.1:8888(默认端口,可在配置里改)就能转发请求了。
方案三:Python 快速搭临时代理(仅开发测试用)
如果只是临时开发用,不想装复杂软件,用几行Python代码就能搞定:
- 在1.1.1.1上安装依赖:
pip install flask requests - 创建一个
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)
- 运行脚本:
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




