khusamov
@khusamov
ReactJS, NodeJS, TypeScript, Sencha ExtJS

Как запустить одновременно несколько веб-приложений под node.js?

Допустим я создал одно веб-приложение. И поставил его на порт 80.
Как мне теперь на том же сервере запустить второе веб-приложение?
Оно должно находится на том же порту, т.е. 80-ом.
Чтобы оба приложения откликались на свои доменные имена.

Проблема осложняется еще ограничением ОЗУ:
когда будет 100 сайтов - в ОЗУ будут 100 копий node.js. Сейчас одно приложение занимает 60-80Мб, это нужно будет 8Гб ОЗУ... Столько ОЗУ нету.
  • Вопрос задан
  • 824 просмотра
Решения вопроса 1
k12th
@k12th
console.log(`You're pulling my leg, right?`);
Надо поднимать nginx и создавать в нем два домена, каждый будет проксировать свое приложения. Нодовские приложения придется переместить с 80 порта на что-то незанятое (каждое на свое). Примерный конфиг для одного такого приложения:

upstream app1 {
    server 127.0.0.1:3003; # порт, который слушает приложения
}

server {
    listen 80;

    # черновики для разных серверов, раcкомментить нужный по необходимости
	
    # home box
    #set $apppath /home/hogart/projects/app1;
    #server_name app1.local;

    # beta
    #set $apppath /home/hogart/app1;
    #server_name app1.kitmanov.name;

    # production
    #set $apppath /home/hogart/app1;
    #server_name app1.info;


    root $apppath;

    # раздача статики
    location ~ /style|js|img/ {
        root $apppath/public/;
        gzip on;
        gzip_static on;
        gzip_types text/css application/x-javascript;
        gzip_proxied no-store no-cache private expired auth;
    }

    location / {
        proxy_pass http://app1; # из upstream (см. выше)
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr; # удалить, если приложению не нужен реальный IP юзера
        proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for; # удалить, если приложению не нужен реальный IP юзера
        proxy_cache_bypass $http_upgrade;
    }
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@sergeystepanov1988
Согласен с Константин Китманов , надо ставить перед нодой nginx и запускать каждый нодовский процесс на своем порте. Снаружи будет видно только nginx на 80-м порту, а внутри нодовские процессы могут иметь хоть какой порт.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы