Hospedando vários aplicativos Nodejs em um único domínio

3

Estou tentando executar vários aplicativos nodejs (usando o framework expresso) todos servidos na mesma porta externa (80), mas cada um sob um subdiretório.

Por exemplo Eu quero ...

NodeJsApplication1 estará disponível no link

NodeJsApplication2 estará disponível em link

etc.

Eu tentei usar o Nginx como proxy com um conf semelhante ao seguinte.

server {
    listen       80;
    server_name  www.mydomain.com;

    location / {
        root   /var/www/html;
        index  index.html index.htm;
    }

    location /NodeJsApplication1/ {
        proxy_pass http://0.0.0.0:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        rewrite /NodeJsApplication1/(.*) /$1 break;
    }

    location /NodeJsApplication2/ {
        proxy_pass http://0.0.0.0:3001;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        rewrite /NodeJsApplication2/(.*) /$1 break;
    }
}

Isso funciona para acessar a página, mas quebra todas as URLs relativas na página de retorno. Todos os scripts e csss estão apontando para a raiz (por exemplo, www.mydomain.com/styles/main.css).

Eu sei que posso usar vários subdomínios, mas não quero percorrer esse caminho. Eu preferiria ter um proxy de subpasta, então tudo é feito em software e não preciso configurar nenhum registro de DNS para cada aplicativo.

Isso é possível?

Atualizar

Dentro dos próprios aplicativos, todos os links estão usando caminhos relativos. Por exemplo:

Mas quando processado, o navegador os trata como "www.mydomain.com/styles/main.css" em vez de "www.mydomain.com/NodeJsApplication1/styles/main.css".

sendo o primeiro para modificar os aplicativos NodeJS para especificar uma URL completa, mas isso requer que o aplicativo conheça o subdiretório com o qual o nginx está configurado e destrói a portabilidade para outro ambiente.

    
por user3012307 25.04.2014 / 17:48

2 respostas

3

Eu tive um problema semelhante ao ter vários aplicativos MEAN no mesmo domínio. Eu queria subdiretórios em vez de criar um novo subdomínio para cada aplicativo. Além de adicionar uma reescrita à sua configuração do Nginx:

rewrite ^/app1/(.*)$ /$1 break;

Você também precisa definir sua tag <base> na cabeça do seu índice:

<base href="/app1/">

de link

    
por 02.10.2014 / 18:05
2

Isso deve ser resolvido nos aplicativos NodeJS. A maioria dos aplicativos bem escritos permite que você especifique a URL raiz na qual o aplicativo será hospedado e use-o para gerar todos os URLs locais. Por isso, sugiro que você faça o mesmo para a sua inscrição.

    
por 27.04.2014 / 12:51

Tags