1

スペースを含むパラメーターを使用して GET API を呼び出そうとしています:

https://abc.xyz/search/web/buildings/search/v2/city/new%20york

エンドポイントは、リクエストを適切なマシンにリダイレクトするロード バランサー (nginx) にヒットします。

応答で、505 HTTP バージョンがサポートされていませんというエラーが表示されます。しかし、HTTP (内部 IP を使用) を使用してロード バランサーに同じ要求を行うと、正常に応答が返されます。

両方のケースの関連するアクセス ログは次のとおりです。

http経由で呼び出されたときのnginxのアクセスログ

"GET /search/web/buildings/search/v2/city/r%20c HTTP/1.1" S=200 487 T=0.005 R=- 10.140.15.199

http経由で呼び出されたときのマシンのアクセスログ

"GET /search/search/web/buildings/search/v2/city/r%20c HTTP/1.0" 200 36

上記のリクエストは正常に機能します。d%20aしかし、https を介してリクエストすると、マシンのリクエストは異なります (代わりにあるはずですd a) 。

https経由で呼び出されたときのnginxのアクセスログ

"GET /search/web/buildings/search/v2/city/d%20a HTTP/1.1" S=505 168 T=0.001 R=- 35.200.191.89

https経由で呼び出されたときのマシンのアクセスログ

"GET /search/search/web/buildings/search/v2/city/d a HTTP/1.0" 505 -

関連するnginx構成は次のとおりです。

upstream searchtomcat {
    least_conn;
        server search-1:8080;
        server search-2:8080;

}

server {

    #listen 443 ssl http2;
    listen 443; 
    client_max_body_size 100M;

...

    location ~* ^/search/(.*)$ {
        proxy_set_header X-Forwarded-Host $host;
            proxy_set_header X-Forwarded-Server $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass  http://searchtomcat/search/search/$1;
            proxy_read_timeout 900;
    }

}

には何もありませんerror.log

マシンが別の方法でリクエストを取得している理由として考えられるのは何ですか?

4

1 に答える 1

3

全体の問題は、Tomcat に送信される URL に含まれるスペースが原因で発生しています。そのため、aは ではなく HTTP バージョン コードとして解釈されていますHTTP/1.0。余分なスペースの問題を解決すると、問題が解決します。

rewritein block を使用location{}すると、問題が解決するはずです。

location /search/ {
    rewrite ^/search(/.*) /search/search$1 break;

    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass  http://searchtomcat;
    proxy_read_timeout 900;
}

httpまた、サーバーとhttpsサーバーの構成が異なる場合は、こちらをご覧くださいhttp。そっちの方が正しいようです。

于 2018-10-05T20:10:13.027 に答える