Я пытаюсь вызвать GET API с параметром, в котором есть пробел:
https://abc.xyz/search/web/buildings/search/v2/city/new%20york
Конечная точка обращается к балансировщику нагрузки (nginx), который перенаправляет запрос на подходящий компьютер.
В ответ я получаю 505 Ошибка HTTP версии не поддерживается.Но когда я делаю тот же запрос к балансировщику нагрузки, используя HTTP (используя внутренний IP), он успешно возвращает ответ.
Вот соответствующие журналы доступа в обоих случаях:
журнал доступа к nginx при вызове через http
"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
Приведенный выше запрос работает нормально.но когда мы запрашиваем через https, запрос в машине поступает иначе (это должен был быть d%20a
вместо d a
)
журнал доступа nginx при вызове через https
"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
.
нет ничего, что могло быбыть возможной причиной, по которой машина получает запрос другим способом?