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:
- http://ejemplo.com:8080(aplicación node.js)
- http://ejemplo.com/bugzilla(sitio bugzilla)
Quiero que ambos sitios se ejecuten en el puerto 80 de esta manera:
- http://ejemplo.com/mynodejs(aplicación node.js)
- http://ejemplo.com/bugzilla(sitio bugzilla)
¿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 en
6821
Aplicación NodeJS en
6822
¡Recuerde abrirlos en 127.0.0.1
! no deberías abrirlos en tu interfaz de red.
Instalar nginx
como 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.conf
el 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 ProxyPass
y 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
.