反向代理 API 接口地址,实现无需科学上网即可使用。另外为了安全已添加访问速率限制以及 HTTPS 支持。该脚本需部署在服务器端。
使用该脚本需要:
- 一台服务器(支持 CentOS 7 或 Ubuntu)
- 一个域名(已解析到服务器)
- 一个邮箱(用于 Let's Encrypt 证书申请)
# CentOS 7
bash -c "$(curl -fsSL https://raw.githubusercontent.com/AlakaSquasho/api_reverse_proxy/main/nginx_proxy_deploy_script.sh)"
# Ubuntu
curl -fsSL https://raw.githubusercontent.com/AlakaSquasho/api_reverse_proxy/main/nginx_proxy_deploy_script.sh | bash# CentOS 7
bash -c "$(curl -fsSL https://raw.githubusercontent.com/AlakaSquasho/api_reverse_proxy/main/nginx_proxy_deploy_script.sh)" uninstall
# Ubuntu
curl -fsSL https://raw.githubusercontent.com/AlakaSquasho/api_reverse_proxy/main/nginx_proxy_deploy_script.sh | bash uninstall- 下载脚本
curl -O https://raw.githubusercontent.com/AlakaSquasho/api_reverse_proxy/main/nginx_proxy_deploy_script.sh- 添加执行权限
chmod +x nginx_proxy_deploy_script.sh- 运行脚本
# 部署
./nginx_proxy_deploy_script.sh
# 卸载
./nginx_proxy_deploy_script.sh uninstall注意:脚本为幂等设计(会在第一次成功执行时记录状态),可安全重复执行。脚本会尽量跳过已完成的步骤(例如已安装的软件包、已申请的证书或已生成的配置),因此在出现中断后再次运行不会重复执行不必要的操作。
运行脚本后,您需要依次输入:
- 域名(例如:
mydomain.com) - 子域名前缀(默认:
api) - HTTPS 端口号(默认:
8443) - HTTP 端口号(默认:
8080) - 速率限制 [每分钟请求次数](默认:
100) - 突发请求限制(默认:
20) - SSL 证书申请用邮箱
部署完成后,您可以通过以下地址访问 API:
- 原始地址:
https://generativelanguage.googleapis.com - 代理地址:
https://api.mydomain.com:8443/gemini
- 原始地址:
https://api.openai.com - 代理地址:
https://api.mydomain.com:8443/openai
- 脚本会自动配置防火墙规则
- 保留现有防火墙规则(包括 SSH 等重要服务端口)
- 自动配置 HTTPS 证书
- 包含请求速率限制
- 自动配置证书续期
脚本采用幂等设计,可以安全地多次执行。脚本会记录每个关键步骤的完成状态,在下次运行时自动跳过已完成的步骤,避免重复安装或重复配置。这对于以下场景特别有用:
- 部署过程中由于网络或其他原因中断,可直接重新运行脚本继续部署
- 需要修改某些配置后重新部署时,删除对应的状态标记文件即可
所有状态标记文件存储在:/var/lib/api_reverse_proxy/
主要标记文件包括:
deps_installed- 依赖包已安装firewall_ports- 防火墙已配置(内容为 HTTPS_PORT:HTTP_PORT)ssl_obtained_<域名>- SSL 证书已申请(例:ssl_obtained_api.mydomain.com)nginx_configured- Nginx 配置已生成logrotate_configured- 日志轮转已配置ssl_renewal_configured- SSL 自动续期已配置services_started- 服务已启动
- 健康检查:
https://api.mydomain.com:8443/health - 状态监控:
https://api.mydomain.com:8443/status - 详细使用说明将在部署完成后生成
查看所有状态标记文件:
sudo ls -l /var/lib/api_reverse_proxy查看特定标记文件内容:
# 查看依赖安装状态
sudo cat /var/lib/api_reverse_proxy/deps_installed
# 查看防火墙配置信息(格式为 HTTPS_PORT:HTTP_PORT)
sudo cat /var/lib/api_reverse_proxy/firewall_ports
# 查看 SSL 证书状态
sudo cat /var/lib/api_reverse_proxy/ssl_obtained_api.mydomain.com
# 查看最后启动时间
sudo cat /var/lib/api_reverse_proxy/services_started如果需要重新执行某个步骤,删除对应的标记文件后重新运行脚本即可。
重新安装依赖:
sudo rm -f /var/lib/api_reverse_proxy/deps_installed
./nginx_proxy_deploy_script.sh重新配置防火墙:
sudo rm -f /var/lib/api_reverse_proxy/firewall_ports
./nginx_proxy_deploy_script.sh重新申请 SSL 证书:
# 注意:请确保域名已正确解析且 80/443 端口可达
sudo rm -f /var/lib/api_reverse_proxy/ssl_obtained_api.mydomain.com
./nginx_proxy_deploy_script.sh重新生成 Nginx 配置:
sudo rm -f /var/lib/api_reverse_proxy/nginx_configured
./nginx_proxy_deploy_script.sh重新配置日志轮转:
sudo rm -f /var/lib/api_reverse_proxy/logrotate_configured
./nginx_proxy_deploy_script.sh重新配置 SSL 自动续期:
sudo rm -f /var/lib/api_reverse_proxy/ssl_renewal_configured
./nginx_proxy_deploy_script.sh重新启动服务:
sudo rm -f /var/lib/api_reverse_proxy/services_started
./nginx_proxy_deploy_script.sh完全重新部署(删除所有标记文件):
sudo rm -rf /var/lib/api_reverse_proxy
./nginx_proxy_deploy_script.sh脚本支持完整的卸载功能,可以清理所有已安装的配置和文件。
方式一:一键卸载
# 如果已下载脚本
./nginx_proxy_deploy_script.sh uninstall
# 或通过 curl 一键卸载
bash -c "$(curl -fsSL https://raw.githubusercontent.com/AlakaSquasho/api_reverse_proxy/main/nginx_proxy_deploy_script.sh)" uninstall方式二:查看帮助
./nginx_proxy_deploy_script.sh --help卸载命令会执行以下操作:
- 停止 Nginx 服务 - 停止并禁用 Nginx
- 删除代理配置 - 删除
/etc/nginx/conf.d/api-proxy.conf - 删除 SSL 证书 - 删除 Let's Encrypt 证书文件
- 删除日志轮转配置 - 删除
/etc/logrotate.d/nginx-api - 删除部署状态 - 删除
/var/lib/api_reverse_proxy目录 - 移除自动续期任务 - 从 crontab 中移除 certbot 续期任务
- 卸载前会要求两次确认,防止误操作
- Nginx 和 Certbot 应用本身不会被卸载,可通过包管理器手动卸载
- SSL 证书会被删除,如需保留请先备份
- 卸载后所有配置都会被清除,无法恢复
如果需要完全卸载应用本身,可运行:
# CentOS 7
sudo yum remove -y nginx certbot
# Ubuntu
sudo apt-get remove -y nginx certbot- 确保域名已正确解析到服务器
- 确保服务器防火墙允许 HTTP(80) 和 HTTPS(443) 端口
- 建议在生产环境部署前先在测试环境验证
- 部署过程中如遇问题,请查看脚本生成的日志
- 状态标记文件需要 sudo 权限查看和修改
- 删除状态标记文件后重新运行脚本时,请确保环境满足相应操作的前置条件(如防火墙配置时请确保网络连接)
- 卸载是不可逆操作,请确保备份重要数据