Jika aplikasi Anda tidak dapat memanggil OpenAPI karena pembatasan jaringan—misalnya, saat diterapkan di jaringan pribadi atau terisolasi oleh firewall—gunakan server proxy untuk mengakses jaringan publik. Alibaba Cloud SDK mendukung konfigurasi proxy penuh untuk HTTP dan HTTPS. Dengan mengatur alamat, port, dan parameter otentikasi proxy, Anda dapat mengarahkan permintaan OpenAPI melalui proxy. Topik ini menggunakan Tengine sebagai contoh untuk menunjukkan cara memanggil OpenAPI melalui proxy dengan SDK.
Contoh skenario
Misalnya, jika aplikasi Anda berada di jaringan pribadi dan harus mengakses jaringan publik melalui server proxy, Anda dapat mensimulasikan lingkungan ini dengan Instance ECS berikut dalam VPC:
-
Instance ECS A: Menjalankan aplikasi. Instans ini tidak dapat mengakses jaringan publik secara langsung dan hanya dapat mengakses sumber daya dalam VPC (IP privat: 10.0.0.115).
-
Instance ECS B: Berperan sebagai server proxy. Instans ini dapat mengakses jaringan publik dan berada dalam VPC yang sama dengan Instance ECS A (IP privat: 10.0.0.112).
CatatanJika Instans A dan B tidak berada dalam VPC yang sama, Anda dapat mengaktifkan konektivitas jaringan pribadi dengan menggunakan vpc peering connection atau enterprise edition transit router.
Siapkan server proxy
Pada contoh ini, Tengine digunakan sebagai server proxy dan diterapkan pada Instance ECS B.
Instal Tengine
-
Unduh dan ekstrak paketnya.
wget https://tengine.taobao.org/download/tengine-3.1.0.tar.gz tar zxvf tengine-3.1.0.tar.gz -
Perbarui paket sistem.
Alibaba Cloud Linux/CentOS
sudo yum update -yUbuntu/Debian
sudo apt-get update sudo apt-get upgrade -y -
Instal dependensi yang diperlukan.
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 -
Buat dan instal 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 -
Jalankan Tengine.
Jalankan perintah berikut untuk menemukan path executable Tengine. Misalnya, path tersebut mungkin
/root/tengine-3.1.0/objs/nginx.find / -name nginx 2>/dev/null | grep tengineJalankan Tengine dengan menjalankan executable-nya:
sudo /root/tengine-3.1.0/objs/nginx -
Verifikasi bahwa Tengine telah berhasil dijalankan.
# Periksa apakah proses Tengine ada. ps aux | grep nginx
Konfigurasi proxy HTTP dan HTTPS
-
Jalankan perintah berikut untuk mengedit file konfigurasi Tengine.
vim /usr/local/nginx/conf/nginx.confDalam file konfigurasi, tambahkan konten berikut ke modul
http:PeringatanKonfigurasi berikut hanya untuk referensi. Untuk beban kerja produksi, sesuaikan pengaturan proxy dengan skenario spesifik Anda.
# 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; } }Setelah menambahkan konten tersebut, simpan file-nya.
-
Muat ulang Tengine.
# Hentikan Tengine /usr/local/nginx/sbin/nginx -s stop # Terapkan konfigurasi /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf # Muat ulang Tengine /usr/local/nginx/sbin/nginx -s reload
Panggil API menggunakan proxy SDK
Terapkan kode aplikasi Anda pada Instance ECS A. Kode contoh berikut hanya untuk pengujian.
# 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', # Protokol harus konsisten dengan jenis proxy. Gunakan 'https' untuk proxy HTTPS dan 'http' untuk proxy HTTP.
)
ecs_client = EcsClient(config)
runtime_options = RuntimeOptions(
# http_proxy='http://10.0.0.112:8088', # Proxy HTTP: alamat IP dan port server proxy.
https_proxy='http://10.0.0.112:8089' # Proxy HTTPS: alamat IP dan port server proxy.
)
request = DescribeRegionsRequest(
accept_language='en-US',
)
response = ecs_client.describe_regions_with_options(request, runtime_options)
print(response.body)
Output berikut dikembalikan:
{'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'}}}