Nginx、Weblogic、およびパスによるリバースプロキシ

Nginx、Weblogic、およびパスによるリバースプロキシ

nginx でパスを使用しているときにリバース プロキシが機能しないという問題が発生しています。アプリケーションに 1 つのアドレスを設定し、パスを使用して環境を指定しようとしています。パスによっては、別のサーバーを指すことになります。直接リンクを使用するとリバース プロキシが機能しますが、パスを使用すると 404 エラーが発生します。

app.foo.bar/dev = 404 エラー devapp.foo.bar = 成功

app.foo.bar/dev で何を間違えたのでしょうか?

以下は動作しているリバース プロキシの設定ですが、私は使用しません。

server  {
  listen  80;   # DEV Application Proxy
  server_name  devapp.foo.bar;
  location  / {
    proxy_pass  http://appserver.foo.bar:7010;
    proxy_set_header    Host            $host;
        proxy_set_header    X-Real-IP       $remote_addr;
        proxy_set_header    X-Forwarded-for $remote_addr;
        port_in_redirect off;
        proxy_redirect   http://appserver.foo.bar:7010/ /;
        proxy_connect_timeout 300;
    }
  }

以下は、パスを使用して実行しようとしているが、404 エラーが発生している部分です。

# APP Environment Proxy

server {

  listen 80;
  server_name app.foo.bar;
     location /dev {
      proxy_pass http://appserver.foo.bar:7010;
      proxy_set_header    Host            $host;
      proxy_set_header    X-Real-IP       $remote_addr;
      proxy_set_header    X-Forwarded-for $remote_addr;
      port_in_redirect off;
      proxy_redirect     http://appserver.foo.bar:7010 /;
      proxy_connect_timeout 300;

  }
}

このタイプの設定を Google で検索しましたが、解決策が見つかりません。ご協力いただければ幸いです。

答え1

がある場合proxy_pass http://appserver.foo.bar:7010;、nginx はバックエンドに渡されるリクエスト URL に正規化された URI を追加します。

したがって、 をリクエストするとhttp://app.foo.bar/dev、リクエストは に送信されますhttp://appserver.foo.bar:7010/dev。開発サーバーにこのパスがない場合は 404 が返され、nginx はそれをクライアントに返します。

で始まるすべてのリクエストhttp://app.foo.bar/devを送信し、http://appserver.foo.bar:7010残りのすべての URI がバックエンド サーバー URI に追加されるようにするには、次の構成を使用できます。

location ~ ^/dev(.+)$ {
    proxy_pass http://appserver.foo.bar:7010$1$is_args$args;
    ...
}

したがって、正規表現の後の部分を/dev変数にキャプチャし、その変数をproxy_passパスの末尾に追加します。

関連情報