У меня есть несколько приложений, работающих за обратным прокси-сервером Nginx, одним из которых является сервер Node с Express.js. Я проксинг domain.com/demo/app/<path>
до localhost:7003/<path>
, используя эту конфигурацию Nginx:
http {
...
server {
listen 80;
server_name domain.com;
...
location /demo/app {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Scheme $scheme;
rewrite ^/demo/app/?(.*) /$1 break;
proxy_pass http://localhost:7003;
}
...
}
}
Это отлично работает, а app
получает запросы, как если бы он был внедрен в /
. Проблема заключается в том, что app
обрабатывает свои собственные статические файлы и может запрашивать маршруты, такие как css/app.css
или images/image.jpg
. Но из-за обратного прокси они фактически существуют в /demo/app/css/app.css
и /demo/app/images/image.jpg
соответственно.
Я решил это, получив Nginx для перехода к Node настраиваемому заголовку, указывающему корневой путь, который сервер Node добавляет к URL-адресам всех последующих запросов. Но теперь мой код завален этими корневыми строками пути. Например, часть моих исходных шаблонов:
link(rel='stylesheet', href="#{basePath}/css/base.css")
link(rel='stylesheet', href="#{basePath}/css/skeleton.css")
link(rel='stylesheet', href="#{basePath}/css/layout.css")
Какой более элегантный способ справиться с этим? Нет ли способа заставить Nginx распознавать запросы, поступающие с восходящего сервера, и автоматически перенаправлять их на этот сервер?