0

具体的には、場所をルーティングするために使用しているURIの一部を消費(キャプチャ?)しないようにするには、Nginxが必要だと思います。しかし、そのようなことが可能かどうかはわかりません。


バックアップさせてください。アプリのセットアップを移行しています。以前は、すべてに一致する単一のロケーション ブロックを含む Nginx 構成ファイルがありました。

server {
    listen   80;
    server_name ec2-54-234-175-21.compute-1.amazonaws.com;

    location / {
        ...
        proxy_pass http://localhost:8000/;
    }

このセットアップでは、今まで Django アプリを実行していました。Nginx がユーザーを唯一のエンドポイントにルーティングした後、Django は URI 全体を消費します。これが意味することは、内部的に、Django は切り捨てて、それも必要とする を/api/持っているということです。1.0

次に、Nginx を使用して、それぞれがアプリをホストする複数のサーバーをプロキシします。前述の内部ルーティングのため、Django アプリは (少なくとも) の URI を受け取る必要が/1.0あり、もう一方 (Flask 上) は を取得する必要があります/api/2.0。ただし、Nginx のロケーション ディレクティブを意味のあるものにするためには、2 つのアプリケーションを区別する必要があります。私が考え出したのは、次の 2 つの場所ディレクティブだけを用意するということです。

server {
    listen   80;
    server_name ec2-54-234-175-21.compute-1.amazonaws.com;

    location /api/[1.0] {
        ...
        proxy_pass http://localhost:8000/;
    }

    location / {
        ...
        proxy_pass http://localhost:8080/;
    }

ただし、括弧内の [1.0] に注意してください。それが存在する場合、目的のリソースに実際にアクセスするには、/api/1.0/1.0 の URI を入力する必要があることに気付きました。そのため、どういうわけか、nginx conf に消費しない場所が必要です。これをもっと簡単な言葉で表現する方法を知っていれば、そうするでしょう。私が望むことは可能ですか?

4

1 に答える 1

0

この質問をしてから約 1 週間後、同僚が私が求めていた答えを指摘してくれました。それは非常に簡単です。重要なのは、Nginx がルーティングで提供する可鍛性にあります。にあったリ​​ソースにアクセスしたかった/api/1.0のですが、設定で 2 つのアプリを区別する必要があるため、次のようにします。

サーバー {

listen   80;
server_name ec2-54-234-175-21.compute-1.amazonaws.com;

location /api/1.0 {
    ...
    proxy_pass http://localhost:8000/api/1.0;
}
location /api/2.0 {
    ...
    proxy_pass http://localhost:8080/api/2.0;
}

これにより、上で書いたように、目的のリソース URL を使用してルーティングし、それを複製して特定のアプリ内の実際の場所を参照するため、URL は効果的に「非消費」になります。

多分これは他の誰かを助けるでしょう。

于 2014-05-10T00:27:35.817 に答える