Spring & Docker: запрос был отклонен, поскольку URL не был нормализован - PullRequest
0 голосов
/ 06 марта 2019

У меня есть два док-контейнера, которые должны общаться друг с другом.Одним из них является контейнер nginx для внешнего интерфейса, который должен взаимодействовать с внутренним компонентом Spring в другом контейнере.Связь работает нормально при запуске вне Docker, но когда я докеризирую проекты, я получаю следующую ошибку при попытке отправить любые запросы от внешнего интерфейса до внутреннего:

 org.springframework.security.web.firewall.RequestRejectedException: The request was rejected because the URL was not normalized.

от SpringStrictHttpFirewall.

nginx.conf

load_module "modules/ngx_http_perl_module.so";
env HELIUM_LOCATION;

http {
    perl_set $helium_location 'sub { return $ENV{"HELIUM_LOCATION"}; }';

    server {
        listen 8000;
        root /usr/share/nginx/html;
        include /etc/nginx/mime.types;
        client_max_body_size 10M;

        location /api {
            rewrite ^/api(.*) /$1 break;
            proxy_set_header X-Forwarded-Host $host:$server_port;
            proxy_set_header X-Forwarded-Prefix /api;
            proxy_pass http://$helium_location;
        }

        location /health {
             default_type application/json;
             return 200 '{"status": "UP"}';
        }

        location / {
            try_files $uri $uri/ /index.html;
        }
    }
 }

Загрузочная версия Spring - 2.1, а контейнер nginx - nginx: 1.11.8-alpine.Это работает при использовании Spring boot 1.5.7, поэтому что-то изменилось с тем, как Spring обрабатывает эти запросы?

Если есть какая-либо другая информация, которая будет полезна для решения этой проблемы, дайте мне знать, и я получу ее дляты, как я могу.Спасибо!

1 Ответ

1 голос
/ 06 марта 2019

Из Документация Spring Framework

Например, он может содержать последовательности обхода пути (например, /../) или несколько косых черт (//), которые также могутвызвать совпадения с образцомИзмените его на

rewrite ^/api(.*) $1 break;

Вы можете перезагрузить конфигурацию, выполнив nginx -s reload

Теперь не добавляются дополнительные косые черты

127.0.0.1 - - [06/Mar/2019:16:27:22 +0000] "GET /something HTTP/1.0" 200 612 "-" "curl/7.52.1"
172.17.0.1 - - [06/Mar/2019:16:27:22 +0000] "GET /api/something HTTP/1.1" 200 612 "-" "curl/7.52.1"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...