Cara Mengatasi Nginx Address Already in Use di VPS Linux

Yusuf
By: Yusuf October Wed 2026
cara mengatasi Nginx address already in use

Server Solusi – Ketika Nginx gagal dijalankan, salah satu pesan error yang mungkin muncul adalah bind() failed (98: Address already in use). Pesan ini biasanya berkaitan dengan port atau alamat jaringan yang sudah digunakan oleh proses lain, sehingga Nginx tidak bisa membuka socket yang dibutuhkan.

Masalah tersebut sering berkaitan dengan port 80 untuk HTTP atau port 443 untuk HTTPS. Namun, saya tidak akan langsung menyimpulkan bahwa penyebabnya adalah Apache atau proses Nginx yang berjalan ganda. Keduanya memang mungkin, tetapi proses yang menggunakan port harus diperiksa terlebih dahulu.

Dalam panduan ini, saya akan membahas langkah diagnosis yang bisa kamu ikuti pada VPS Linux, terutama Ubuntu atau Debian yang menggunakan systemd. Perintahnya juga dapat disesuaikan untuk distribusi lain dengan memperhatikan perbedaan lokasi konfigurasi dan pengelolaan layanan.

Mengapa Nginx Mengalami Address Already in Use?

Cara mengatasi Nginx address already in use adalah mengidentifikasi port yang bentrok, menemukan proses yang sedang menggunakannya, lalu menghentikan atau mengonfigurasi ulang proses tersebut jika memang aman. Jika port sebenarnya digunakan oleh Nginx lain, periksa kemungkinan proses ganda atau konfigurasi yang tidak sesuai dengan pengelolaan service.

Mulailah dengan perintah berikut:

sudo ss -ltnp

Perintah ini menampilkan socket TCP yang sedang mendengarkan koneksi, termasuk alamat, port, dan informasi proses jika tersedia. Cari port :80 atau :443, lalu tentukan proses mana yang menggunakannya sebelum melakukan perubahan.

Jangan langsung mematikan semua proses Nginx atau menghapus file PID. Tindakan tersebut bisa mengganggu website yang sedang berjalan dan tidak selalu menyelesaikan akar masalah.

Gejala dan Penyebab Nginx Address Already in Use

1. Port 80 atau 443 digunakan web server lain

Nginx umumnya menggunakan port 80 untuk menerima koneksi HTTP dan port 443 untuk HTTPS. Jika Apache atau aplikasi lain sudah mendengarkan pada alamat dan port yang sama, Nginx dapat gagal melakukan binding.

Contoh pesan error yang mungkin ditemukan:

nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

Pesan untuk HTTPS bisa terlihat seperti ini:

nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)

Alamat 0.0.0.0 menunjukkan binding ke seluruh alamat IPv4 lokal. Jika error menyebut [::]:80, perhatikan juga binding IPv6 dan bagaimana socket IPv4 serta IPv6 dikonfigurasi pada sistem tersebut.

Baca JugaCara Memperbaiki Nginx Permission Denied di Linux dan VPS
Cara Memperbaiki Nginx Permission Denied di Linux dan VPS

2. Nginx dijalankan di luar pengelolaan systemd

Di Linux, Nginx bisa dijalankan melalui service systemd atau secara manual menggunakan perintah nginx. Jika Nginx sudah aktif lalu kamu mencoba menjalankan instance lain, proses baru bisa gagal membuka port yang telah digunakan instance sebelumnya.

Kondisi ini tidak selalu berarti Nginx rusak. Bisa jadi instance pertama masih melayani permintaan website dengan normal, sedangkan perintah kedua mencoba membuat listener yang sama.

3. Konfigurasi listen saling berbenturan

Nginx mendukung banyak blok server untuk berbagai domain. Beberapa blok memang boleh menggunakan port yang sama, selama konfigurasi alamat dan virtual host-nya sesuai.

Masalah bisa terjadi ketika konfigurasi menetapkan alamat atau port yang saling bertentangan, misalnya listener yang bertumpang tindih pada alamat tertentu atau konfigurasi IPv4 dan IPv6 yang tidak cocok dengan kondisi sistem.

Karena itu, jangan menghapus semua blok listen 80 hanya karena jumlahnya lebih dari satu. Periksa konfigurasi gabungan terlebih dahulu.

4. Apache atau service lain masih aktif

Pada VPS yang menggunakan panel hosting, Apache, OpenLiteSpeed, atau web server lain mungkin sudah dikonfigurasi untuk menerima koneksi pada port publik.

Contohnya, sebuah aplikasi menggunakan Apache di port 80 sementara kamu ingin menjadikan Nginx sebagai web server utama. Jika keduanya mencoba mengikat alamat dan port yang sama, salah satunya tidak akan dapat mengambil listener tersebut.

Solusinya bergantung pada desain server. Kamu mungkin perlu menghentikan Apache, memindahkan port backend, atau mengatur reverse proxy, bukan sekadar mematikan service yang terdeteksi.

5. Konfigurasi berubah setelah pembaruan atau instalasi

Error dapat mulai muncul setelah pembaruan paket, instalasi panel hosting, perubahan virtual host, atau penambahan konfigurasi baru.

Salah satu kemungkinan adalah file konfigurasi tambahan mengaktifkan listener yang sebelumnya tidak ada. Kemungkinan lainnya adalah pengelola layanan atau aplikasi lain mulai menggunakan port yang sama.

Jika error muncul tepat setelah perubahan tertentu, periksa file yang baru dibuat atau diubah. Waktu kemunculan error membantu mempersempit diagnosis, tetapi belum membuktikan penyebabnya.

Cara Mendiagnosis Penyebabnya

Sebelum memperbaiki konfigurasi, saya menyarankan kamu mengikuti pemeriksaan berikut secara berurutan. Tujuannya adalah mengetahui apakah konflik terjadi karena proses lain, instance Nginx tambahan, atau konfigurasi listener.

Baca JugaCara Mengatasi Error 504 Gateway Timeout Nginx dengan Tepat
Cara Mengatasi Error 504 Gateway Timeout Nginx dengan Tepat

1. Periksa status service Nginx

Jalankan:

sudo systemctl status nginx --no-pager -l

Perintah ini menampilkan status service, PID utama jika tersedia, serta sebagian informasi error terakhir.

Perhatikan status berikut:

  • active (running): service tercatat aktif. Ini belum membuktikan bahwa semua listener yang dibutuhkan tersedia.

  • failed: proses startup gagal atau service keluar dengan error.

  • inactive (dead): service tidak aktif saat pemeriksaan dilakukan.

Selanjutnya, periksa log service:

sudo journalctl -u nginx -n 50 --no-pager

Perintah tersebut menampilkan hingga 50 baris log terbaru dari unit Nginx yang dikelola systemd. Cari pesan Address already in use, port yang disebutkan, serta waktu kejadian.

Jika log tidak memberikan informasi yang cukup, lanjutkan dengan pemeriksaan port secara langsung.

2. Cari proses yang menggunakan port 80 dan 443

Jalankan perintah berikut:

sudo ss -ltnp '( sport = :80 or sport = :443 )'

Filter ini membatasi hasil pada socket TCP yang sedang mendengarkan di port 80 atau 443.

Contoh bentuk hasil yang mungkin terlihat:

State   Local Address:Port   Peer Address:Port   ProcessLISTEN  0.0.0.0:80           0.0.0.0:*           users:(("apache2",pid=1234,fd=4))

Catatan: output di atas hanya ilustrasi format, bukan hasil pemeriksaan VPS kamu.

Jika proses yang ditemukan adalah apache2, Apache mungkin menggunakan port 80. Jika prosesnya nginx, periksa apakah service yang ada memang sudah aktif atau terdapat instance tambahan. Jika prosesnya adalah aplikasi lain, cari tahu fungsi aplikasi tersebut sebelum menghentikannya.

Apabila tidak ada hasil, jangan langsung menganggap port bebas. Periksa port yang benar-benar disebut dalam error, termasuk alamat IPv6, port nonstandar, dan kondisi proses saat startup berlangsung.

3. Periksa proses Nginx yang sedang berjalan

Gunakan:

pgrep -a nginx

Perintah tersebut menampilkan proses Nginx beserta argumen command line jika ditemukan.

Biasanya Nginx menggunakan satu proses master dan satu atau lebih proses worker. Banyaknya baris output bukan bukti bahwa ada beberapa instance independen karena worker memang bagian dari cara kerja Nginx.

Untuk mengetahui proses master yang tercatat oleh systemd, gunakan:

sudo systemctl show nginx -p MainPID -p ActiveState -p SubState

Bandingkan PID tersebut dengan hasil pgrep dan ss.

Baca JugaCara Mengatasi Error 502 Bad Gateway Nginx: Diagnosis dan Solusinya
Cara Mengatasi Error 502 Bad Gateway Nginx: Diagnosis dan Solusinya

Jika proses Nginx mendengarkan port tetapi unit systemd tidak aktif, mungkin ada instance yang dijalankan secara manual atau dikelola oleh mekanisme lain. Pastikan asal proses sebelum menghentikannya.

4. Periksa konfigurasi Nginx yang benar-benar digunakan

Jalankan:

sudo nginx -t

Perintah ini memeriksa sintaks konfigurasi dan mencoba membuka file yang dirujuk oleh konfigurasi. Namun, tes sintaks yang berhasil tidak menjamin port tersedia ketika Nginx dijalankan.

Untuk melihat konfigurasi gabungan beserta file yang dimuat, gunakan:

sudo nginx -T 2>&1 | less

Di dalam tampilan tersebut, cari directive listen, termasuk konfigurasi seperti:

listen 80;listen 443 ssl;listen [::]:80;listen [::]:443 ssl;

Perhatikan juga komentar nama file yang ditampilkan pada konfigurasi gabungan. Ini membantu menemukan apakah sebuah listener berasal dari konfigurasi utama, direktori conf.d, atau konfigurasi virtual host lain.

Jangan menganggap setiap pengulangan listen 80 sebagai kesalahan. Beberapa virtual host memang menggunakan port yang sama untuk melayani domain berbeda. Fokuslah pada konflik alamat, port, parameter listener, dan proses yang benar-benar gagal melakukan binding. Dokumentasi Nginx menjelaskan fungsi directive listen dalam konfigurasi virtual server.

Langkah Perbaikan Nginx Address Already in Use

Setelah penyebabnya lebih jelas, pilih solusi yang sesuai dengan hasil pemeriksaan. Tidak semua server perlu menghentikan Apache atau menjalankan ulang Nginx.

1. Jika Apache menggunakan port 80 atau 443

Pertama, periksa status Apache:

sudo systemctl status apache2 --no-pager -l

Nama unit pada distribusi tertentu bisa berbeda, misalnya httpd pada sejumlah sistem berbasis RHEL.

Jika Apache memang menggunakan port yang dibutuhkan Nginx, tentukan terlebih dahulu web server mana yang seharusnya menerima koneksi publik.

Jika Apache tidak lagi dibutuhkan, kamu dapat menghentikannya setelah memastikan tidak ada website atau aplikasi penting yang bergantung pada service tersebut:

sudo systemctl stop apache2

Setelah itu, validasi konfigurasi dan jalankan Nginx:

sudo nginx -tsudo systemctl start nginx

Periksa statusnya:

sudo systemctl status nginx --no-pager -l

Perlu diperhatikan bahwa menghentikan Apache dapat membuat website yang dilayaninya tidak tersedia. Jika Apache masih diperlukan, jangan menghentikannya hanya untuk menghilangkan error. Pertimbangkan menempatkan Apache di port backend yang berbeda, lalu biarkan Nginx menangani koneksi publik melalui reverse proxy.

Baca JugaCara Mengatasi Apache AH00558 ServerName Warning di Ubuntu
Cara Mengatasi Apache AH00558 ServerName Warning di Ubuntu

2. Jika Nginx berjalan dua kali

Jika ss menunjukkan Nginx sebagai pemilik port, sementara systemctl melaporkan service gagal, cari tahu apakah ada instance yang dijalankan secara manual.

Periksa argumen proses:

pgrep -a nginx

Jika Nginx yang ada merupakan service produksi yang masih berjalan dengan normal, jangan menghentikan prosesnya secara langsung. Periksa bagaimana service dikelola dan gunakan mekanisme pengendalian yang sesuai.

Untuk instance yang memang dikelola systemd, kamu dapat mencoba reload setelah memastikan konfigurasi valid:

sudo nginx -t && sudo systemctl reload nginx

Perintah ini menguji konfigurasi terlebih dahulu, lalu meminta service memuat ulang konfigurasi jika pengujian berhasil. Reload bukan solusi untuk setiap konflik port, terutama jika service sudah gagal atau ada instance independen yang menguasai listener.

Jika proses Nginx dijalankan manual dan tidak dikelola oleh systemd, tentukan dahulu instance yang benar sebelum menghentikannya. Hindari killall nginx atau pkill nginx sebagai langkah pertama karena tindakan itu dapat memutus layanan yang masih aktif.

3. Jika konfigurasi listen bertabrakan

Apabila konflik berasal dari konfigurasi, buat salinan cadangan file yang akan diubah. Contoh berikut menggunakan file konfigurasi virtual host; ganti path sesuai file yang ditemukan dari nginx -T.

sudo cp /etc/nginx/sites-available/example.conf \/etc/nginx/sites-available/example.conf.bak

Buka file tersebut menggunakan editor:

sudo nano /etc/nginx/sites-available/example.conf

Periksa setiap directive listen dan tentukan port yang memang harus digunakan oleh virtual host tersebut.

Misalnya, jika aplikasi backend berjalan di port 8080 dan Nginx bertugas menerima koneksi publik pada port 80, konfigurasi reverse proxy dapat menggunakan pola berikut:

server {listen 80;server_name example.com;location / {proxy_pass http://127.0.0.1:8080;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}}

Konfigurasi ini merupakan contoh untuk aplikasi HTTP yang benar-benar mendengarkan pada 127.0.0.1:8080. Jangan menggunakannya begitu saja jika aplikasi backend memakai port atau protokol berbeda.

Setelah perubahan, jalankan:

sudo nginx -t

Jika pengujian berhasil, terapkan perubahan melalui reload:

sudo systemctl reload nginx

Jika pengujian gagal, jangan reload. Perbaiki kesalahan konfigurasi terlebih dahulu atau pulihkan cadangan jika diperlukan.

4. Jika error berkaitan dengan alamat IPv4 dan IPv6

Periksa pesan error secara spesifik. Misalnya, jika Nginx gagal melakukan binding pada [::]:80, sementara proses lain terlihat mendengarkan pada 0.0.0.0:80, periksa konfigurasi socket dan perilaku IPv6 pada sistem tersebut.

Jangan langsung menghapus directive IPv6 karena hal itu bisa membuat website tidak lagi menerima koneksi IPv6.

Gunakan:

sudo ss -ltnp

Lalu periksa seluruh directive listen dari konfigurasi gabungan:

sudo nginx -T 2>&1 | grep -nE 'listen .*(:80|:443|80|443)'

Perintah pencarian ini membantu menemukan sejumlah deklarasi listener yang relevan, tetapi bukan parser lengkap konfigurasi Nginx. Tetap periksa konteks blok server, file sumber, dan alamat yang digunakan.

Jika memang ada listener yang tidak diperlukan atau tidak cocok dengan arsitektur server, ubah hanya konfigurasi terkait. Uji dengan nginx -t sebelum menerapkan perubahan.

5. Jika masalah muncul setelah pembaruan atau perubahan konfigurasi

Jika error mulai muncul setelah instalasi paket, pembaruan Nginx, atau perubahan panel hosting, periksa log serta file konfigurasi yang baru ditambahkan.

Jalankan:

sudo journalctl -u nginx --since "1 hour ago" --no-pager

Kemudian periksa konfigurasi gabungan:

sudo nginx -T

Cari perubahan pada file virtual host, direktori conf.d, atau konfigurasi lain yang ikut dimuat. Jika tersedia, bandingkan dengan cadangan konfigurasi sebelum perubahan terakhir.

Jangan langsung menghapus default.conf, menonaktifkan semua virtual host, atau melakukan downgrade paket. Perubahan tersebut bisa menghilangkan konfigurasi website yang sebenarnya masih dibutuhkan.

Jika port sudah bebas tetapi Nginx tetap gagal, baca error terbaru karena masalahnya mungkin sudah berbeda, misalnya kesalahan sintaks, file sertifikat yang tidak ditemukan, atau permission pada file yang dirujuk.

Verifikasi Setelah Perbaikan

Setelah menerapkan solusi, jangan hanya mengandalkan pesan bahwa perintah berhasil dijalankan. Pastikan Nginx aktif, listener tersedia, dan website dapat diakses.

1. Periksa status Nginx

sudo systemctl status nginx --no-pager -l

Hasil yang diharapkan adalah status active (running). Jika status masih failed, lanjutkan pemeriksaan melalui log terbaru:

sudo journalctl -u nginx -n 50 --no-pager

Pastikan error Address already in use tidak muncul lagi pada percobaan startup atau reload terbaru.

2. Pastikan port sudah didengarkan oleh proses yang tepat

sudo ss -ltnp '( sport = :80 or sport = :443 )'

Periksa apakah port yang dibutuhkan sudah digunakan oleh Nginx atau oleh arsitektur web server yang memang direncanakan.

Jika Nginx menggunakan reverse proxy, port backend seperti 8080 juga perlu diperiksa apabila aplikasi belum merespons:

sudo ss -ltnp '( sport = :8080 )'

Sesuaikan port tersebut dengan konfigurasi aplikasi kamu.

3. Tes respons HTTP dari server

Untuk website yang melayani HTTP pada port 80, jalankan:

curl -I http://127.0.0.1/

Jika website menggunakan HTTPS, kamu bisa memeriksa respons melalui domain:

curl -I https://example.com/

Ganti example.com dengan domain sebenarnya.

Respons seperti 200 OK, 301 Moved Permanently, atau 302 Found dapat menjadi indikasi bahwa server merespons sesuai konfigurasi. Status tersebut tidak otomatis membuktikan seluruh fungsi website berjalan normal. Respons 403, 404, atau 502 juga perlu ditelusuri berdasarkan arsitektur dan konfigurasi yang digunakan.

Jika pengujian lokal berhasil tetapi website tidak bisa diakses dari internet, periksa DNS, firewall, routing, dan jalur koneksi publik secara terpisah.

Cara Mencegah Konflik Port Nginx Terulang

Ada beberapa kebiasaan administrasi server yang membantu mencegah masalah serupa.

  1. Tetapkan peran setiap web server. Jika menggunakan Nginx sebagai reverse proxy, pastikan Apache atau aplikasi backend menggunakan port yang sesuai dan tidak berebut listener publik.

  2. Gunakan systemd untuk pengelolaan service. Hindari kebiasaan menjalankan sudo nginx berulang kali tanpa memeriksa status service dan instance yang sudah aktif.

  3. Uji konfigurasi sebelum menerapkannya. Gunakan sudo nginx -t sebelum reload atau restart agar kesalahan sintaks dapat diketahui lebih awal.

  4. Cadangkan konfigurasi sebelum perubahan. Simpan salinan file virtual host dan catat perubahan yang dilakukan, khususnya setelah instalasi panel hosting atau pembaruan paket.

  5. Pantau log setelah perubahan. Periksa journalctl -u nginx dan error log Nginx untuk mendeteksi kegagalan startup, konflik listener, serta masalah lain yang mungkin muncul.

  6. Dokumentasikan penggunaan port. Catat port publik dan backend yang digunakan Nginx, Apache, PHP-FPM, serta aplikasi lainnya. PHP-FPM biasanya menggunakan socket Unix atau port FastCGI, sehingga jangan menyamakan semua konflik port dengan konflik HTTP.

FAQ

1. Apa penyebab utama error Nginx address already in use?

Penyebab utamanya adalah Nginx gagal mengikat alamat dan port yang dibutuhkan karena listener tersebut sudah digunakan atau terjadi konflik pada konfigurasi socket. Proses yang menggunakan port harus diperiksa sebelum menentukan solusi.

2. Bagaimana cara mengetahui aplikasi yang menggunakan port 80?

Jalankan:

sudo ss -ltnp '( sport = :80 )'

Perintah ini menampilkan socket TCP yang mendengarkan port 80 beserta informasi proses jika tersedia. Jika membutuhkan pemeriksaan port HTTPS, ubah filter menjadi :443.

3. Apakah error ini bisa diselesaikan dengan restart Nginx?

Belum tentu. Restart hanya membantu jika kondisi yang menghalangi startup sudah terselesaikan. Jika proses lain tetap menggunakan port yang sama, Nginx masih bisa gagal dijalankan. Diagnosis konflik terlebih dahulu sebelum melakukan restart.

4. Apakah aman menghapus file nginx.pid?

Jangan menghapus file PID hanya karena muncul error Address already in use. File tersebut digunakan untuk mencatat PID proses master, dan menghapusnya tidak akan membebaskan port yang sedang digunakan. Pastikan kondisi proses dan konfigurasi PID sebelum melakukan tindakan apa pun terhadap file tersebut.

5. Bagaimana jika port 80 sudah kosong tetapi Nginx tetap gagal?

Periksa pesan error terbaru, port lain yang disebutkan, alamat IPv6, serta validitas konfigurasi menggunakan sudo nginx -t. Jika error berubah menjadi masalah sertifikat, permission, atau file konfigurasi, tangani sesuai pesan terbaru tersebut.

Penutup

Cara mengatasi Nginx address already in use sebaiknya dimulai dengan pemeriksaan, bukan langsung menghentikan proses atau menghapus file sistem. Identifikasi port yang bermasalah menggunakan ss, cocokkan PID dengan proses yang berjalan, periksa konfigurasi melalui nginx -T, lalu terapkan solusi sesuai penyebabnya.

Jika Nginx masih gagal berjalan, periksa log terbaru dan pastikan perubahan terakhir tidak menimbulkan error lain. Untuk kasus yang lebih rumit, informasi paling berguna adalah pesan error lengkap, hasil sudo ss -ltnp, status service Nginx, serta bagian konfigurasi listen yang relevan. Samarkan informasi sensitif sebelum membagikan log atau konfigurasi tersebut.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *