Я пытаюсь запустить несколько приложений nodejs (используя экспресс-фреймворк), все они обслуживаются на одном и том же внешнем порту (80), но каждое в подкаталоге.
Например. Я хочу...
NodeJsApplication1 будет доступен по адресу http://www.mydomain.com/NodeJsApplication1
NodeJsApplication2 будет доступен по адресу http://www.mydomain.com/NodeJsApplication2
и т.п.
Я пробовал использовать Nginx в качестве прокси с конфигурацией, подобной следующей.
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;
}
}
Это работает для доступа к странице, но ломает все относительные URL-адреса на возвращающейся странице. Все скрипты, CSS и т. Д. Указывают на корень (например, www.mydomain.com/styles/main.css).
Я знаю, что могу использовать несколько поддоменов, но не хочу идти по этому пути. Я бы предпочел использовать прокси для подпапок, чтобы все это обрабатывалось программным обеспечением, и мне не нужно было настраивать какие-либо записи DNS для каждого приложения.
Это вообще возможно?
Обновить
Внутри самих приложений все ссылки используют относительные пути. Например:
Но при отображении браузер рассматривает их как «www.mydomain.com/styles/main.css», а не «www.mydomain.com/NodeJsApplication1/styles/main.css».
первый - изменить приложения NodeJS, чтобы указать полный URL-адрес, но для этого требуется, чтобы приложение знало подкаталог, с которым настроен nginx, и это разрушает переносимость в другую среду.
У меня была аналогичная проблема с несколькими приложениями MEAN в одном домене. Мне нужны подкаталоги вместо того, чтобы создавать новый поддомен для каждого приложения. Помимо добавления перезаписи в конфигурацию Nginx:
rewrite ^/app1/(.*)$ /$1 break;
Вам также необходимо установить свой <base>
тег в заголовке вашего индекса:
<base href="/app1/">
Это должно быть решено в приложениях NodeJS. Большинство хорошо написанных приложений позволяют вам указать корневой URL-адрес, на котором будет размещено приложение, и использовать его для генерации всех локальных URL-адресов, поэтому я предлагаю вам сделать то же самое для вашего приложения.