URLの1つのセクションを削除して、いくつかのリクエストをプロキシ(GlassFishを実行)に渡す必要があります。例えば:
https://xxx.net/jazz/MobileApi?id=2&make_id=4
次のようにプロキシに渡す必要があります:
http://X.X.X.X:8080/MobileApi?id=2&make_id=4
次のNginx構成があります。
upstream vito_api {
server 178.63.X.X:8080;
}
server {
listen 80;
listen 443 ssl;
....
location ~ /jazz/(?<section>.*) {
proxy_pass http://vito_api/$section/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
しかし、残念ながら、パラメーターなしで渡すリクエストです。したがって、GlassFishのアクセスログでは、次の情報のみを確認できます。
"148.251.X.X" "NULL-AUTH-USER" "05/Jan/2015:15:18:40 +0100" "GET /MobileApi/ HTTP/1.0" 200 21
何を間違えたか? URLパラメータも渡す方法は?
ありがとうございました。
からnginxのドキュメント(コンテキスト:プレフィックスの場所)
Proxy_passディレクティブがURIで指定されている場合、リクエストがサーバーに渡されると、正規化されたリクエストURIの場所に一致する部分が、ディレクティブで指定されたURIに置き換えられます。
したがって、次のように簡略化できます。
location /jazz/ {
proxy_pass http://vito_api/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
あなたの質問のために、これはあなたのために働くでしょう。正規表現を使用します。
location ^~ /jazz/ {
rewrite ^/jazz/(.*)$ /$1? break;
proxy_pass http://vito_api;
}
私はこれが古い質問であることを知っていますが、私はこれを探していて、別の質問を見つけ、最も簡単な解決策を信じています。 proxy_passの使用中はuriを使用できませんが、変数として使用できます。ここのような:
location ~ ^/app/(.*)$ {
# proxy_pass http://127.0.0.1/some_dir; # error
proxy_pass http://127.0.0.1/some_dir/$1; # ok
}