Node.js y PHP en el puerto 80 en el mismo servidor

Node.js y PHP en el puerto 80 en el mismo servidor

Tengo un sitio node.js ejecutándose en el puerto 8080 de mi servidor Linux. También tengo, en el mismo servidor, un sitio PHP (bugzilla) ejecutándose en el puerto 80. Entonces mi configuración actual es:

Quiero que ambos sitios se ejecuten en el puerto 80 de esta manera:

¿Es eso posible?

Respuesta1

En primer lugar, deshabilite ambos servicios en su máquina. luego cambie sus puertos a algo inusual y reinícielos, por ejemplo:

  • aplicación PHP en6821

  • Aplicación NodeJS en6822

¡Recuerde abrirlos en 127.0.0.1! no deberías abrirlos en tu interfaz de red.


Instalar nginxcomo el más utilizado Reverse Proxy. Depende de tu distribución puedes instalarlo con uno de estos comandos:

Para distribuciones basadas en Debian:

$ sudo apt install nginx

Para distribuciones basadas en Arch:

$ sudo pacman -S nginx

Depende completamente de tu distribución nuevamente, este paquete podría tener sus propios archivos jerárquicos. así que te daré nginx.confel archivo de configuración principal.Sólo recuerda copiar el archivo de configuración original con el nombre que prefieras, algo como nginx.conf.origin

$ sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.origin

Ahora, abra /etc/nginx/nginx.conf, elimine las configuraciones existentes y copie estas configuraciones dentro de él:

user nginx;
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    keepalive_timeout  15;

    server {
        listen       80 default_server;
        server_name  example.com; 

        location /mynodejs {
            proxy_pass http://127.0.0.1:6822;
        }

        location /bugzilla {
            proxy_pass http://127.0.0.1:6821;
        }
    }
}

Aviso: tenga en cuenta que escribí este archivo de configuración mentalmente y, por eso, probablemente se encontrará con un error cuando desee ejecutar nginx. Si es así, escriba un comentario aquí para probarlo.

Ahora, ¡simplemente reinicie su nginx! Obtendrás lo que quieres.

Respuesta2

La aplicación php puede permanecer donde no se modifica.

Cuando se utiliza Apache como servidor web, los módulos proxy deben estar habilitados. En ubuntu por ejemplo

a2enmod proxy
a2enmod proxy_http

Y modifica tu virtualhost con las líneas ProxyPassy ProxyPassReverse.

<VirtualHost *:80>
        ServerName www.example.com
        DocumentRoot "/var/www/www.example.com/htdocs"
        #nodejs app
        ProxyPass /mynodejs http://127.0.0.1:8080/
        ProxyPassReverse /mynodejs http://127.0.0.1:8080/
<Directory "/var/www/www.example.com/htdocs"> 
        Options -Indexes +FollowSymLinks
        AllowOverride All 
        Order allow,deny 
        Allow from all 
</Directory>
        ErrorLog "|/usr/bin/cronolog /var/www/www.example.com/logs/%Y-%m-%d/error_log" 
        CustomLog "|/usr/bin/cronolog /var/www/www.example.com/logs/%Y-%m-%d/access_log" combined 
</VirtualHost>

Reinicie apache /etc/init.d/apache2 restart.

información relacionada