2012-02-23 16 views
2

したがって、nginx.confのnode.jsアプリケーションを指すときに仮想パスを設定しています。関連するセクションは次のようになります:Express.jsが仮想パスでリダイレクト

location /app { 
    rewrite /app/(.*) /$1 break; 
    proxy_pass http://localhost:3000; 
    proxy_redirect off; 
    proxy_set_header Host $host; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
} 

私のエクスプレスアプリがリダイレクトを呼び出す場合を除き、素晴らしいです。

例として、DEVボックスは、ポート8080上でnginxの実行されている、そしてそのノードアプリのルートへのURLのは、次のようになります。私は急行からres.redirect('/app')を呼び出すと

http://localhost:8080/app 

、実際のリダイレクト

http://localhost/app 

ポート80で何も実行されていないため、これは失敗します。また、URLを絶対URLにするためのリクエストオブジェクトのプロパティも見つけられませんでした。それをハードコーディングしたり、環境変数にしたりするのに不十分なアイデアはありますか?

*編集:ちょっと調べてみると、この場合はホストヘッダーが「localhost」と定義されているように見えますが、expresアプリケーションに直接接続すると、ホストヘッダーは「localhost :3000 '(3000はノード・アプリケーションがリッスンしているポートです)。では、上記のマッピングをnginxサーバーのポートを含むように変更するにはどうすればよいですか?

答えて

4

私はそれがあるため、この行のためですかなり確信している:

proxy_set_header Host $host; 

それは私が推測localhostHostヘッダーを設定します。 proxy_set_headerのドキュメントを参照してください。私は、これはトリックを行うだろうと思う:

proxy_set_header Host $http_host; 

それはlocalhost:8080する必要があり、クライアントの要求からHostヘッダに渡します。

+0

完璧でした。ありがとう! – Paul

関連する問題