Alamat IP OSS bersifat dinamis, sehingga dapat menyebabkan daftar izin firewall atau integrasi berbasis IP tetap tidak berfungsi. Untuk mengakses OSS melalui alamat IP yang stabil, terapkan reverse proxy Nginx pada instance ECS dengan alamat IP publik tetap (EIP).
Cara kerja
Instance ECS dengan alamat IP publik tetap berfungsi sebagai titik masuk lalu lintas. Nginx meneruskan permintaan ke OSS sebagai berikut:
-
Klien meminta resource OSS melalui alamat IP publik tetap (EIP) instance ECS.
-
Nginx pada instance ECS menerima permintaan tersebut.
-
Nginx meneruskan permintaan ke bucket OSS tujuan.
-
OSS memproses permintaan dan mengembalikan respons ke Nginx.
-
Nginx mengembalikan respons ke klien.
Konfigurasi reverse proxy ECS
Langkah 1: Buat instance ECS
Buat instance ECS untuk menjalankan reverse proxy Nginx.
-
Buat instance ECS dengan pengaturan berikut. Gunakan nilai default untuk parameter lainnya.
-
Payment Option: Pilih Pay-As-You-Go.
-
Region: Pilih wilayah yang sama dengan bucket OSS yang ingin Anda proxy. Hal ini memungkinkan Anda menggunakan titik akhir internal untuk mengurangi biaya lalu lintas.
-
Network and zone: Pilih VPC dan zona ketersediaan default.
-
Instance Type: Klik All Instance Types, lalu cari dan pilih
ecs.e-c1m2.large.CatatanJika tipe instans ini habis, pilih tipe instans lainnya.
-
Image: Pilih Public Image > Alibaba Cloud Linux (Alibaba Cloud Linux 3.2104 LTS 64-bit).
-
System disk: Atur kapasitas disk ESSD Entry menjadi 40 GiB.
-
Public IP: Pilih Assign Public IPv4 Address.
-
Bandwidth Billing: Pilih Pay-by-traffic untuk mengurangi biaya.
-
Peak Bandwidth: Pilih 5 Mbps atau lebih tinggi.
-
Security group: Pilih Create Security Group, dan di bawah Open IPv4 Ports/Protocols, pilih HTTP (TCP:80) untuk membuka port pendengar Nginx.
-
Logon Credentials: Pilih Custom Password, atur username menjadi root, dan buat Logon Password. Simpan kata sandi tersebut dengan aman.
-
Langkah 2: Konfigurasi reverse proxy Nginx
Instal Nginx pada instance ECS dan konfigurasikan aturan reverse proxy.
-
Instal Nginx.
yum install -y nginx -
Untuk manajemen yang lebih mudah, buat file konfigurasi terpisah di direktori
/etc/nginx/conf.d/, misalnyaoss_proxy.conf.vi /etc/nginx/conf.d/oss_proxy.confSalin templat konfigurasi berikut ke dalam file tersebut dan ganti nilai placeholder sesuai petunjuk dalam komentar.
CatatanSaat Anda mengakses file melalui titik akhir internal bucket, browser akan memaksa unduhan alih-alih menampilkannya secara inline. Untuk mengaktifkan pratinjau inline, atur header
Hostke nama domain kustom yang dipetakan ke bucket tersebut.# Definisikan backend OSS dan aktifkan reuse koneksi untuk meningkatkan performa. upstream oss_backend { # [Wajib] Ganti dengan titik akhir internal bucket Anda. server your-bucket.oss-cn-hangzhou-internal.aliyuncs.com:80; # Jumlah koneksi keep-alive yang direkomendasikan. Sesuaikan berdasarkan jumlah permintaan konkuren. keepalive 64; } # Definisikan format log produksi yang mencakup informasi penting seperti waktu respons upstream. log_format production '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" ' 'rt=$request_time uct="$upstream_connect_time" uht="$upstream_header_time" urt="$upstream_response_time"'; server { listen 80; # [Wajib] Ganti dengan alamat IP publik instance ECS atau nama domain yang mengarah ke alamat IP tersebut. server_name your_ecs_public_ip_or_domain; # Lokasi dan format log akses. access_log /var/log/nginx/oss_proxy.access.log production; error_log /var/log/nginx/oss_proxy.error.log; # Gunakan resolver DNS dinamis agar Nginx mengetahui perubahan alamat IP di backend OSS. resolver 100.100.2.136 100.100.2.138 valid=60s; # Titik akhir pemeriksaan kesehatan untuk load balancer atau sistem pemantauan. location /health { access_log off; return 200 "healthy"; } location / { # Teruskan permintaan ke backend OSS upstream yang didefinisikan di atas. proxy_pass http://oss_backend; # Pengaturan penting: Pastikan koneksi HTTP/1.1 dan keep-alive aktif. proxy_http_version 1.1; proxy_set_header Connection ""; # Pengaturan penting: Atur header Host ke titik akhir internal bucket agar validasi Signature V4 berhasil. # [Wajib] Ganti dengan titik akhir internal bucket Anda. proxy_set_header Host "your-bucket.oss-cn-hangzhou-internal.aliyuncs.com"; # Teruskan alamat IP asli klien. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; # Atur nilai timeout proxy. proxy_connect_timeout 10s; proxy_send_timeout 30s; proxy_read_timeout 30s; # Ukuran maksimum unggahan file. Nilai 0 berarti tanpa batas. Atur nilai ini sesuai kebutuhan bisnis Anda. client_max_body_size 1024m; } }Simpan dan keluar dari editor.
-
Periksa sintaksis file konfigurasi Nginx.
nginx -tJika output mencakup
syntax is okdantest is successful, konfigurasi tersebut valid. -
Jalankan layanan Nginx untuk menerapkan konfigurasi.
systemctl start nginx
Verifikasi reverse proxy
Verifikasi proxy berdasarkan izin akses bucket Anda.
Bucket public-read dan public-read-write
Pada browser, akses http://ecs_public_ip/object_path. Ganti ecs_public_ip dengan alamat IP publik instance ECS (dari ECS console) dan object_path dengan path objek di dalam bucket. Misalnya, untuk file dest.jpg di direktori exampledir, object_path-nya adalah exampledir/dest.jpg.
Browser mengakses file dest.jpg dan membuka kotak dialog Save sistem Anda, sehingga Anda dapat menyimpan file tersebut ke komputer.
Bucket privat
Dapatkan URL yang ditandatangani untuk objek tersebut dari konsol. Untuk detail tanda tangan, lihat Signature Version 4 (direkomendasikan).
-
Buka daftar Buckets dan klik bucket target.
-
Untuk objek yang ingin diakses, klik View Details di kolom Actions.
-
Klik Copy Object URL. Pada URL yang disalin, ganti https dengan http, dan ganti nama domain bucket dengan alamat IP publik instance ECS Anda.
-
Akses URL yang telah dimodifikasi tersebut di browser Anda.
Browser membuka kotak dialog Save As untuk file dest, yang menegaskan bahwa URL yang ditandatangani berhasil mengakses objek privat dan memicu unduhan.
Rekomendasi produksi
Terapkan praktik berikut untuk memastikan stabilitas, keamanan, dan efisiensi biaya di lingkungan produksi.
Praktik terbaik
-
Arsitektur ketersediaan tinggi: Gunakan SLB dengan beberapa instance ECS di berbagai zona ketersediaan untuk menghilangkan single point of failure.
-
Aktifkan HTTPS: Terapkan HTTPS untuk mengamankan data saat transit. Konfigurasikan sertifikat SSL untuk Nginx dan alihkan HTTP ke HTTPS. Contoh konfigurasi:
CatatanBuka port 443 di security group ECS Anda. Tambah, ubah, atau hapus aturan grup keamanan.
# ... Konfigurasi upstream dan log_format tetap tidak berubah. ... # Blok server HTTP: Alihkan semua permintaan HTTP ke HTTPS. server { listen 80; # [Wajib] Ganti dengan alamat IP publik instance ECS atau nama domain yang mengarah ke alamat IP tersebut. server_name your_ecs_public_ip_or_domain; # Alihkan semua permintaan HTTP ke HTTPS menggunakan redirect 301. return 301 https://$host$request_uri; } # Blok server HTTPS: Tangani layanan proxy sesungguhnya. server { # Dengarkan koneksi SSL pada port 443. listen 443 ssl http2; # [Wajib] Ganti dengan alamat IP publik instance ECS atau nama domain yang mengarah ke alamat IP tersebut. server_name your_ecs_public_ip_or_domain; # --- Konfigurasi sertifikat SSL --- # [Wajib] Ganti dengan path ke file sertifikat SSL dan file kunci privat Anda. ssl_certificate /path/to/your/fullchain.pem; ssl_certificate_key /path/to/your/private.key; # --- Peningkatan keamanan SSL --- ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384'; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; # Lokasi dan format log akses. access_log /var/log/nginx/oss_proxy.access.log production; error_log /var/log/nginx/oss_proxy.error.log; # Resolusi DNS dinamis (sama seperti konfigurasi sebelumnya). resolver 100.100.2.136 100.100.2.138 valid=60s; # Titik akhir pemeriksaan kesehatan (sama seperti konfigurasi sebelumnya). location /health { access_log off; return 200 "healthy"; } location / { # ... Semua pengaturan proxy_* sama seperti konfigurasi sebelumnya. ... proxy_pass http://oss_backend; proxy_http_version 1.1; proxy_set_header Connection ""; # [Wajib] Ganti dengan titik akhir internal bucket Anda. proxy_set_header Host "your-bucket.oss-cn-hangzhou-internal.aliyuncs.com"; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; # Tambahkan header X-Forwarded-Proto untuk memberi tahu backend bahwa klien menggunakan HTTPS. proxy_set_header X-Forwarded-Proto $scheme; proxy_connect_timeout 10s; proxy_send_timeout 30s; proxy_read_timeout 30s; client_max_body_size 1024m; } } -
Konfigurasi buffer proxy: Untuk transfer file besar, aktifkan buffering proxy guna mengoptimalkan penggunaan memori dan mencegah klien lambat mempertahankan koneksi backend. Tambahkan konfigurasi berikut ke blok location:
location / { # ... konfigurasi proxy_* lainnya ... # Aktifkan buffering proxy dan atur jumlah serta ukuran buffer. proxy_buffering on; proxy_buffers 8 128k; proxy_buffer_size 128k; proxy_busy_buffers_size 256k; } -
Gunakan EIP: Ikatkan EIP ke titik masuk proxy Anda (SLB atau ECS) untuk mendapatkan alamat IP publik yang stabil.
-
Gunakan nama domain untuk akses: Petakan nama domain ke IP proxy dan layani lalu lintas melalui domain tersebut. Hal ini menyederhanakan operasi dan penskalaan di masa depan.
Strategi toleransi kesalahan
-
Pemeriksaan kesehatan: Konfigurasikan load balancer Anda untuk memeriksa titik akhir
/healthNginx dan secara otomatis mengisolasi instance yang gagal. -
Pengaturan timeout: Sesuaikan
proxy_connect_timeoutdanproxy_read_timeoutuntuk mencegah penumpukan koneksi saat respons OSS lambat. -
Mekanisme retry: Terapkan retry di lapisan aplikasi untuk error 5xx jika klien Anda mendukungnya.
Pencegahan risiko
-
Penguatan keamanan: Di security group dan ACL jaringan Anda, izinkan hanya IP dan port yang diperlukan. Pertimbangkan untuk men-deploy WAF di depan proxy guna melindungi dari serangan web.
-
Pemantauan dan peringatan: Pantau log Nginx dan metrik utama (latensi permintaan, tingkat error, CPU, memori, utilisasi jaringan). Tetapkan ambang batas peringatan untuk metrik-metrik tersebut.
-
Manajemen perubahan dan rollback: Uji perubahan konfigurasi sebelum deployment. Simpan versi historis untuk rollback cepat.
FAQ
Pratinjau file di browser
OSS memaksa unduhan untuk gambar dan file web yang diakses melalui nama domain default. Untuk menampilkan pratinjau file di browser, petakan nama domain kustom ke bucket dan gunakan dalam konfigurasi Nginx Anda. Akses OSS menggunakan nama domain kustom.
Penyelesaian error 403 Forbidden
Error 403 biasanya menunjukkan masalah validasi signature atau izin. Periksa hal berikut:
-
Periksa konfigurasi Nginx: Pastikan nilai yang diatur oleh direktif
proxy_set_header Hostpersis sama dengan titik akhir internal bucket. -
Periksa pembuatan signature: Saat membuat URL yang ditandatangani, pastikan header
Hostyang digunakan untuk menghitung signature cocok dengan headerHostdalam konfigurasi Nginx Anda. -
Periksa izin bucket: Periksa apakah kebijakan bucket atau kebijakan RAM mengizinkan operasi yang diperlukan.
-
Periksa otorisasi peran ECS: Jika aplikasi Anda mengakses OSS menggunakan instance RAM role ECS, pastikan peran tersebut memiliki izin yang diperlukan untuk bucket target.
Penyelesaian error 413 Request Entity Too Large
Nginx mengembalikan error ini ketika file yang diunggah melebihi batas ukuran. Tingkatkan nilai client_max_body_size di blok server atau location (misalnya, client_max_body_size 2048m; untuk batas hingga 2 GB), lalu reload Nginx.
Penyelesaian error 502 Bad Gateway
Error 502 berarti Nginx tidak dapat menerima respons valid dari OSS. Kemungkinan penyebabnya:
-
Masalah resolusi DNS: Pastikan konfigurasi Nginx mencakup direktif
resolver. Tanpa direktif ini, Nginx mungkin menggunakan alamat IP yang di-cache dan sudah kedaluwarsa. -
Konektivitas jaringan: Periksa aturan outbound security group dan ACL jaringan ECS Anda. Pastikan lalu lintas ke port 80 titik akhir OSS diizinkan.
-
Konfigurasi titik akhir salah: Verifikasi bahwa titik akhir OSS di
proxy_passdanproxy_set_header Hostbenar.
Proxy beberapa bucket dengan satu Nginx
Gunakan direktif map Nginx untuk memilih bucket backend secara dinamis berdasarkan header Host permintaan.
# /etc/nginx/conf.d/multi_oss_proxy.conf
# Petakan header Host secara dinamis ke titik akhir internal OSS.
map $http_host $oss_backend_host {
# [Wajib] Petakan a.example.com ke titik akhir internal bucket-a.
"a.example.com" "bucket-a.oss-cn-hangzhou-internal.aliyuncs.com";
# [Wajib] Petakan b.example.com ke titik akhir internal bucket-b.
"b.example.com" "bucket-b.oss-cn-shenzhen-internal.aliyuncs.com";
# Nilai default. Dapat dikosongkan atau diarahkan ke bucket default.
default "";
}
server {
listen 80;
# Dengarkan beberapa nama domain.
server_name a.example.com b.example.com;
# ... Pengaturan lain seperti logging, resolver, dll. ...
location / {
# Jika hasil pemetaan kosong, kembalikan 404.
if ($oss_backend_host = "") {
return 404;
}
# Atur proxy_pass dan header Host secara dinamis.
proxy_pass http://$oss_backend_host;
proxy_set_header Host $oss_backend_host;
# ... konfigurasi proxy_* lainnya ...
}
}