内のURLのプロキシをリバース:このルートにGETしませnginxの+ ExpressJS - 私はルートがあるポート3000で実行されているNodeJS + ExpressJSアプリ持つHTML
router.get('/getHello', function(req, res) {
res.send('Hello, world!');
});
とHTMLページを
<a href="/getHello">
<input type="button" value="Visit Helo World page" />
</a>
このスタンドアロンアプリは意図したとおりに動作します。ボタンを押すとHello, world!
が表示されます。私はこのアプリのリバースプロキシはnginx
を使用してセットアップを持って
:
は今、ここで問題です。ここでsites-available
から設定ファイルが
server {
listen 80;
server_name localhost;
location /routetest/ {
proxy_pass http://127.0.0.1:3000/;
proxy_http_version 1.1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
proxy_cache_bypass $http_upgrade;
}
}
(sites-enabled
とリンク)だ私はhttp://localhost/routetest
を訪問したときにアプリが罰金開きますが、私はボタンをクリックしたとき、私はそれがhttp://localhost/routetest/getHello
を開いてみたかったのに対し、それはhttp://localhost/getHello
開きます。 http://localhost/getHello
が定義されていないので、私は今、404(一方、http://localhost/routetest/getHello
が正しくHello, world
メッセージを返す)
で終わる、私の質問は:
私のフロントエンドは、として/
で書かれていますたとえば、<a href="/getHello">
のようなベースパス(すべてのGETとPOSTリクエストを行う)を入力してください。を/routetest/
に追加する前に、私のHTMLのすべてのURLが良い練習にならないうちに(後でこのベースパスを変更して、それをどこでも更新してください)。では、NGINX
またはexpress
ミドルウェアの場合、/
と書かれたURLに/routetest/
を追加する方法があります。これは、手動でHTML内で変更する必要はありません。
先頭の '/'が削除されていますが、これは最も簡単な解決策ですが、すべてのURLを変更する必要があります。なぜフロントエンドで作業している間に相対URLを考えなかったのか分かりません。相対URLを持つのがよい方法ですか?どんな悪い面? –
あなたが言ったように、変更するすべてのURLを確認することは確かに難しい作業ですが、それでも 'ngx_http_sub_module'で試してみます。 –
@Abhilashk私は一般に相対URLを使用しますが、問題もあります。例えば一部のCSSを参照する共有ページヘッダーがあり、そのページがそのCSSと同じ場所にあるわけではありません。私はいくつかの ' 'トリッキーはそれを助けるかもしれないと思うが、私は自分自身でそのルートをダウンしたことはありませんでした。私はあなたのHTMLのほとんどのURLが 'href ="/'、' src = "/'や 'action ="/'の形式であると考えています。詳細に応じて悪夢。 –
skirtle