Server Solusi – Ketika Nginx dan Apache berjalan pada server yang sama, salah satu layanan bisa gagal dijalankan karena keduanya mencoba menggunakan port yang sama. Masalah ini sering terlihat setelah memasang web server kedua, mengubah konfigurasi virtual host, atau mengaktifkan kembali layanan yang sebelumnya berhenti.
Gejalanya bisa berupa pesan Address already in use, status failed pada systemd, atau website yang tidak bisa diakses setelah perubahan konfigurasi. Namun, jangan langsung menghentikan Apache atau Nginx. Proses lain seperti aplikasi berbasis Node.js, container Docker, atau layanan proxy juga bisa menggunakan port yang dibutuhkan.
Saya akan membahas cara memeriksa penyebabnya, menentukan layanan yang seharusnya menerima koneksi HTTP dan HTTPS, lalu memperbaiki konfigurasi sesuai kebutuhan server.
Mengapa Nginx dan Apache Bisa Mengalami Konflik Port?
Konflik port terjadi ketika Nginx dan Apache mencoba melakukan bind ke alamat IP dan port yang sama, misalnya 0.0.0.0:80 atau 0.0.0.0:443. Dalam konfigurasi normal, keduanya tidak dapat mendengarkan alamat dan port yang sama secara bersamaan.
Cara mengatasinya adalah memeriksa layanan yang sedang menggunakan port tersebut, membaca log web server yang gagal dijalankan, lalu menentukan apakah salah satu layanan perlu dihentikan atau keduanya harus dikonfigurasi agar bekerja bersama. Jika Nginx berfungsi sebagai reverse proxy, misalnya, Nginx dapat menerima koneksi publik di port 80 dan 443, sementara Apache melayani permintaan melalui port lain seperti 8080 atau alamat loopback.
Penting: port yang sama tidak selalu menimbulkan konflik apabila layanan menggunakan alamat IP atau konfigurasi socket yang berbeda dan pengaturannya memang mendukung hal tersebut. Karena itu, pemeriksaan perlu melihat alamat yang digunakan, bukan hanya nomor portnya.
Mengenali Gejala Konflik Port
Ada beberapa petunjuk yang bisa membantu kamu mengidentifikasi masalah sebelum mengubah konfigurasi.
Pesan Address already in use
Contoh pesan yang mungkin ditemukan di log:
bind() to 0.0.0.0:80 failed (98: Address already in use)Pesan tersebut merupakan contoh format error yang dapat muncul pada Nginx di Linux. Artinya, Nginx tidak bisa menggunakan alamat dan port tersebut karena sudah digunakan atau tidak dapat diikat sesuai konfigurasi.

Pada Apache, pesan sejenis dapat terlihat seperti berikut:
(98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80Kedua contoh di atas bersifat ilustratif, bukan hasil pemeriksaan dari server tertentu.
Service gagal dijalankan
Kamu mungkin menemukan status failed ketika memeriksa layanan melalui systemd. Akan tetapi, status tersebut belum membuktikan bahwa konflik port adalah penyebabnya. Kesalahan sintaks konfigurasi, modul yang gagal dimuat, atau masalah permission juga dapat menyebabkan web server gagal dijalankan.
Website tidak bisa diakses setelah memasang web server kedua
Sebagai contoh, website sebelumnya berjalan menggunakan Apache. Setelah Nginx dipasang dan diaktifkan, salah satu layanan tidak lagi bisa berjalan.
Situasi ini perlu diperiksa karena kedua web server mungkin dikonfigurasi untuk menerima trafik pada port yang sama. Namun, masalah akses website juga bisa disebabkan oleh perubahan DNS, firewall, virtual host, atau konfigurasi proxy.
Memeriksa Layanan yang Menggunakan Port 80 dan 443
Langkah pertama adalah mencari tahu proses yang sedang mendengarkan koneksi pada port HTTP dan HTTPS. Jangan mengubah konfigurasi sebelum mengetahui layanan yang menempati port tersebut.
Periksa port yang sedang digunakan
Jalankan perintah berikut di VPS Linux:
sudo ss -ltnp | grep -E ':(80|443|8080)\b'Perintah ss menampilkan socket TCP yang sedang mendengarkan koneksi. Opsi -l membatasi hasil pada socket listening, -t memilih TCP, -n menampilkan nomor port, dan -p membantu menunjukkan proses pemilik socket.
Hasilnya bergantung pada kondisi server. Sebagai ilustrasi, kamu mungkin melihat baris yang menunjukkan nginx menggunakan port 80 atau apache2 menggunakan port 443.
Perhatikan alamat lokalnya:
0.0.0.0:80berarti proses mendengarkan port 80 pada semua alamat IPv4 lokal.127.0.0.1:8080berarti port 8080 hanya tersedia melalui loopback IPv4.[::]:443menunjukkan socket pada alamat IPv6 wildcard; dampaknya terhadap IPv4 bergantung pada konfigurasi socket dan sistem.
Jika tidak ada hasil, port yang diperiksa mungkin tidak sedang digunakan, atau layanan memakai port maupun namespace jaringan yang berbeda. Periksa juga konfigurasi container jika kamu menjalankan Docker.
Periksa status Nginx dan Apache
Pada Ubuntu atau Debian, nama unit layanan umumnya nginx dan apache2.

sudo systemctl status nginx --no-pager -lsudo systemctl status apache2 --no-pager -lPerintah tersebut menunjukkan status layanan dan sebagian informasi terkait kegagalan. Jika salah satu layanan berstatus failed, lanjutkan dengan membaca log agar penyebabnya lebih jelas.
sudo journalctl -u nginx -n 80 --no-pagersudo journalctl -u apache2 -n 80 --no-pagerCari pesan seperti Address already in use, could not bind to address, atau informasi mengenai port tertentu. Jika log menunjukkan kesalahan konfigurasi, jangan menganggapnya sebagai konflik port hanya karena layanan gagal dijalankan.
Periksa konfigurasi port pada kedua web server
Nginx menggunakan direktif listen, sedangkan Apache menggunakan direktif Listen untuk menentukan alamat dan port yang menerima koneksi.
Untuk Nginx, cari direktif yang relevan:
sudo grep -RInE 'listen .*(:?80|443)\b' /etc/nginx/Untuk Apache:
sudo grep -RInE '^[[:space:]]*Listen[[:space:]]' /etc/apache2/Perintah pencarian ini membantu menemukan konfigurasi yang perlu diperiksa, tetapi belum tentu mencakup seluruh konfigurasi yang aktif pada semua jenis instalasi. Nginx dapat menggunakan file yang di-include dari lokasi lain, sedangkan Apache juga dapat memuat konfigurasi tambahan.
Jika port yang sama ditemukan pada kedua layanan, bandingkan alamat IP yang digunakan dan pastikan apakah keduanya memang dirancang untuk menerima koneksi publik.
Menentukan Solusi Berdasarkan Kebutuhan Server
Setelah diagnosis awal, pilih solusi berdasarkan fungsi masing-masing web server. Tidak semua VPS perlu menjalankan Nginx dan Apache secara bersamaan.
Skenario A — Hanya membutuhkan satu web server
Jika website hanya menggunakan Nginx atau Apache, hentikan dan nonaktifkan layanan yang tidak diperlukan setelah memastikan tidak ada website lain yang bergantung padanya.
Skenario B — Nginx sebagai reverse proxy
Nginx menerima koneksi publik di port 80 dan 443, lalu meneruskan permintaan HTTP ke Apache melalui port internal, misalnya 127.0.0.1:8080.
Skenario C — Kedua web server melayani alamat IP berbeda
Jika VPS memiliki beberapa alamat IP, kedua layanan dapat menggunakan port yang sama pada alamat IP berbeda selama konfigurasi socket dan jaringan memungkinkan.
Solusi A: Menghentikan Web Server yang Tidak Dibutuhkan
Jika kamu memang hanya membutuhkan Nginx, periksa dahulu apakah Apache masih melayani website lain. Jangan menghentikannya hanya karena terlihat menggunakan port 80.

Jika sudah dipastikan Apache tidak diperlukan, jalankan:
sudo systemctl stop apache2Perintah ini menghentikan layanan Apache untuk sesi berjalan. Setelah itu, coba jalankan Nginx:
sudo systemctl start nginxPeriksa statusnya:
sudo systemctl status nginx --no-pager -lJika Nginx berhasil berjalan, periksa kembali port yang digunakan dan uji website. Status aktif saja belum membuktikan seluruh virtual host bekerja dengan benar.
Jika kamu ingin mencegah Apache berjalan otomatis ketika VPS dinyalakan, gunakan:
sudo systemctl disable apache2Perintah disable mengatur perilaku startup otomatis, tetapi tidak menghentikan layanan yang sedang berjalan. Karena itu, perintah tersebut berbeda dari stop.
Catatan: jika kamu menggunakan Apache saja, prinsipnya sama. Hentikan Nginx hanya setelah memastikan tidak ada website, reverse proxy, atau layanan lain yang bergantung padanya.
sudo systemctl stop nginxsudo systemctl start apache2Jangan menjalankan perubahan tersebut secara membabi buta di server produksi. Jika layanan yang dihentikan ternyata menangani trafik website, pengguna dapat mengalami gangguan akses.
Solusi B: Menjalankan Nginx dan Apache Bersamaan
Jika aplikasi masih membutuhkan Apache tetapi kamu ingin Nginx menangani koneksi publik, konfigurasi reverse proxy merupakan salah satu pendekatan yang umum digunakan. Nginx meneruskan permintaan ke Apache menggunakan proxy_pass.
Contoh berikut menggunakan asumsi Ubuntu/Debian dengan Apache pada port internal 8080, sedangkan Nginx menerima HTTP pada port 80. Sesuaikan nama domain dan file konfigurasi dengan instalasi kamu.
Langkah 1: Ubah port Apache
Sebelum mengubah konfigurasi, buat salinan cadangan file yang akan diedit. Misalnya, jika konfigurasi Listen berada di /etc/apache2/ports.conf:
sudo cp /etc/apache2/ports.conf /etc/apache2/ports.conf.bakBuka file tersebut:
sudo nano /etc/apache2/ports.confJika konfigurasi yang aktif sebelumnya menggunakan:
Listen 80ubah menjadi:
Listen 127.0.0.1:8080Periksa juga apakah terdapat direktif Listen 443 atau konfigurasi lain yang masih membuat Apache mengambil port publik milik Nginx. Jangan menghapus konfigurasi HTTPS secara sembarangan; sesuaikan dengan arsitektur TLS yang dipilih.
Penggunaan 127.0.0.1:8080 membatasi listener Apache ke loopback IPv4. Dengan begitu, koneksi ke port tersebut hanya dapat diterima melalui antarmuka loopback, bukan melalui alamat jaringan publik VPS.

Langkah 2: Sesuaikan VirtualHost Apache
Cari file virtual host website yang ingin kamu layani melalui Apache. Pada instalasi Ubuntu/Debian, file tersebut biasanya berada di /etc/apache2/sites-available/.
Misalnya, jika file yang digunakan adalah example.conf, ubah konfigurasi virtual host HTTP dari port 80 menjadi 8080.
<VirtualHost 127.0.0.1:8080>ServerName example.comServerAlias www.example.comDocumentRoot /var/www/html<Directory /var/www/html>AllowOverride AllRequire all granted</Directory></VirtualHost>Konfigurasi di atas merupakan contoh sederhana. Pertahankan aturan aplikasi, direktori, logging, dan pengaturan keamanan yang memang diperlukan website kamu.
Pastikan tidak ada virtual host lain yang masih menggunakan alamat dan port lama secara bertentangan. Untuk instalasi dengan banyak website, lakukan penyesuaian pada masing-masing virtual host yang memang akan dilayani melalui port internal.
Langkah 3: Validasi konfigurasi Apache
Jalankan:
sudo apache2ctl configtestJika konfigurasi valid, hasil yang diharapkan adalah:
Syntax OKIni hanya contoh hasil yang diharapkan, bukan output hasil pengujian dari VPS kamu.
Jika muncul kesalahan, perbaiki file yang disebutkan sebelum melanjutkan. Setelah itu, terapkan perubahan dengan me-restart Apache:
sudo systemctl restart apache2Perubahan pada direktif Listen dapat membutuhkan restart, bukan sekadar reload. Perlu diperhatikan bahwa restart bisa menyebabkan jeda layanan, jadi jadwalkan dengan mempertimbangkan trafik produksi. Dokumentasi Apache juga menjelaskan bahwa perubahan alamat dan port listener dapat memerlukan penghentian dan pemulaan kembali layanan.
Langkah 4: Konfigurasikan Nginx sebagai reverse proxy
Buat atau edit server block Nginx untuk domain yang sama. Contoh berikut menggunakan HTTP pada port 80:
server {listen 80;server_name example.com www.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;}}Ganti example.com dan www.example.com dengan domain yang sebenarnya. Pastikan server block ini tidak berbenturan dengan konfigurasi lain yang menggunakan pasangan alamat dan port sama secara tidak semestinya.
Header Host membantu Apache menerima nama host yang diminta klien. Header X-Forwarded-For dan X-Forwarded-Proto meneruskan informasi mengenai alamat klien serta protokol yang digunakan pada sisi proxy. Pastikan aplikasi mempercayai header proxy hanya dari sumber tepercaya agar informasi tersebut tidak digunakan secara keliru.
Langkah 5: Validasi dan terapkan konfigurasi
Periksa konfigurasi Nginx:
sudo nginx -tJika hasilnya menunjukkan konfigurasi valid, terapkan perubahan:
sudo systemctl reload nginxReload biasanya memungkinkan Nginx memuat konfigurasi baru tanpa menghentikan layanan secara penuh. Jika reload gagal, periksa pesan error dan log sebelum mencoba tindakan lain.
Setelah konfigurasi diterapkan, pastikan Apache mendengarkan port internal dan Nginx mendengarkan port publik yang ditentukan.
sudo ss -ltnp | grep -E ':(80|443|8080)\b'Pada contoh ini, hasil yang diharapkan adalah Nginx mendengarkan port 80 dan Apache mendengarkan 127.0.0.1:8080. Jika kamu juga mengaktifkan HTTPS, periksa port 443 dan konfigurasi sertifikat TLS pada layanan yang memang bertanggung jawab menangani HTTPS.
Peringatan: jangan langsung membuka port 8080 ke internet. Jika Apache hanya dibutuhkan oleh Nginx pada mesin yang sama, penggunaan alamat loopback lebih membatasi paparan layanan tersebut.
Solusi C: Menggunakan Alamat IP Berbeda
Pada VPS yang memiliki lebih dari satu alamat IP, Nginx dan Apache bisa dikonfigurasi untuk menggunakan port yang sama pada alamat IP berbeda, selama tidak ada konflik pada socket yang digunakan.
Sebagai contoh, jika server memiliki dua alamat IPv4, konfigurasi konseptualnya dapat seperti berikut.
Konfigurasi Nginx:
server {listen 192.0.2.10:80;server_name nginx.example.com;}Konfigurasi Apache:
Listen 192.0.2.20:80Alamat 192.0.2.10 dan 192.0.2.20 di atas merupakan alamat dokumentasi, bukan alamat yang perlu kamu salin ke VPS.
Pendekatan ini cocok jika masing-masing web server memang harus menerima koneksi langsung melalui alamat IP berbeda. Pastikan alamat IP tersebut sudah terpasang pada antarmuka jaringan server, serta konfigurasi DNS, firewall, dan virtual host sudah sesuai.
Jangan menerapkan konfigurasi ini hanya dengan mengganti nomor IP secara acak. Jika alamat IP tidak tersedia pada server, web server bisa gagal dijalankan.
Memeriksa Konfigurasi HTTPS pada Port 443
Konflik tidak hanya terjadi pada port 80. Port 443 juga perlu diperiksa jika Nginx dan Apache sama-sama dikonfigurasi untuk menangani HTTPS.
Jalankan:
sudo ss -ltnp | grep ':443'Jika kedua layanan mencoba menggunakan alamat dan port HTTPS yang sama, tentukan layanan mana yang akan menangani koneksi TLS dari klien.
Untuk skema reverse proxy yang dibahas sebelumnya, Nginx umumnya menangani HTTPS publik, sedangkan Apache menerima permintaan HTTP melalui 127.0.0.1:8080. Dengan demikian, Apache tidak perlu mendengarkan port 443 publik untuk arsitektur tersebut.
Namun, konfigurasi sertifikat tidak boleh diabaikan. Pastikan Nginx memiliki direktif sertifikat yang benar jika menangani HTTPS, dan aplikasi di belakang proxy memahami protokol asli dari permintaan pengguna.
Jika HTTPS sudah aktif sebelumnya, lakukan perubahan dengan hati-hati agar tidak menyebabkan sertifikat, redirect, atau virtual host yang ada berhenti berfungsi.
Verifikasi Setelah Perbaikan
Setelah menerapkan salah satu solusi, lakukan pemeriksaan secara bertahap. Tujuannya bukan sekadar memastikan layanan aktif, tetapi juga memastikan permintaan benar-benar sampai ke website yang tepat.
Periksa status layanan
sudo systemctl status nginx --no-pager -lJika Apache masih diperlukan:
sudo systemctl status apache2 --no-pager -lPastikan status layanan sesuai dengan peran yang diharapkan. Status active (running) menunjukkan proses berjalan, tetapi belum membuktikan website dapat diakses dengan benar.
Periksa konfigurasi dan port
Jika kamu baru mengubah konfigurasi Nginx, jalankan:
sudo nginx -tUntuk Apache:
sudo apache2ctl configtestKemudian periksa port yang digunakan:
sudo ss -ltnp | grep -E ':(80|443|8080)\b'Pastikan tidak ada listener yang bertentangan dengan arsitektur yang kamu pilih. Jika menggunakan reverse proxy, Apache seharusnya dapat dijangkau melalui port internal yang ditentukan.
Uji koneksi dari server
Untuk menguji website HTTP lokal, gunakan:
curl -I -H 'Host: example.com' http://127.0.0.1/Ganti example.com dengan domain kamu. Perintah ini mengirim permintaan HTTP dengan header Host yang ditentukan dan menampilkan header respons.
Jika Nginx menggunakan reverse proxy ke Apache, kamu juga dapat menguji Apache secara langsung:
curl -I -H 'Host: example.com' http://127.0.0.1:8080/Perintah kedua hanya relevan jika Apache memang dikonfigurasi mendengarkan pada alamat dan port tersebut.
Interpretasi hasilnya perlu memperhatikan konteks:
HTTP 200: server berhasil memberikan respons. Tetap periksa apakah konten yang diterima benar.
HTTP 301 atau 302: ada pengalihan. Periksa apakah tujuan redirect sesuai dengan konfigurasi domain dan HTTPS.
HTTP 403 atau 404: server sudah merespons, tetapi ada kemungkinan masalah pada izin akses, document root, atau virtual host.
HTTP 502 atau 504: jika Nginx bertindak sebagai reverse proxy, periksa koneksi ke Apache dan log terkait.
Connection refused: tidak ada layanan yang menerima koneksi pada alamat dan port tersebut, atau koneksi ditolak oleh konfigurasi jaringan.
Terakhir, uji website dari browser atau perangkat di luar VPS. Pengujian lokal tidak mencakup semua faktor eksternal, seperti DNS, firewall, routing, atau aturan jaringan dari penyedia hosting.
Jika website masih bermasalah, periksa log terbaru:
sudo tail -n 80 /var/log/nginx/error.logsudo tail -n 80 /var/log/apache2/error.logLokasi log dapat berbeda tergantung distribusi dan konfigurasi. Gunakan pesan error yang muncul untuk menentukan pemeriksaan selanjutnya, bukan sekadar mengulangi restart layanan.
Cara Mencegah Konflik Port Terulang
Setelah website kembali berfungsi, ada beberapa hal yang sebaiknya diperiksa sebelum melakukan perubahan konfigurasi berikutnya.
Dokumentasikan pembagian port. Catat layanan yang menangani port 80 dan 443, serta port internal yang digunakan aplikasi atau backend.
Cadangkan file konfigurasi sebelum diedit. Simpan salinan file yang relevan agar perubahan bisa ditinjau atau dikembalikan jika diperlukan.
Validasi konfigurasi sebelum menerapkannya. Gunakan
nginx -tuntuk Nginx danapache2ctl configtestuntuk Apache.Hindari menjalankan dua layanan yang tidak diperlukan. Jika satu web server sudah cukup, tidak perlu mengaktifkan web server lain tanpa tujuan yang jelas.
Periksa port setelah memasang software baru. Panel hosting, container, aplikasi, atau layanan proxy bisa mengubah cara port digunakan.
Pantau log dan status layanan. Jika web server gagal setelah perubahan, periksa waktu kejadian pada log untuk menghubungkannya dengan perubahan konfigurasi.
Rencanakan perubahan di server produksi. Jika perlu melakukan restart, pertimbangkan waktu trafik rendah dan siapkan langkah pemulihan.
Khusus untuk reverse proxy, pastikan konfigurasi backend, header proxy, sertifikat TLS, dan aturan firewall tetap konsisten. Perubahan pada salah satu bagian tersebut dapat menimbulkan masalah baru meskipun konflik port sudah teratasi.
FAQ Seputar Konflik Port Nginx dan Apache
Apakah Nginx dan Apache bisa berjalan bersamaan di satu VPS?
Bisa. Keduanya dapat berjalan pada server yang sama jika konfigurasi listener tidak bertabrakan. Salah satu pola yang umum adalah Nginx menerima koneksi publik pada port 80 dan 443, kemudian meneruskan permintaan ke Apache melalui port internal.
Bagaimana cara mengetahui siapa yang menggunakan port 80?
Gunakan:
sudo ss -ltnp | grep ':80'Perintah tersebut membantu menunjukkan proses yang mendengarkan port 80. Jika hasilnya tidak jelas, periksa status layanan dan log untuk memastikan proses yang ditemukan memang berkaitan dengan masalah.
Apakah saya harus mengganti port Apache menjadi 8080?
Tidak selalu. Port 8080 hanya salah satu pilihan ketika Apache berfungsi sebagai backend di belakang Nginx. Jika kamu hanya membutuhkan satu web server, menghentikan layanan yang tidak diperlukan mungkin lebih sederhana. Jika keduanya harus menerima koneksi publik, konfigurasi alamat IP berbeda juga dapat dipertimbangkan.
Apakah menghentikan Apache akan membuat website tidak bisa diakses?
Bisa, jika website bergantung pada Apache untuk melayani permintaan. Sebelum menjalankan systemctl stop apache2, pastikan tidak ada website atau aplikasi yang masih membutuhkannya. Jika Nginx bertindak sebagai reverse proxy ke Apache, menghentikan Apache akan membuat backend tidak dapat merespons permintaan yang diteruskan kepadanya.
Mengapa konflik port masih muncul setelah Apache dihentikan?
Beberapa kemungkinan penyebabnya adalah proses lain masih menggunakan port tersebut, konfigurasi listener masih bertentangan, atau alamat yang digunakan berbeda dari perkiraan. Periksa kembali dengan ss -ltnp, lalu baca log terbaru dari layanan yang gagal. Jangan langsung mematikan proses yang tidak dikenal sebelum memastikan fungsinya.
Kesimpulan
Cara mengatasi konflik port Nginx dan Apache dimulai dengan mengidentifikasi proses yang menggunakan port bermasalah, memeriksa status kedua layanan, dan membaca log untuk menemukan penyebab yang lebih spesifik.
Jika hanya membutuhkan satu web server, hentikan layanan yang tidak diperlukan setelah memeriksa ketergantungannya. Jika keduanya harus berjalan bersamaan, kamu bisa menggunakan reverse proxy dengan pembagian port yang jelas atau mengikat masing-masing layanan ke alamat IP berbeda jika kondisi jaringan mendukungnya.
Setelah perubahan diterapkan, validasi konfigurasi, periksa listener, lalu uji website dari sisi server dan klien. Jika masalah tetap muncul, gunakan log terbaru sebagai dasar diagnosis berikutnya. Dengan pendekatan ini, kamu bisa memperbaiki konflik tanpa mengubah konfigurasi secara sembarangan atau menimbulkan gangguan tambahan pada website.
