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;
}
}
Вот часть того, что я хочу сделать, используя путь, но получая ошибку 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
, Если ваш 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
дорожка.