2016-11-10 9 views
0

Nginxの背後にはexample.comのレールがあります。 example.com/foobarは、そのレールアプリをパス/foobarで叩くでしょう。Nginxプロキシは、リモートサーバー上の特定のファイルへのパスの下にあります。

私が追加したいのは、example.com/spa/*はリモートサーバー(この場合はs3バケットですが、それは重要ではありません)から特定のファイルを読み込むことです。

だから、私はそうのようなものをマッピングするnginxのしたいと思います:

example.com/ -> rails app with path/
example.com/foo -> rails app with path /foo 
example.com/bar?what=ever -> rails app with path /bar?what=ever 

example.com/spa -> my-bucket.amazonaws.com/index.html 
example.com/spa/foo -> my-bucket.amazonaws.com/index.html 
example.com/spa/bar?what=ever -> my-bucket.amazonaws.com/index.html 

それはちょうど

location/{ 
    proxy_redirect off; 
    proxy_pass http://app_server; 
} 

(他の場所で定義さupstream app_server付き)

だイージー最初の3例があります2番目の3つの例では、どうやってやるのか分かりません。

TLDR:特定のパスの下にあるすべてのものを、リモートサーバー上の単一のファイル/パスにどのようにプロキシしますか?

+0

https://coderwall.com/p/rlguog/nginx-as-proxy-for-amazon-s3-public-private-files – Hackerman

+0

ありがとうございますが、それは私が行っている問題に対処していないようですここに。私のサーバ上のs3- '/ foo/bar'上のパスを私のサーバ上のパスをプロキシすることは、s3の'/bar'に行き、 '/ foo/baz'はs3の' /baz'に行きます。 私がやろうとしていることは、自分のサーバ上のパスにあるすべてのリクエストを、s3上の1つのファイルに転送することです:サーバ上の '/ foo/bar'はs3の'/a_file'に行き、 '/ foo/baz 's3の'/a_file'にも行きます。 – Fishtoaster

+0

私が間違っている場合は私を許してください。しかし、1つのファイルのみを扱っている場合は、バケツにリダイレクトできますか?これは意図ではありませんか? –

答えて

1

用途:

location ^~ /spa { 
    rewrite^/index.html break; 
    proxy_pass ...; 
} 

あなたが同じレベルでいくつかの正規表現の場所を持っていない限り^~修飾子は、必要ではないかもしれません。この接頭辞の位置が優先されます。詳細はthis documentを参照してください。

rewrite ... breakは、変更されたURIを現在のロケーションブロック内で処理させます。詳細は、this documentを参照してください。

関連する問題