У меня есть два узла js-приложений. Я запускаюсь в одном и том же поле, и я хотел бы, чтобы он запускал приложение js первого узла для всей маршрутизации, за исключением того, что URL-адрес www.domain. com/blog, чтобы перейти к другому приложению js узла. Возможно ли это с этой настройкой или мне нужно настроить субдомены и использовать nginx или что-то еще?Хостинг двух приложений Node.JS в одном домене
ответ
Вы можете достичь этого, используя nginx в качестве обратного прокси.
Предполагая, что у вас есть процесс узла вашего блога, запущенный на порту 3000, а другой узел - процесс на 3001, будет выглядеть простая конфигурация;
upstream blog {
server 127.0.0.1:3000;
}
upstream other {
server 127.0.0.1:3001;
}
server {
listen 80;
server_name www.domain.com;
location /blog {
proxy_pass http://blog;
proxy_http_version 1.1;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header X-Real-IP $proxy_protocol_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto tcp;
proxy_set_header X-NginX-Proxy true;
}
location/{
proxy_pass http://other;
proxy_http_version 1.1;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header X-Real-IP $proxy_protocol_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto tcp;
proxy_set_header X-NginX-Proxy true;
}
}
Когда я пытаюсь это сделать, мой главный узел работает отлично, однако мой другой показывает некоторые обещания, но не совсем там. Когда я иду в/блог, я получаю «404 Страница не найдена Перейти на первую страницу →« Затем, когда я нажимаю «Перейдите на главную страницу, он отправит меня прямо на локальный хост: 3000». Так ясно, что есть какая-то связь. Одно предостережение: я удалял default_server proxy_protocol из строки прослушивания, потому что когда он там был, он был сломан, это связано? Также обратите внимание, что я в значительной степени скопировал и вложил то, что вы положили там дословно, и бросил его в файл nginx conf. – user1200387
Убедитесь, что ваши серверы узлов настроены так, чтобы они обслуживали все, как если бы они запускались от root, потому что с точки зрения узла узла это корень. Однако ссылки в html должны основываться на внешнем URL-адресе, поэтому из/blog. –
Глядя на журналы, когда я нахожусь в конечной точке/blogs, вот что я получаю: Blog App Log: GET/blog 301 0.571 ms - - GET/blog/404 9.134 ms - - Обычный журнал приложений: GET/ghost/css/ghost.min.css? v = 9b05545ca1 200 2ms GET /ghost/img/[email protected]?v=9b05545ca1 200 2ms. Должны ли оба сервера ударяться по этому запросу? – user1200387
Да, это очень возможно с использованием обратного прокси. –