全部產品
Search
文件中心

Alibaba Cloud SDK:HTTP代理配置實踐

更新時間:Jun 03, 2026

當您的應用程式因網路環境受限(例如內網部署、防火牆隔離)而無法正常調用OpenAPI時,可以通過Proxy 伺服器實現外部網路訪問。阿里雲SDK提供了完整的代理配置支援,能夠靈活適配HTTP和HTTPS協議。通過設定Proxy 伺服器的地址、連接埠及認證參數,開發人員能夠實現OpenAPI請求的統一代理轉寄,從而成功調用OpenAPI。本文以使用Tengine配置代理為例,為您介紹在SDK中如何通過代理調用OpenAPI。

情境樣本

例如,如果您的應用程式部署在內網,並且需要通過Proxy 伺服器實現對公網的訪問,以下將通過VPC類型的ECS執行個體進行類比:

  • ECS執行個體A:部署應用程式,無法直接存取公網,僅能通過VPC內網訪問資源(私網IP:10.0.0.115)。

  • ECS執行個體B:作為Proxy 伺服器,可訪問公網,並與ECS執行個體A同屬一個VPC(私網IP:10.0.0.112)。

    說明

    若執行個體A和B不在同一VPC,可通過VPC對等串連企業版轉寄路由器實現內網互連。

搭建Proxy 伺服器

本文選擇Tengine作為Proxy 伺服器並在ECS執行個體B部署。

安裝Tengine

  1. 下載並解壓。

    wget https://tengine.taobao.org/download/tengine-3.1.0.tar.gz
    tar zxvf tengine-3.1.0.tar.gz
    
  2. 更新升級依賴庫。

    Alibaba Cloud Linux/CentOS

    sudo yum update -y
    

    Ubuntu/Debian

    sudo apt-get update 
    sudo apt-get upgrade -y
    
  3. 安裝所需依賴。

    Alibaba Cloud Linux/CentOS

    sudo yum install pcre pcre-devel openssl openssl-devel zlib-devel -y
    sudo yum groupinstall "Development Tools" -y
    

    Ubuntu/Debian

    sudo apt-get install libpcre3 libpcre3-dev zlib1g-dev openssl libssl-dev build-essential -y 
    
  4. 編譯安裝。

    cd tengine-3.1.0
    ./configure --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --add-module=./modules/ngx_http_proxy_connect_module
    make && make install
  5. 啟動Tengine。

    通過以下命令查詢Tengine可執行檔位置,例如Tengine可以執行檔案位置為/root/tengine-3.1.0/objs/nginx

    find / -name nginx 2>/dev/null | grep tengine

    運行Tengine可執行檔啟動Tengine:

    sudo /root/tengine-3.1.0/objs/nginx
  6. 驗證是否啟動成功。

    # 查看是否存在Tengine進程
    ps aux | grep nginx

配置HTTP(S)代理

  1. 執行以下命令編輯Tengine設定檔。

    vim /usr/local/nginx/conf/nginx.conf

    在設定檔http模組中添加如下內容:

    警告

    以下僅作為參考,線上業務請根據具體的情境制定代理配置資訊。

        # HTTPS proxy
        server {
            listen 8089;
            access_log  /var/log/host.access.log;
            access_log  "pipe:rollback /var/log/host.access_log interval=1d baknum=7 maxsize=2G";
            # dns resolver used by forward proxying
    	# forward proxy for CONNECT request
            proxy_connect;
            proxy_connect_allow            443 563;
            proxy_connect_connect_timeout  10s;
            proxy_connect_read_timeout     10s;
            proxy_connect_send_timeout     10s;
            # forward proxy for non-CONNECT request
            location / {
                proxy_pass $scheme://$http_host$request_uri;
            }
        }
        # HTTP proxy
        server {
            listen 8088;
            location / {
                proxy_pass $scheme://$http_host$request_uri;
            }
        }

    添加完成之後儲存檔案。

  2. 重新載入Tengine。

    #關閉Tengine
    /usr/local/nginx/sbin/nginx -s stop
    #使配置生效
    /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
    #重新啟動Tengine
    /usr/local/nginx/sbin/nginx -s reload

使用SDK代理能力調用API

在ECS執行個體A中部署業務代碼,以下範例程式碼僅供測試使用。

# pip install alibabacloud_ecs20140526
import os
from alibabacloud_ecs20140526.client import Client as EcsClient
from alibabacloud_ecs20140526.models import DescribeRegionsRequest
from alibabacloud_tea_openapi.models import Config
from alibabacloud_tea_util.models import RuntimeOptions
config = Config(
    access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
    endpoint='ecs-cn-hangzhou.aliyuncs.com',
    protocol='https', # 與代理類型保持一致,https對應HTTPS代理;http對應HTTP代理
)
ecs_client = EcsClient(config)
runtime_options = RuntimeOptions(
    # http_proxy='http://10.0.0.112:8088', # HTTP代理,Proxy 伺服器IP及連接埠
    https_proxy='http://10.0.0.112:8089'  # HTTPS代理,Proxy 伺服器IP及連接埠
)
request = DescribeRegionsRequest(
    accept_language='en-US',
)
response = ecs_client.describe_regions_with_options(request, runtime_options)
print(response.body)

調用結果如下:

{'headers': {'server': 'nginx/1.24.0 (Ubuntu)', 'date': 'Mon, 26 May 2025 10:04:19 GMT', 'content-type': 'application/json;charset=utf-8', 'transfer-encoding': 'chunked', 'connection': 'keep-alive', 'vary': 'Accept-Encoding, Accept-Encoding', 'access-control-allow-origin': '*', 'access-control-expose-headers': '*', 'x-acs-request-id': '39B6068B-E4F3-5FC4-3817-ED3D62BAEFCA', 'x-acs-trace-id': 'aa08b2d7a0f35d1f054164675f23cc98', 'statusCode': 200, 'body': {'Regions': {'Region': [{'LocalName': 'China (Qingdao)', 'RegionEndpoint': 'ecs.cn-qingdao.aliyuncs.com', 'RegionId': 'cn-qingdao'}, {'LocalName': 'China (Beijing)', 'RegionEndpoint': 'ecs.cn-beijing.aliyuncs.com', 'RegionId': 'cn-beijing'}, {'LocalName': 'China (Zhangjiakou)', 'RegionEndpoint': 'ecs.cn-zhangjiakou.aliyuncs.com', 'RegionId': 'cn-zhangjiakou'}, {'LocalName': 'China (Hohhot)', 'RegionEndpoint': 'ecs.cn-huhehaote.aliyuncs.com', 'RegionId': 'cn-huhehaote'}, {'LocalName': 'China (Ulanqab)', 'RegionEndpoint': 'ecs.cn-wulanchabu.aliyuncs.com', 'RegionId': 'cn-wulanchabu'}, {'LocalName': 'China (Hangzhou)', 'RegionEndpoint': 'ecs.aliyuncs.com', 'RegionId': 'cn-hangzhou'}, {'LocalName': 'China (Shanghai)', 'RegionEndpoint': 'ecs.cn-shanghai.aliyuncs.com', 'RegionId': 'cn-shanghai'}, {'LocalName': 'China (Nanjing - Local Region)', 'RegionEndpoint': 'ecs.cn-nanjing.aliyuncs.com', 'RegionId': 'cn-nanjing'}, {'LocalName': 'China (Shenzhen)', 'RegionEndpoint': 'ecs.cn-shenzhen.aliyuncs.com', 'RegionId': 'cn-shenzhen'}, {'LocalName': 'China (Heyuan)', 'RegionEndpoint': 'ecs.cn-heyuan.aliyuncs.com', 'RegionId': 'cn-heyuan'}, {'LocalName': 'China (Guangzhou)', 'RegionEndpoint': 'ecs.cn-guangzhou.aliyuncs.com', 'RegionId': 'cn-guangzhou'}, {'LocalName': 'China (Fuzhou – Local Region)', 'RegionEndpoint': 'ecs.cn-fuzhou.aliyuncs.com', 'RegionId': 'cn-fuzhou'}, {'LocalName': 'China (Wuhan – Local Region)', 'RegionEndpoint': 'ecs.cn-wuhan-lr.aliyuncs.com', 'RegionId': 'cn-wuhan-lr'}, {'LocalName': 'China (Chengdu)', 'RegionEndpoint': 'ecs.cn-chengdu.aliyuncs.com', 'RegionId': 'cn-chengdu'}, {'LocalName': 'China (Hong Kong)', 'RegionEndpoint': 'ecs.cn-hongkong.aliyuncs.com', 'RegionId': 'cn-hongkong'}, {'LocalName': 'Japan (Tokyo)', 'RegionEndpoint': 'ecs.ap-northeast-1.aliyuncs.com', 'RegionId': 'ap-northeast-1'}, {'LocalName': 'South Korea (Seoul)', 'RegionEndpoint': 'ecs.ap-northeast-2.aliyuncs.com', 'RegionId': 'ap-northeast-2'}, {'LocalName': 'Singapore', 'RegionEndpoint': 'ecs.ap-southeast-1.aliyuncs.com', 'RegionId': 'ap-southeast-1'}, {'LocalName': 'Malaysia (Kuala Lumpur)', 'RegionEndpoint': 'ecs.ap-southeast-3.aliyuncs.com', 'RegionId': 'ap-southeast-3'}, {'LocalName': 'Philippines (Manila)', 'RegionEndpoint': 'ecs.ap-southeast-6.aliyuncs.com', 'RegionId': 'ap-southeast-6'}, {'LocalName': 'Indonesia (Jakarta)', 'RegionEndpoint': 'ecs.ap-southeast-5.aliyuncs.com', 'RegionId': 'ap-southeast-5'}, {'LocalName': 'Thailand (Bangkok)', 'RegionEndpoint': 'ecs.ap-southeast-7.aliyuncs.com', 'RegionId': 'ap-southeast-7'}, {'LocalName': 'US (Virginia)', 'RegionEndpoint': 'ecs.us-east-1.aliyuncs.com', 'RegionId': 'us-east-1'}, {'LocalName': 'US (Silicon Valley)', 'RegionEndpoint': 'ecs.us-west-1.aliyuncs.com', 'RegionId': 'us-west-1'}, {'LocalName': 'Mexico', 'RegionEndpoint': 'ecs.na-south-1.aliyuncs.com', 'RegionId': 'na-south-1'}, {'LocalName': 'UK (London)', 'RegionEndpoint': 'ecs.eu-west-1.aliyuncs.com', 'RegionId': 'eu-west-1'}, {'LocalName': 'UAE (Dubai)', 'RegionEndpoint': 'ecs.me-east-1.aliyuncs.com', 'RegionId': 'me-east-1'}, {'LocalName': 'Germany (Frankfurt)', 'RegionEndpoint': 'ecs.eu-central-1.aliyuncs.com', 'RegionId': 'eu-central-1'}]}, 'RequestId': 'F90A5B33-FE86-55EF-B453-052AD7B0440F'}}}