Diferentes aplicaciones mismo dominio

Escrito por:
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.