Node.js és Apache / Nginx portkonfliktusok kezelése lokális környezetben

A webfejlesztők egyik leggyakoribb bosszúsága a helyi fejlesztőkörnyezet kialakításakor jelentkezik, amikor a különböző szolgáltatások ugyanazt a hálózati portot próbálják meg lefoglalni. Tipikus példa, amikor egy Apache vagy Nginx webszerver mellett egy Node.js (Express) alkalmazást is futtatni szeretnénk lokálisan.

Alapértelmezés szerint sok rendszer a 8080-as vagy 8081-es portot rendeli a fejlesztői szerverekhez. Ha elindítunk egy Node.js alkalmazást, ami a 8080-as portot figyelné, miközben az Apache Virtual Host is erre van konfigurálva, a hírhedt EADDRINUSE (Address already in use) hibába ütközünk.

A megoldás lépései

A konfliktus feloldásának legbiztonságosabb módja, ha a lokális Apache konfigurációt áthelyezzük egy kevésbé használt egyedi portra, például a 8090-re. Ehhez módosítanunk kell az Apache konfigurációs fájlját (httpd.conf vagy a virtual hostok fájlját):

<VirtualHost *:8090>
    ServerAdmin webmaster@localhost
    DocumentRoot "/var/www/simplesolution"
    ServerName simplesolution.local
    ErrorLog "logs/simplesolution-error.log"
    CustomLog "logs/simplesolution-access.log" common
</VirtualHost>

Ne felejtsük el hozzáadni a Listen 8090 utasítást sem a fő konfigurációhoz. Ezzel felszabadítjuk a 8080-as és 8081-es portokat a Node.js alkalmazásaink számára, így a két környezet zavartalanul képes egymás mellett futni.