サブフォルダーを使用するnginx proxy_pass


11

わかりました。このタスクは単純なはずですが、機能させることができません。ドメイン名の後に(実際にはそのドメイン名のIPの後に)サブフォルダーを配置すると、同じサーバー上の特定のポートにリダイレクトされます。基本的に、私は多くのポートを使用する必要をなくしたいと思います。

これがそのための私のnginx設定です

server {
    listen 80;

    index index.html index.htm index.nginx-debian.html index.php;

    server_name aaa.bbb.ccc.ddd;

    location ^~ /app2 {
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $host;
        proxy_pass http://aaa.bbb.ccc.ddd:8001;
    }
}

したがって、aaa.bbb.ccc.ddd / app2にアクセスすると、http://aaa.bbb.ccc.ddd:8001に解決されます

これはおそらく非常に複雑であることに注意してください。ここで何が欠けていますか?

パットありがとう


「ポートへのリダイレクト」または「ポートへのプロキシ」を意味しますか?それらはかなり異なります。あなたの質問は不明確です、おそらくあなたはクライアントを含むあなたのユースケースを拡張することができます。
Tim

回答:


12

これをリバースプロキシの質問としてタグ付けしたので、ユーザーがhttp://aaa.bbb.ccc.ddd/app2ブラウザにURL のみを表示するようにリクエストをプロキシしたいと思います。

あなたはあなたのlocationブロックをこれに変えることができます:

location ~/app2(.*)$ {
    proxy_set_header X-Real-IP  $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header Host $host;
    proxy_pass http://aaa.bbb.ccc.ddd:8001$1;
}

ここでは、/app2to $1変数の後のURI部分をキャプチャし、proxy_passディレクティブで使用します。


ありがとうございました。そのちょっとトリックをしました。aaa.bbb.ccc.ddd:8001は部分的にしか表示されません。そのページにはWebソケットがあり、多くのJavaスクリプトがあります。これは、ポートをプロキシし、上記のTimのように転送しないためだと思います。これは実際にnginxを使用して達成することは可能ですか?
pAt84 2016

aaa.bbb.ccc.ddd:8001ページのリソースのURLはどのように見えますか?ほとんどの場合、URLを修正して/app2パーツを含める必要があります。
Tero Kilkanen 16

これは実際には単なるWebソケットです(レーダーデータ、自動車などを表示しています)。ソースコードに「app2」の兆候はありません。
pAt84 2016

はい、そうです。Webソケットを呼び出すために、JSは「var ws = new WebSocket( 'ws://' + location.host + '/ ws');」を使用します。location.hostでポート番号が失われるため、全体が機能しなくなります。
pAt84

わかりましたので、aaa.bbb.ccc.ddd / app2を呼び出したら、内部でaaa.bbb.ccc.ddd:8001を使用する必要があります。別のオプションは、すべてのJavaスクリプトを変更することです。理由は、nginxを使用して「one-port-solution」を提供したいが、アクセスした後(たとえば、http // aaa.bbb.ccc.ddd / app2を介して)、内部的にはそれが必要であることですaaa.bbb.ccc.ddd:8001に戻ります。それは可能ですか?
pAt84
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.