Diferentes aplicaciones mismo dominio
Escrito por: Guillermo Garron
Fecha: 2015-04-12 17:35:00 00:00
¿Cómo servir múltiples aplicaciones desde un mismo dominio?
Existen ocaciones en que se desea servir desde un mismo dominio multiples aplicaciones, y presentarlas como si fueran sub directorios, cuando en realidad son aplicaciones completamente independientes que pueden o no estar corriendo en el mismo servidor.
Vamos a suponer que queremos servir una página estática en el raíz, Wordpress en el directorio /wordpress/ y ZenPhoto en el directorio /zenphoto/, incluso vamos a tener un foro en /forum/ controlado por Discourse.
Instalando las aplicaciones
No vamos a cubrir el como se instalan las aplicaciones, ya que existe suficiente información sobre como hacerlo, pero vamos a suponer que cada una de ellas esta funcionando en su propio servidor, pero bien podría ser en el mismo servidor en distintos directorios, o containers de Docker.
Usando Nginx como proxy reverso, para enrutar el tráfico a la aplicación que corresponda
Para poder lograr nuestro cometido vamos a tener Nginx en su propio servidor (puedes ponerlo en el mismo que alguna de las aplicaciones, o en el mismo de todas y decides poner todo junto)
El escenario que tendremos es este:
- 192.168.1.1, Nginx en el puerto 80
- 192.168.1.2, Wordpress en el puerto 8080
- 192.168.1.3, ZenPhoto en el puerto 8080
- 192.168.1.4, Discourse en el puerto 8080
Instala Nginx
sudo apt-get install nginx
Cuando este instalado, lo configuramos de la siguiente manera:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html;
index index.html index.htm;
server_name www.example.com;
location / {
try_files $uri $uri/ =404;
}
location /wordpress/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://192.168.1.2:8080;
}
location /photoblog/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://192.168.1.3:8080;
}
location /forum/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://192.168.1.4:8080;
}
}
Como se puede ver, Nginx va a direccionar cada directorio al servidor correspondiente y presentara la información al usuario final, quien verá como si todo estuviera siendo servido por la misma aplicación, claro esta que tienes otras consideraciones, como ser:
- Unificar bases de datos si quieres que ingresen con usuario y password
- Unificar los temas y apariencias de los sitios para hacer la experiencia más agradable al usuario
Espero y le sea de utilidad a alguien, yo lo utilice en algún momento, para llevar un photoblog en el directorio /photoblog/ de mi sitio principal que son páginas estáticas generadas por Jekyll, mientras que el photoblog era Wordpress, para poder subir fotos desde mi celular directo al sitio.