Обратный прокси Nginx к Node.js с перезаписью
У меня есть несколько приложений, работающих за обратным прокси-сервером Nginx, одним из которых является Node-сервер с Express.js. Я'м проксимdomain.com/demo/app/
вlocalhost:7003/
используя эту конфигурацию 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
respectively.I»
мы решили эту проблему, заставив 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")
Какие'более элегантный способ справиться с этим? Isn»Есть ли способ заставить Nginx распознавать запросы, поступающие с вышестоящего сервера, и автоматически перенаправлять их на этот сервер?