Es posible y definitivamente no es tan difícil como podría pensar inicialmente. Para un ejemplo simple, tomaré una aplicación Django y una aplicación NodeJs con proxy a través de Nginx, pero esto se puede aplicar a cualquier combinación de aplicaciones / Servidor HTTP que desee. [Lo ideal sería una demarcación en las URL que maneja cada una de sus aplicaciones]
Lo primero que debe comprender es que un sitio web creado es solo otra aplicación que se ejecuta en su sistema, lo que expone un puerto en particular para que los clientes externos se conecten a él y recuperen el contenido que desean usar [que puede ser para renderizar páginas web o API simples] . Cuando abre una página web, lo que realmente está haciendo es conectarse a esa máquina en particular a través de un puerto particular [80 para HTTP y 443 para HTTPS] y recuperar el contenido que debe mostrarse.
- Django: puede ejecutar una aplicación Django con el comando “python manage.py runserver”. De forma predeterminada, esto ejecutará la aplicación web Django en el puerto 8000. [En producción, debería usar gunicorn / uwsgi para implementar]
- NodeJs: suponiendo que su aplicación Node esté en un archivo llamado app.js, puede ejecutarla usando “nodejs app.js”. Esto ejecutará la aplicación en el puerto especificado en su aplicación como el oyente. [Típicamente el puerto 3000, asegúrese de que esto no entre en conflicto con la otra aplicación. Nuevamente use algo como PM2 para implementar en producción]
- Archivos estáticos: idealmente, debería servir sus archivos estáticos no a través de sus aplicaciones web. Esto se puede colocar en un directorio y servir directamente sin tocar sus servidores web.
En este punto, tiene dos aplicaciones web que se ejecutan en su máquina en diferentes puertos, pero todavía no están expuestas al mundo exterior [Suponiendo que tenga las reglas de firewall adecuadas]. Aquí es donde aparece un servidor proxy HTTP como Nginx. Nginx escucha en los puertos 80 y 443 [Los puertos son configurables, pero solo debe cambiar si sabe lo que está haciendo] y envía las solicitudes a la aplicación web correcta en función de la URL de solicitud.
- ¿Cuáles son los mejores sitios para invertir en bienes raíces?
- Alguien que conozco quería que creara un sitio web para ellos, y utilicé una plantilla (a él realmente le gusta). ¿Eso esta bien?
- ¿Es legítimo el estudio de China? ¿Por qué o por qué no?
- ¿Cuáles son los cursos relacionados con VLSI y Verilog en Coursera, edX o cualquier otro sitio en línea?
- Cómo codificar un motor de búsqueda para mi sitio web
Un ejemplo de archivo de configuración nginx se vería así
servidor {
escuchar 80 default_server;
nombre_servidor ;
access_log ;
root ;
location / {
incluir proxy_params;
proxy_pass http: // localhost: 8000;
}
location / {
incluir proxy_params;
proxy_pass http: // localhost: 8000;
}
ubicación / {
incluir proxy_params;
proxy_pass http: // localhost: 3000;
}
# Reenviar todas las solicitudes estáticas para acceder directamente desde la carpeta estática
ubicación / estática / {
}
}
Pero hay algunas cosas en las que debes pensar al hacer esto,
- Reenvío y análisis de encabezado adecuados: puede pensar en leer más sobre esto aquí, Comprender el proxy HTTP de Nginx, el equilibrio de carga, el almacenamiento en búfer y el almacenamiento en caché
- Sesiones en las aplicaciones web: dado que estas son dos aplicaciones web, si un usuario ha iniciado sesión en una de ellas, la otra aplicación web no respeta la autenticación. Pero esto se puede solucionar. Dado que ambos obtendrán la misma información de cookies, puede usarla para verificar el inicio de sesión del usuario si tiene una manera de compartir datos de sesión entre sus aplicaciones.
Es posible que haya un par de advertencias más que deba resolver, pero este sería el punto de partida.