15%

Hemat 15% di Semua Layanan Hosting

Uji kemampuanmu dan dapatkan Diskon pada paket hosting apa saja

Gunakan kode:

Skills
Memulai
21.10.2024

Cara Mengelola Nginx: Mulai, Hentikan, Mulai Ulang, dan Muat Ulang di Linux

Nginx adalah web server dan reverse proxy berbasis event yang berkinerja tinggi, melayani jutaan lingkungan produksi di seluruh dunia. Pengelolaan siklus hidupnya — memulai, menghentikan, me-restart, dan me-reload — dikendalikan melalui init system Linux Anda, baik systemd (Ubuntu 16.04+, CentOS 7+, Debian 8+) maupun kerangka kerja SysVinit yang sudah lama ada. Perbedaan kritis antara restart dan reload bukan sekadar kosmetik: restart mengakhiri semua koneksi aktif, sementara reload melakukan pertukaran konfigurasi tanpa downtime dengan mem-fork proses worker baru sebelum menguras yang lama secara bertahap.

Panduan ini mencakup setiap perintah operasional yang Anda butuhkan, mekanisme yang mendasari masing-masing, validasi konfigurasi sebelum penerapan, diagnostik berbasis log, dan kasus-kasus tepi yang menyebabkan kegagalan diam-diam dalam produksi.

Prasyarat

Sebelum mengeluarkan perintah manajemen Nginx apa pun, konfirmasikan hal-hal berikut:

  • Anda memiliki akses root atau akun pengguna dengan hak istimewa sudo.
  • Nginx sudah terinstal (nginx -v seharusnya mengembalikan string versi).
  • Anda mengetahui init system mana yang digunakan distribusi Anda (systemctl --version mengonfirmasi systemd; ketiadaannya menunjukkan SysVinit atau manajer lain).

Jika Anda menyiapkan server baru, lingkungan VPS Hosting yang menjalankan Ubuntu 22.04 LTS atau Debian 12 akan menggunakan systemd secara default, yang merupakan jalur yang direkomendasikan untuk semua penerapan baru.

Memahami Model Proses Nginx

Nginx berjalan sebagai proses master dan satu atau lebih proses worker. Proses master membaca konfigurasi, mengikat ke port istimewa (80, 443), dan mengelola siklus hidup worker. Worker menangani koneksi klien yang sebenarnya. Inilah mengapa reload aman untuk produksi: master memunculkan worker baru dengan konfigurasi yang diperbarui sementara worker yang ada terus melayani permintaan yang sedang berjalan, lalu keluar dengan bersih.

Ketika Anda mengeluarkan restart yang keras, proses master itu sendiri dihentikan dan di-restart, memutus semua koneksi yang terbuka. Cadangkan ini untuk situasi di mana proses master itu sendiri dalam keadaan buruk atau setelah pembaruan biner.

Mengelola Nginx dengan systemd (Distribusi Linux Modern)

systemd adalah manajer layanan standar di semua distribusi Linux kontemporer. Nginx berintegrasi dengannya melalui file unit, yang biasanya terletak di /lib/systemd/system/nginx.service.

Memulai Nginx

sudo systemctl start nginx

Ini mengaktifkan unit layanan Nginx. Jika proses master gagal mengikat ke port atau mengalami kesalahan konfigurasi, systemd akan segera melaporkan kegagalan. Periksa kode keluar dengan echo $? — nilai non-nol berarti start gagal.

Menghentikan Nginx

sudo systemctl stop nginx

Ini mengirim SIGTERM ke proses master Nginx, yang kemudian memberi sinyal kepada worker untuk menyelesaikan permintaan aktif sebelum dimatikan. Jika worker tidak keluar dalam batas waktu yang dikonfigurasi, systemd mengirim SIGKILL. Pada server yang sibuk, ini dapat mengakibatkan koneksi yang terputus — gunakan reload bila memungkinkan.

Me-restart Nginx

sudo systemctl restart nginx

Restart adalah penghentian berurutan diikuti dengan start. Semua koneksi aktif dihentikan. Gunakan ini hanya ketika:

  • Biner Nginx itu sendiri telah diperbarui.
  • Proses master tidak merespons.
  • Anda perlu melepaskan dan mengikat ulang soket yang mendengarkan (misalnya, setelah perubahan port).

Selalu jalankan pengujian konfigurasi sebelum me-restart (dibahas di bagian Validasi di bawah).

Me-reload Nginx (Penerapan Konfigurasi Tanpa Downtime)

sudo systemctl reload nginx

Ini adalah perintah yang tepat untuk menerapkan perubahan konfigurasi dalam produksi. Secara internal, systemd mengirim SIGHUP ke proses master Nginx. Master membaca ulang nginx.conf, memvalidasinya, dan mem-fork proses worker baru. Worker lama terus melayani koneksi yang ada hingga mereka tidak aktif, lalu keluar. Seluruh transisi tidak terasa oleh pengguna akhir.

Kasus tepi kritis: Jika konfigurasi baru mengandung kesalahan, reload akan gagal secara diam-diam pada beberapa distribusi — konfigurasi lama tetap aktif, tetapi tidak ada kesalahan yang muncul di terminal. Inilah mengapa pra-validasi dengan nginx -t tidak bisa ditawar sebelum setiap reload.

Memeriksa Status Nginx

sudo systemctl status nginx

Perintah ini menampilkan status layanan (active (running), inactive (dead), failed), PID dari proses master, penggunaan memori dan CPU, serta beberapa baris terakhir dari log jurnal. Ini adalah diagnostik langkah pertama tercepat untuk masalah Nginx apa pun.

Contoh output untuk instans yang sehat:

● nginx.service - A high performance web server and a reverse/proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2025-01-13 10:22:04 UTC; 2h 15min ago
       Docs: man:nginx(8)
    Process: 1234 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on;
   Main PID: 1235 (nginx)
      Tasks: 3 (limit: 4915)
     Memory: 6.4M
        CPU: 312ms
     CGroup: /system.slice/nginx.service
             ├─1235 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
             ├─1236 "nginx: worker process"
             └─1237 "nginx: worker process"

Mengaktifkan Nginx untuk Mulai saat Boot

sudo systemctl enable nginx

Tanpa ini, Nginx tidak akan otomatis mulai setelah server di-reboot. Pasangkan dengan perintah start menggunakan satu pemanggilan:

sudo systemctl enable --now nginx

Menonaktifkan Autostart Nginx

sudo systemctl disable nginx

Mengelola Nginx dengan SysVinit (Sistem Lama)

SysVinit ditemukan pada distribusi yang sudah tidak didukung seperti CentOS 6 dan Ubuntu 14.04. Pembungkus service menyediakan antarmuka yang konsisten untuk skrip init yang terletak di /etc/init.d/.

TindakanPerintah SysVinit
Mulai`sudo service nginx start`
Hentikan`sudo service nginx stop`
Restart`sudo service nginx restart`
Reload`sudo service nginx reload`
Status`sudo service nginx status`

Jika Anda masih menjalankan sistem berbasis SysVinit dalam produksi, sangat disarankan untuk bermigrasi ke distribusi yang didukung. Sistem ini tidak lagi menerima patch keamanan, yang menciptakan eksposur signifikan bagi server mana pun yang menghadap internet.

systemd vs. SysVinit: Perbandingan Perintah

OperasisystemdSysVinit
Mulai layanan`systemctl start nginx``service nginx start`
Hentikan layanan`systemctl stop nginx``service nginx stop`
Restart layanan`systemctl restart nginx``service nginx restart`
Reload konfigurasi`systemctl reload nginx``service nginx reload`
Periksa status`systemctl status nginx``service nginx status`
Aktifkan saat boot`systemctl enable nginx``chkconfig nginx on`
Nonaktifkan saat boot`systemctl disable nginx``chkconfig nginx off`
Lihat log`journalctl -u nginx``/var/log/nginx/error.log`

Validasi Konfigurasi Sebelum Perubahan Layanan Apa Pun

Ini adalah kebiasaan operasional terpenting saat mengelola Nginx. File konfigurasi yang rusak akan menyebabkan restart gagal dan membuat server Anda offline.

sudo nginx -t

Pengujian yang berhasil mengembalikan:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Untuk output verbose yang juga mencetak konfigurasi yang telah diselesaikan (berguna saat men-debug direktif include):

sudo nginx -T

nginx -T membuang seluruh konfigurasi yang telah digabungkan ke stdout, menjadikannya sangat berharga untuk mengaudit pengaturan kompleks dengan beberapa blok server yang tersebar di /etc/nginx/conf.d/ atau /etc/nginx/sites-enabled/.

Alur kerja untuk perubahan konfigurasi yang aman:

# 1. Edit your configuration
sudo nano /etc/nginx/nginx.conf

# 2. Validate — stop here if errors are reported
sudo nginx -t

# 3. Apply with zero downtime
sudo systemctl reload nginx

# 4. Confirm the service is still healthy
sudo systemctl status nginx

Mengirim Sinyal Langsung ke Proses Master Nginx

Untuk skenario di mana systemd tidak tersedia atau Anda memerlukan kontrol yang lebih halus, Nginx menerima sinyal POSIX langsung melalui nginx -s:

sudo nginx -s reload    # Equivalent to SIGHUP — graceful config reload
sudo nginx -s reopen    # Reopen log files (used after log rotation)
sudo nginx -s stop      # Fast shutdown (SIGTERM)
sudo nginx -s quit      # Graceful shutdown — waits for workers to finish

PID proses master disimpan di /var/run/nginx.pid secara default. Anda juga dapat mengirim sinyal secara manual:

sudo kill -HUP $(cat /var/run/nginx.pid)

Sinyal reopen sangat penting dalam pipeline rotasi log. Ketika logrotate memindahkan /var/log/nginx/access.log, Nginx terus menulis ke deskriptor file lama hingga Anda mengirim reopen, di mana ia membuat dan menulis ke jalur file baru.

Mendiagnosis Kegagalan: Log dan Jurnal

Ketika Nginx gagal untuk start atau reload, dua sumber menyediakan data diagnostik.

Jurnal systemd

sudo journalctl -u nginx --since "10 minutes ago"

Untuk mengikuti output langsung selama percobaan restart:

sudo journalctl -u nginx -f

Log Kesalahan Nginx

sudo tail -n 50 /var/log/nginx/error.log

Untuk pemantauan real-time:

sudo tail -f /var/log/nginx/error.log

Pola kegagalan umum dan penyebabnya:

  • bind() to 0.0.0.0:80 failed (98: Address already in use) — Proses lain (Apache, instans Nginx sebelumnya) sedang menempati port 80. Identifikasi dengan sudo ss -tlnp | grep :80.
  • open() "/var/log/nginx/error.log" failed (13: Permission denied) — Pengguna worker Nginx tidak memiliki akses tulis ke direktori log.
  • nginx: [emerg] unknown directive — Kesalahan ketik atau direktif modul yang tidak didukung di nginx.conf. Output nginx -t akan menyertakan file dan nomor baris yang tepat.
  • connect() failed (111: Connection refused) while connecting to upstream — Nginx berjalan, tetapi aplikasi upstream (PHP-FPM, Node.js) tidak. Ini muncul di log kesalahan, bukan saat startup.

Mengelola Nginx di Server dengan Control Panel

Jika server Anda menjalankan control panel seperti cPanel atau Plesk, Nginx mungkin dikelola sebagai lapisan reverse proxy di depan Apache, atau sebagai web server utama. Di lingkungan ini, jangan gunakan perintah systemctl mentah untuk me-restart Nginx tanpa memahami orkestrasi layanan panel — beberapa panel mengganti file unit systemd dan mengelola Nginx melalui supervisor daemon mereka sendiri.

Untuk lingkungan yang dikelola cPanel, perintah restart yang benar biasanya adalah:

/scripts/restartsrv_nginx

Penerapan VPS dengan cPanel menangani manajemen layanan melalui Service Manager WHM, yang menyediakan antarmuka GUI bersama skrip CLI di atas.

Untuk lingkungan di mana Anda menginginkan kontrol manual penuh tanpa panel, jelajahi VPS Control Panels yang tersedia untuk menemukan lapisan manajemen yang sesuai dengan model operasional Anda.

Nginx pada Perangkat Keras Dedicated

Penerapan lalu lintas tinggi yang menjalankan Nginx sebagai load balancer atau titik terminasi TLS mendapat manfaat signifikan dari sumber daya dedicated. Pada Dedicated Server, Anda dapat menyetel jumlah proses worker agar sesuai dengan core CPU fisik secara tepat, mengonfigurasi nilai worker_connections yang besar tanpa bersaing dengan penyewa lain, dan menggunakan optimasi tingkat kernel (SO_REUSEPORT, sendfile, tcp_nopush) hingga potensi penuhnya. Perintah manajemen layanan identik dengan lingkungan VPS — perbedaannya ada pada apa yang dapat Anda konfigurasi, bukan bagaimana Anda mengontrol layanan.

Jika instans Nginx Anda mengakhiri lalu lintas HTTPS, pastikan sertifikat TLS Anda terkini. Sertifikat yang kedaluwarsa menyebabkan kegagalan koneksi segera yang tidak akan ditampilkan oleh systemctl status nginx — layanan tampak sehat sementara klien menerima kesalahan SSL handshake. Mengelola SSL Certificates secara proaktif mencegah kelas kegagalan diam-diam ini.

Matriks Keputusan Operasional

Gunakan matriks ini untuk memilih tindakan manajemen yang tepat untuk situasi tertentu:

SituasiTindakan yang TepatAlasan
Mengedit `nginx.conf` atau blok server`nginx -t` lalu `reload`Penerapan konfigurasi tanpa downtime
Biner Nginx diperbarui`restart`Biner baru harus dimuat ke memori
Binding port berubah`restart`Master harus mengikat ulang soket
Rotasi log selesai`nginx -s reopen`Buka ulang deskriptor file ke jalur log baru
Proses master tidak merespons`stop` lalu `start`Paksa hentikan dan inisialisasi ulang
Perlu memverifikasi kesehatan layanan`systemctl status nginx`Menampilkan PID, uptime, baris log terbaru
Mendiagnosis kegagalan startup`journalctl -u nginx` + `nginx -t`Konteks kesalahan lengkap dari kedua sumber
Memeriksa proses mana yang memiliki port 80`ss -tlnpgrep :80`Identifikasi konflik port sebelum memulai

Poin Teknis Utama

  • Selalu jalankan sudo nginx -t sebelum restart atau reload. Pengujian yang gagal mencegah Anda membuat server yang berjalan offline dengan konfigurasi yang rusak.
  • Lebih baik gunakan reload daripada restart dalam produksi. Ini tidak mengganggu dan menangani 99% skenario perubahan konfigurasi.
  • nginx -s quit lebih aman daripada nginx -s stop ketika Anda perlu mematikan secara manual — ini menunggu worker menguras koneksi aktif.
  • systemctl enable nginx terpisah dari systemctl start nginx. Melupakan enable berarti Nginx tidak akan bertahan setelah reboot.
  • nginx -T (huruf besar) membuang konfigurasi yang telah diselesaikan sepenuhnya, termasuk semua file yang disertakan — gunakan sebelum perubahan besar untuk memverifikasi konfigurasi yang efektif.
  • Lingkungan control panel memiliki skrip restart mereka sendiri. Menggunakan perintah systemd mentah di cPanel atau Plesk dapat menyebabkan inkonsistensi status.
  • Pantau /var/log/nginx/error.log secara terus-menerus selama peluncuran konfigurasi apa pun. Kesalahan upstream dan masalah izin muncul di sini, bukan di systemctl status.

Pertanyaan yang Sering Diajukan

Apa perbedaan antara nginx restart dan nginx reload?

restart mengakhiri proses master dan semua worker, memutus koneksi aktif, lalu memulai kembali dari awal. reload mengirim SIGHUP ke master, yang mem-fork worker baru dengan konfigurasi yang diperbarui sementara worker lama menyelesaikan permintaan yang ada — menghasilkan nol downtime.

Mengapa sudo systemctl restart nginx gagal meskipun nginx -t berhasil?

Pengujian konfigurasi yang berhasil tidak menjamin start yang sukses. Penyebab umum meliputi konflik port (proses lain sudah terikat ke port 80 atau 443), file sertifikat SSL yang hilang yang direferensikan dalam konfigurasi, atau batas deskriptor file yang tidak mencukupi. Periksa journalctl -u nginx segera setelah kegagalan untuk kesalahan spesifik.

Bagaimana cara menerapkan perubahan konfigurasi tanpa downtime apa pun?

Jalankan sudo nginx -t untuk memvalidasi, lalu sudo systemctl reload nginx. Ini melakukan penggantian worker di tempat secara bertahap. Koneksi yang ada tidak terganggu.

Bagaimana cara membuat Nginx mulai otomatis setelah server di-reboot?

Jalankan sudo systemctl enable nginx. Ini membuat symlink di direktori target systemd yang sesuai. Gabungkan dengan sudo systemctl start nginx atau gunakan sudo systemctl enable --now nginx untuk mengaktifkan dan memulai dalam satu perintah.

Di mana log Nginx berada dan bagaimana cara membacanya secara real time?

Secara default, log kesalahan ada di /var/log/nginx/error.log dan log akses di /var/log/nginx/access.log. Ikuti salah satunya secara real time dengan sudo tail -f /var/log/nginx/error.log. Untuk tampilan log terstruktur dengan filter timestamp dan tingkat keparahan, gunakan sudo journalctl -u nginx -f.

15%

Hemat 15% di Semua Layanan Hosting

Uji kemampuanmu dan dapatkan Diskon pada paket hosting apa saja

Gunakan kode:

Skills
Memulai