Si des restrictions réseau empêchent votre application d'appeler OpenAPI, par exemple en cas de déploiement sur un réseau privé ou d'isolement par un pare-feu, utilisez un serveur proxy pour accéder au réseau public. Le SDK Alibaba Cloud prend pleinement en charge les configurations de proxy pour HTTP et HTTPS. En définissant l'adresse, le port et les paramètres d'authentification du proxy, vous pouvez acheminer les requêtes OpenAPI via ce dernier. Cette rubrique prend Tengine comme exemple pour illustrer comment appeler OpenAPI via un proxy à l'aide du SDK.
Scénario d'exemple
Par exemple, si votre application se trouve sur un réseau privé et doit accéder au réseau public via un serveur proxy, vous pouvez simuler cet environnement avec les instances ECS suivantes dans un VPC :
Instance ECS A : elle exécute l'application. Elle ne peut pas accéder directement au réseau public et n'a accès qu'aux ressources situées dans le VPC (IP privée : 10.0.0.115).
-
Instance ECS B : elle sert de serveur proxy. Elle peut accéder au réseau public et se trouve dans le même VPC que l'instance ECS A (IP privée : 10.0.0.112).
RemarqueSi les instances A et B ne sont pas dans le même VPC, vous pouvez établir une connectivité réseau privé au moyen d'une connexion de peering VPC ou d'un routeur de transit édition entreprise.
Configurer un serveur proxy
Dans cet exemple, Tengine est utilisé comme serveur proxy et déployé sur l'instance ECS B.
Installer Tengine
-
Téléchargez et extrayez le package.
wget https://tengine.taobao.org/download/tengine-3.1.0.tar.gz tar zxvf tengine-3.1.0.tar.gz -
Mettez à jour les packages système.
Alibaba Cloud Linux/CentOS
sudo yum update -yUbuntu/Debian
sudo apt-get update sudo apt-get upgrade -y -
Installez les dépendances requises.
Alibaba Cloud Linux/CentOS
sudo yum install pcre pcre-devel openssl openssl-devel zlib-devel -y sudo yum groupinstall "Development Tools" -yUbuntu/Debian
sudo apt-get install libpcre3 libpcre3-dev zlib1g-dev openssl libssl-dev build-essential -y -
Compilez et installez Tengine.
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 -
Démarrez Tengine.
Exécutez la commande suivante pour localiser le chemin de l'exécutable Tengine. Par exemple, le chemin peut être
/root/tengine-3.1.0/objs/nginx.find / -name nginx 2>/dev/null | grep tengineDémarrez Tengine en exécutant le fichier exécutable :
sudo /root/tengine-3.1.0/objs/nginx -
Vérifiez que Tengine a bien démarré.
# Check if the Tengine process exists. ps aux | grep nginx
Configurer le proxy HTTP et HTTPS
-
Exécutez la commande suivante pour modifier le fichier de configuration de Tengine.
vim /usr/local/nginx/conf/nginx.confDans le fichier de configuration, ajoutez le contenu suivant au module
http:AvertissementLa configuration ci-dessous est fournie à titre indicatif uniquement. Pour les charges de travail en production, configurez les paramètres du proxy en fonction de votre scénario spécifique.
# 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; } }Après avoir ajouté le contenu, enregistrez le fichier.
-
Rechargez Tengine.
# Stop Tengine /usr/local/nginx/sbin/nginx -s stop # Apply the configuration /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf # Reload Tengine /usr/local/nginx/sbin/nginx -s reload
Appeler une API via le proxy du SDK
Déployez le code de votre application sur l'instance ECS A. L'exemple de code suivant est destiné uniquement aux tests.
# 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', # The protocol must be consistent with the proxy type. Use 'https' for an HTTPS proxy and 'http' for an HTTP proxy.
)
ecs_client = EcsClient(config)
runtime_options = RuntimeOptions(
# http_proxy='http://10.0.0.112:8088', # HTTP proxy: IP address and port of the proxy server.
https_proxy='http://10.0.0.112:8089' # HTTPS proxy: IP address and port of the proxy server.
)
request = DescribeRegionsRequest(
accept_language='en-US',
)
response = ecs_client.describe_regions_with_options(request, runtime_options)
print(response.body)
Le résultat suivant est retourné :
{'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'}}}