Aktifkan HTTPS pada server Nginx atau Tengine Anda dengan menginstal sertifikat SSL. Panduan ini akan memandu Anda melalui proses mengunduh paket sertifikat, membuka Port 443, mengonfigurasi blok server Nginx, dan memverifikasi hasilnya.
Apa yang akan Anda lakukan:
Unduh paket sertifikat dari Konsol SSL Certificates dan unggah ke server Anda
Buka Port 443 di security group dan firewall sistem Anda
Tambahkan blok server HTTPS ke konfigurasi Nginx Anda
Muat ulang Nginx dan konfirmasi bahwa sertifikat berfungsi
Langkah-langkah ini juga berlaku untuk Tengine, yang kompatibel dengan konfigurasi Nginx.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Sertifikat SSL yang dikeluarkan oleh Otoritas Sertifikat (CA) tepercaya. Jika sertifikat telah kedaluwarsa atau hampir kedaluwarsa, perpanjang terlebih dahulu.
Akun
rootatau akun dengan hak istimewasudopada serverRekaman DNS domain yang dikonfigurasi untuk mengarah ke Alamat IP publik server
Sertifikat yang mencakup semua domain yang ingin Anda amankan
Aturan cakupan domain:
| Jenis cakupan | Apa yang dilindungi | Apa yang tidak dilindungi |
|---|---|---|
Cocok persis (example.com) | example.com saja | www.example.com atau subdomain apa pun |
Cocok persis (www.example.com) | www.example.com saja | Domain root atau subdomain lainnya |
Wildcard (*.example.com) | Subdomain tingkat pertama: www.example.com, a.example.com | Domain root example.com, subdomain multi-level seperti a.b.example.com |
Untuk melindungi subdomain multi-level sepertia.b.example.com, bidang Bound Domains harus berisi domain tersebut secara eksplisit atau wildcard yang sesuai seperti*.b.example.com.
Untuk menambah atau mengubah nama domain, beli sertifikat komersial atau tambahkan dan ganti nama domain.
Langkah 1: Siapkan sertifikat SSL
Buka halaman SSL Certificates. Pada kolom Actions untuk sertifikat target, klik Download Certificate. Di tab Download, pilih Nginx sebagai Server Type dan unduh paketnya.
Ekstrak paket yang telah diunduh:
Jika paket berisi file sertifikat (
.pem) dan file kunci privat (.key), simpan keduanya. Anda akan memerlukannya pada langkah berikutnya.Jika paket hanya berisi file
.pemdan tidak ada file.key, gunakan file kunci privat yang Anda simpan secara lokal saat membuat Permintaan Penandatanganan Sertifikat (CSR).
Jika Anda menggunakan OpenSSL atau keytool untuk membuat CSR, kunci privat hanya disimpan di mesin lokal Anda — tidak termasuk dalam paket yang diunduh. Jika kunci privat hilang, sertifikat tidak dapat digunakan. Beli sertifikat komersial baru dan buat CSR serta kunci privat baru.
Unggah file
.pemdan.keyke server Anda. Simpan di direktori yang aman, misalnya/etc/ssl/cert.Gunakan fitur unggah file dari tool login remote seperti PuTTY, Xshell, atau WinSCP. Jika server Anda adalah instans Alibaba Cloud Elastic Compute Service (ECS), lihat Unggah atau unduh file.
Langkah 2: Buka Port 443
Traffic HTTPS menggunakan Port TCP 443. Pastikan port tersebut terbuka baik di security group cloud maupun firewall sistem Anda.
Periksa apakah Port 443 terbuka
Jalankan perintah berikut untuk menguji konektivitas pada Port 443. Ganti <your_server_public_ip> dengan Alamat IP publik server Anda.
RHEL/CentOS
command -v nc > /dev/null 2>&1 || sudo yum install -y nc
# Ganti <your_server_public_ip> dengan Alamat IP publik server Anda.
sudo ss -tlnp | grep -q ':443 ' || sudo nc -l 443 & sleep 1; nc -w 3 -vz <your_server_public_ip> 443Jika output-nya Ncat: Connected to <your_server_public_ip>:443, Port 443 terbuka. Jika tidak, ikuti langkah-langkah di bawah ini.
Debian/Ubuntu
command -v nc > /dev/null 2>&1 || sudo apt-get install -y netcat
# Ganti <your_server_public_ip> dengan Alamat IP publik server Anda.
sudo ss -tlnp | grep -q ':443 ' || sudo nc -l -p 443 & sleep 1; nc -w 3 -vz <your_server_public_ip> 443Jika output-nya Connection to <your_server_public_ip> port [tcp/https] succeeded! atau [<your_server_public_ip>] 443 (https) open, Port 443 terbuka. Jika tidak, ikuti langkah-langkah di bawah ini.
Buka Port 443 di security group Anda
Jika server Anda berjalan di platform cloud, security group-nya harus mengizinkan lalu lintas inbound TCP pada Port 443. Langkah-langkah di bawah ini menggunakan Alibaba Cloud ECS sebagai contoh. Untuk platform cloud lainnya, rujuk dokumentasi mereka.
Buka halaman instans Elastic Compute Service (ECS) dan klik nama instans target. Di bagian Security Group Details, tambahkan aturan dengan pengaturan berikut lalu klik Add a security group rule:
| Bidang | Nilai |
|---|---|
| Action | Allow |
| Protocol | Custom TCP |
| Destination (Current Instance) | HTTPS (443) |
| Source | 0.0.0.0/0 (anywhere) |
Buka Port 443 di firewall sistem Anda
Jalankan perintah berikut untuk mengidentifikasi firewall aktif Anda:
if command -v systemctl >/dev/null 2>&1 && systemctl is-active --quiet firewalld; then
echo "firewalld"
elif command -v ufw >/dev/null 2>&1 && sudo ufw status | grep -qw active; then
echo "ufw"
elif command -v nft >/dev/null 2>&1 && sudo nft list ruleset 2>/dev/null | grep -q 'table'; then
echo "nftables"
elif command -v systemctl >/dev/null 2>&1 && systemctl is-active --quiet iptables; then
echo "iptables"
elif command -v iptables >/dev/null 2>&1 && sudo iptables -L 2>/dev/null | grep -qE 'REJECT|DROP|ACCEPT'; then
echo "iptables"
else
echo "none"
fiJika output-nya none, tidak diperlukan tindakan firewall. Jika tidak, jalankan perintah sesuai jenis firewall Anda:
firewalld
sudo firewall-cmd --permanent --add-port=443/tcp && sudo firewall-cmd --reloadufw
sudo ufw allow 443/tcpnftables
sudo nft add table inet filter 2>/dev/null
sudo nft add chain inet filter input '{ type filter hook input priority 0; }' 2>/dev/null
sudo nft add rule inet filter input tcp dport 443 counter accept 2>/dev/nulliptables
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPTUntuk mempertahankan aturan iptables setelah reboot:
RHEL/CentOS:
sudo yum install -y iptables-services sudo service iptables saveDebian/Ubuntu:
sudo apt-get install -y iptables-persistent sudo iptables-save | sudo tee /etc/iptables/rules.v4 >/dev/null
Langkah 3: Instal sertifikat SSL pada Nginx
Instal modul SSL
Jalankan perintah berikut. Jika output-nya --with-http_ssl_module, modul SSL sudah terinstal dan Anda dapat langsung menuju Konfigurasi sertifikat SSL.
nginx -V 2>&1 | grep -o -- '--with-http_ssl_module'Jika sistem mengembalikannginx: command not found, gunakan jalur instalasi lengkapnya, misalnya:/usr/local/nginx/sbin/nginx -V 2>&1 | grep -o -- '--with-http_ssl_module'.
Jika modul SSL belum terpasang, instal menggunakan salah satu metode di bawah ini sesuai cara instalasi Nginx Anda.
Menambahkan modul SSL dapat menyebabkan gangguan singkat pada layanan Nginx. Cadangkan konfigurasi dan data Nginx Anda terlebih dahulu, dan lakukan perubahan ini pada jam sepi.
Menggunakan package manager
Jalankan perintah berikut di terminal server Anda:
RHEL/CentOS
# Tambahkan repositori resmi Nginx.
sudo tee /etc/yum.repos.d/nginx.repo <<EOF
[nginx-stable]
name=nginx stable repo
baseurl=https://nginx.org/packages/centos/\$releasever/\$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF
# Upgrade Nginx.
sudo yum upgrade nginxDebian/Ubuntu
# Upgrade Nginx.
sudo apt-get update
sudo apt-get install --only-upgrade nginxKompilasi dari source
Instal dependensi build.
RHEL/CentOS
sudo yum install -y gcc pcre-devel zlib-devel openssl-develDebian/Ubuntu
sudo apt-get update sudo apt-get install -y build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-devCatat parameter kompilasi saat ini.
nginx -VSalin semua parameter yang muncul setelah
configure arguments:. Anda akan memerlukannya di langkah 4.Unduh kode sumber untuk versi Nginx Anda saat ini. Jalankan
nginx -vuntuk memeriksa versinya (contoh: 1.14.2). Lalu unduh dan ekstrak paket sumbernya:wget http://nginx.org/download/nginx-1.14.2.tar.gz tar -zxvf nginx-1.14.2.tar.gz cd nginx-1.14.2Kompilasi ulang Nginx dengan modul SSL. Tambahkan
--with-http_ssl_moduleke parameter yang telah Anda catat, lalu kompilasi ulang:Jika Anda melihat
error: 'ENGINE_by_id' is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations], jalankanmake CFLAGS='-Wno-error=deprecated-declarations'sebagai gantinya.# Pertahankan semua parameter asli agar modul yang ada tidak hilang. ./configure <Original parameters> --with-http_ssl_module makeGanti binary Nginx. Cadangkan binary aslinya (misalnya
/usr/local/nginx/sbin/nginx):# Ganti /usr/local/nginx/sbin/nginx dengan jalur aktual ke binary nginx Anda. sudo cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bakTimpa dengan binary hasil kompilasi baru:
# Ganti /usr/local/nginx/sbin/nginx dengan jalur aktual ke binary nginx Anda. sudo cp objs/nginx /usr/local/nginx/sbin/nginxVerifikasi bahwa modul SSL telah terinstal.
nginx -V 2>&1 | grep -o -- '--with-http_ssl_module'Output
--with-http_ssl_modulemengonfirmasi bahwa modul telah terinstal.
Konfigurasi sertifikat SSL
Langkah-langkah berikut menggunakan Nginx 1.14.2 dan file konfigurasi /etc/nginx/nginx.conf sebagai contoh. Untuk menemukan file konfigurasi aktif di server Anda, lihat Bagaimana cara menemukan file konfigurasi Nginx aktif?
Buka file konfigurasi.
sudo vim /etc/nginx/nginx.confTambahkan blok server untuk HTTPS. Salin blok
serveryang ada yang mendengarkan Port 80, ubahlisten 80menjadilisten 443 ssl, lalu tambahkan direktif SSL seperti di bawah ini. Biarkan semua pengaturan lain tetap tidak berubah.# Blok server asli yang mendengarkan Port 80 server { listen 80; server_name yourdomain www.yourdomain; # Konfigurasi lainnya location / { proxy_pass http://127.0.0.1:8000; } } # Blok server baru untuk HTTPS. server { # Ubah 'listen 80' asli menjadi 'listen 443 ssl'. listen 443 ssl; # server_name asli. Anda dapat menambahkan lebih banyak nama domain yang didukung oleh sertifikat saat ini. server_name yourdomain www.yourdomain; # ======================= Awal konfigurasi sertifikat ======================= # Tentukan file sertifikat (sertifikat perantara dapat ditambahkan ke file .pem ini). Ganti /etc/ssl/cert/ssl.pem dengan jalur mutlak file sertifikat Anda. ssl_certificate /etc/ssl/cert/ssl.pem; # Tentukan file kunci privat. Ganti /etc/ssl/cert/ssl.key dengan jalur mutlak file kunci privat Anda. ssl_certificate_key /etc/ssl/cert/ssl.key; # Konfigurasikan cache sesi SSL untuk meningkatkan performa. ssl_session_cache shared:SSL:1m; # Atur periode timeout sesi SSL. ssl_session_timeout 5m; # Sesuaikan jenis protokol TLS dan paket sandi yang digunakan (berikut adalah contoh konfigurasi; evaluasi apakah Anda perlu mengonfigurasinya). ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; # Tentukan versi protokol TLS yang diizinkan. Versi TLS yang lebih tinggi memberikan keamanan lebih baik untuk komunikasi HTTPS, tetapi kompatibilitas browser-nya lebih buruk dibandingkan versi TLS yang lebih rendah. ssl_protocols TLSv1.2 TLSv1.3; # Utamakan paket sandi yang ditentukan oleh server. ssl_prefer_server_ciphers on; # ======================= Akhir konfigurasi sertifikat ======================= # Konfigurasi lainnya }(Opsional) Arahkan HTTP ke HTTPS. Tambahkan direktif
returnke blok server Port 80.# Blok server asli yang mendengarkan Port 80 server { listen 80; server_name yourdomain www.yourdomain; # Arahkan seluruh traffic HTTP ke HTTPS. return 301 https://$host$request_uri; # Konfigurasi asli lainnya dapat dihapus karena tidak akan lagi dijangkau. }Uji konfigurasi untuk kesalahan sintaksis.
sudo nginx -t -c /etc/nginx/nginx.confJika output mencakup
syntax is okdantest is successful, konfigurasi valid. Jika tidak, perbaiki kesalahan yang dilaporkan dan jalankan pengujian lagi.
Muat ulang Nginx
Perintah-perintah ini mengasumsikan Nginx dijalankan dengan jalur konfigurasi default. Jika Anda menggunakan jalur instalasi atau file konfigurasi khusus, sesuaikan dengan kondisi Anda.
Nginx sedang berjalan
Muat ulang konfigurasi tanpa me-restart layanan:
sudo nginx -s reloadJika gagal dimuat ulang, lihat FAQ untuk troubleshooting.
Nginx tidak berjalan
Jalankan:
nginxLangkah 4: Verifikasi penerapan
Buka browser dan navigasi ke
https://yourdomain. Gantiyourdomaindengan domain aktual Anda.Ikon gembok di bilah alamat mengonfirmasi bahwa sertifikat berhasil diterapkan. Mulai Chrome versi 117, ikon
telah diganti dengan ikon
baru. Klik ikon tersebut untuk melihat detail sertifikat. Jika Anda melihat error akses atau tidak ada ikon gembok, bersihkan cache browser Anda atau coba lagi dalam mode penyamaran.
Jika masalah tetap ada, lihat FAQ untuk troubleshooting.
Peluncuran
Saat menerapkan ke lingkungan produksi, terapkan praktik terbaik berikut:
| Praktik | Mengapa penting | Cara menerapkan |
|---|---|---|
| Jalankan sebagai pengguna non-root | Membatasi dampak insiden keamanan | Buat pengguna sistem khusus dengan hak istimewa rendah untuk aplikasi |
| Hentikan SSL di gerbang | Menyederhanakan manajemen sertifikat dan mengurangi kompleksitas backend | Terapkan sertifikat pada Server Load Balancer (SLB). SLB menghentikan HTTPS dan meneruskan HTTP biasa ke backend |
| Eksternalisasi rahasia | Mencegah kebocoran kredensial melalui kode sumber atau file konfigurasi | Gunakan variabel lingkungan, HashiCorp Vault, atau Alibaba Cloud Key Management Service alih-alih hardcoding password |
| Paksa pengalihan HTTP ke HTTPS | Mencegah serangan man-in-the-middle pada traffic yang tidak terenkripsi | Tambahkan return 301 https://$host$request_uri; ke blok server Port 80 |
| Nonaktifkan versi TLS yang tidak aman | SSLv3, TLSv1.0, dan TLSv1.1 rentan terhadap serangan yang diketahui | Atur ssl_protocols TLSv1.2 TLSv1.3; dalam konfigurasi Nginx |
| Pantau sertifikat dan perbarui tepat waktu | Sertifikat kedaluwarsa akan memutus HTTPS untuk semua pengguna | Aktifkan pemantauan domain. Alibaba Cloud memeriksa validitas sertifikat dan mengirimkan pengingat perpanjangan sebelum kedaluwarsa. Lihat Beli dan aktifkan pemantauan nama domain publik |
FAQ
Mengapa HTTPS tidak dapat diakses setelah instalasi?
Periksa hal-hal berikut secara berurutan:
Port 443 diblokir — Security group atau firewall tidak mengizinkan lalu lintas inbound pada Port 443. Lihat Buka Port 443.
Ketidakcocokan domain — Domain yang Anda akses tidak tercantum dalam Bound Domains sertifikat. Lihat tabel cakupan domain di Prasyarat.
Nginx belum dimuat ulang — Konfigurasi belum dimuat ulang setelah perubahan. Jalankan
sudo nginx -s reload.Jalur file salah — Direktif
ssl_certificateataussl_certificate_keymengarah ke jalur yang salah. Verifikasi jalur mutlak ke file.pemdan.keyAnda.Sertifikat tidak ada di layanan upstream — Jika domain Anda melewati Content Delivery Network (CDN), Server Load Balancer (SLB), atau Web Application Firewall (WAF), sertifikat juga harus diinstal pada layanan tersebut. Lihat Lokasi penerapan sertifikat ketika traffic melewati beberapa layanan Alibaba Cloud.
Sertifikat tidak diterapkan di semua server — Jika DNS domain mengarah ke beberapa server, instal sertifikat di masing-masing server.
Untuk bantuan lebih lanjut, lihat Selesaikan masalah penerapan sertifikat berdasarkan pesan error browser dan Panduan troubleshooting penerapan sertifikat SSL.
Bagaimana cara memperbarui atau mengganti sertifikat SSL tanpa downtime?
Cadangkan file
.pemdan.keysaat ini di server.Unduh sertifikat dan kunci privat baru dari Konsol Layanan Manajemen Sertifikat.
Unggah file baru ke server, ganti file yang ada. Gunakan jalur dan nama file yang sama persis seperti yang dirujuk dalam konfigurasi Nginx Anda.
Muat ulang Nginx:
sudo nginx -s reload.
Bagaimana cara menemukan file konfigurasi Nginx aktif (nginx.conf) di server Linux?
Jalankan
ps -ef | grep '[n]ginx: master' | grep -- ' -c '. Jika output mencakup sesuatu seperti-c /etc/nginx/custom.conf, Nginx menggunakan file konfigurasi kustom tersebut.Jika langkah 1 tidak menghasilkan output, Nginx menggunakan jalur default yang dikompilasi. Jalankan
nginx -V 2>&1 | grep -oP -- '--conf-path=[^ ]*'untuk menampilkan jalur default, misalnya--conf-path=/etc/nginx/nginx.conf.
Bagaimana cara menonaktifkan TLSv1.0 dan TLSv1.1 untuk memperbaiki peringatan "sertifikat tidak memenuhi standar"?
Atur direktif ssl_protocols dalam konfigurasi Nginx Anda menjadi:
ssl_protocols TLSv1.2 TLSv1.3;Ini akan menonaktifkan protokol TLSv1.0 dan TLSv1.1 yang tidak aman. Setelah menyimpan file, jalankan nginx -s reload untuk menerapkan perubahan.
Mengapa nginx -t gagal dengan bind() to 0.0.0.0:443 failed (98: Address already in use)?
Proses lain sudah mendengarkan Port 443. Jalankan sudo ss -tlnp | grep :443 untuk mengidentifikasinya. Lalu hentikan proses yang bertentangan (seperti server web lain atau instans Nginx yang hang) atau konfigurasi ulang agar menggunakan port berbeda.
Mengapa nginx -t gagal dengan cannot load certificate "/etc/nginx/ssl/domain.pem": BIO_new_file() failed?
Nginx tidak dapat menemukan file sertifikat di jalur yang ditentukan dalam konfigurasi Anda. Perbaiki direktif ssl_certificate dalam nginx.conf agar mengarah ke jalur mutlak aktual file .pem Anda.
Mengapa memuat ulang Nginx gagal dengan the "ssl" parameter requires ngx_http_ssl_module?
Build Nginx tidak menyertakan modul SSL. Instal atau kompilasi ulang Nginx dengan ngx_http_ssl_module diaktifkan. Lihat Instal modul SSL.
Mengapa saya mendapatkan No such file or directory: fopen('/cert/3970497_demo.aliyundoc.com.pem','r') saat memuat ulang Nginx?
Jalur yang ditentukan untuk ssl_certificate atau ssl_certificate_key salah. Verifikasi bahwa jalur dalam konfigurasi Anda adalah jalur mutlak yang benar dan file tersebut ada di lokasi tersebut.
Mengapa Nginx gagal membaca file sertifikat SSL dengan error permission denied?
Pengguna proses worker Nginx tidak memiliki izin baca ke file sertifikat.
Temukan pengguna worker Nginx: cari direktif
userdalamnginx.conf(misalnya,user nginx;).Berikan izin baca (
r) kepada pengguna tersebut pada file sertifikat dan kunci privat, serta izin eksekusi (x) pada semua direktori induk dalam jalurnya.