nginx на докере не работает с URL-адресом местоположения

Я запускаю nginx в докере, чтобы действовать как обратный прокси для нескольких приложений. например,

http://localhost/eureka/ will show http://registry:8761
http://localhost/zipkin/ will show http://zipkin:9411

Я начал с конфигурирования nginx,

http {
  server {

      location /eureka/ {
          proxy_pass http://registry:9761;
      }
  }
}

Вышеупомянутая конфигурация не работает, и nginx выдает ошибку как,

proxy       | 172.20.0.1 - - [24/Mar/2017:10:46:28 +0000] "GET /eureka/ HTTP/1.1" 404 0 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36"

Но приведенная ниже конфигурация работает для http://localhost/ с отображением страницы эврики.

http {
  server {

      location / {
          proxy_pass http://registry:9761;
      }
  }
}

Что мне не хватает? Согласно nginx proxy_pass, он должен работать, но это не так.


person jaks    schedule 24.03.2017    source источник
comment
Эти два местоположения различны: одно передает URI /eureka/ в registry:9761, а другое передает /. Вам нужно изменить URI, прежде чем он будет передан вверх по течению?   -  person Richard Smith    schedule 24.03.2017
comment
Я хочу скрыть несколько приложений за nginx. если что-то передается после URI, это должно быть передано, например. / eureka / abc необходимо передать в реестр: 9761 / abc   -  person jaks    schedule 25.03.2017


Ответы (1)


Директива proxy_pass может дополнительно изменить URI перед его передачей вверх по течению. Чтобы удалить префикс /eureka/, просто добавьте URI / к оператору proxy_pass.

Например:

location /eureka/ {
    proxy_pass http://registry:9761/;
}

URI /eureka/foo будет сопоставлен с http://registry:9761/foo. Дополнительную информацию см. В этом документе.

Конечно, это только половина проблемы. Во многих случаях вышестоящее приложение должно обращаться к своим ресурсам с использованием правильного префикса или относительного URI пути. Многие приложения нельзя принудительно поместить в подкаталог.

person Richard Smith    schedule 25.03.2017