Nginxリバースプロキシの背後で実行されているアプリがいくつかあります。そのうちの1つは、Express.jsを備えたノードサーバーです。私はこのNginx構成を使用するようにプロキシdomain.com/demo/app/<path>
しています:localhost:7003/<path>
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にアップストリームサーバーからのリクエストを認識させ、それらをそのサーバーに自動的に転送する方法はありませんか?