Nginx, Weblogic и обратный прокси по пути

Nginx, Weblogic и обратный прокси по пути

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

app.foo.bar/dev = ошибка 404 devapp.foo.bar = успех

Что я сделал не так в app.foo.bar/dev?

Вот настройка обратного прокси-сервера, которая работает, но я бы предпочел ее не использовать:

server  {
  listen  80;   # DEV Application Proxy
  server_name  devapp.foo.bar;
  location  / {
    proxy_pass  http://appserver.foo.bar:7010;
    proxy_set_header    Host            $host;
        proxy_set_header    X-Real-IP       $remote_addr;
        proxy_set_header    X-Forwarded-for $remote_addr;
        port_in_redirect off;
        proxy_redirect   http://appserver.foo.bar:7010/ /;
        proxy_connect_timeout 300;
    }
  }

Вот часть того, что я хочу сделать, используя path, но получаю ошибку 404.

# APP Environment Proxy

server {

  listen 80;
  server_name app.foo.bar;
     location /dev {
      proxy_pass http://appserver.foo.bar:7010;
      proxy_set_header    Host            $host;
      proxy_set_header    X-Real-IP       $remote_addr;
      proxy_set_header    X-Forwarded-for $remote_addr;
      port_in_redirect off;
      proxy_redirect     http://appserver.foo.bar:7010 /;
      proxy_connect_timeout 300;

  }
}

Я гуглил этот тип настройки, но не могу найти решение. Заранее спасибо за любую помощь.

решение1

Если у вас есть proxy_pass http://appserver.foo.bar:7010;, nginx добавляет нормализованный URI к URL-адресу запроса, переданному в бэкэнд.

Итак, когда вы запрашиваете http://app.foo.bar/dev, запрос отправляется на http://appserver.foo.bar:7010/dev. Если ваш сервер разработки не имеет этого пути, то он вернет 404, который nginx возвращает клиенту.

Если вы хотите, чтобы все запросы, начинающиеся с , http://app.foo.bar/devнаправлялись к http://appserver.foo.bar:7010, а все остальные URI добавлялись к URI внутреннего сервера, то вы можете использовать следующую конфигурацию:

location ~ ^/dev(.+)$ {
    proxy_pass http://appserver.foo.bar:7010$1$is_args$args;
    ...
}

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

Связанный контент