2017-10-17 7 views
0

内の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内で変更する必要はありません。

答えて

1

最も簡単な解決策は、利用可能なオプションであれば、先頭に/のない相対パスを使用することです。

一般的なケースでは、レスポンスのURLの書き換えは難解で不可能です。あなたが成功して、コンテンツ内の関連するURLを識別することができますが、ngx_http_sub_moduleというタイトルのnginxのcatchilyを使用することができるかもしれないと思われる場合:

http://nginx.org/en/docs/http/ngx_http_sub_module.html

あり同様のことを行う様々なエクスプレスミドルウェアの実装があるが、私は見つけることができませんでした1つは推薦するのに十分に信頼できるように見えた。基本的なアプローチは、compressionミドルウェアと似ています。繰り返しますが、一般的には非常に難しいですが、HTMLをどのように提供するかによって、それほど悪くないかもしれません。

+0

先頭の '/'が削除されていますが、これは最も簡単な解決策ですが、すべてのURLを変更する必要があります。なぜフロントエンドで作業している間に相対URLを考えなかったのか分かりません。相対URLを持つのがよい方法ですか?どんな悪い面? –

+0

あなたが言ったように、変更するすべてのURLを確認することは確かに難しい作業ですが、それでも 'ngx_http_sub_module'で試してみます。 –

+0

@Abhilashk私は一般に相対URLを使用しますが、問題もあります。例えば一部のCSSを参照する共有ページヘッダーがあり、そのページがそのCSSと同じ場所にあるわけではありません。私はいくつかの ''トリッキーはそれを助けるかもしれないと思うが、私は自分自身でそのルートをダウンしたことはありませんでした。私はあなたのHTMLのほとんどのURLが 'href ="/'、' src = "/'や 'action ="/'の形式であると考えています。詳細に応じて悪夢。 – skirtle

関連する問題