nginx proxy_pass с использованием подпапки

11

хорошо, эта задача должна быть простой, но я просто не могу заставить ее работать. Я хотел бы иметь подпапку после моего доменного имени (фактически после IP этого доменного имени), которая перенаправляет на определенный порт на том же сервере. По сути, я хочу избавиться от необходимости использовать много портов.

Вот мой конфиг nginx для этого

server {
    listen 80;

    index index.html index.htm index.nginx-debian.html index.php;

    server_name aaa.bbb.ccc.ddd;

    location ^~ /app2 {
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $host;
        proxy_pass http://aaa.bbb.ccc.ddd:8001;
    }
}

Поэтому при доступе к aaa.bbb.ccc.ddd / app2 я хотел бы разрешить это по адресу http: //aaa.bbb.ccc.ddd: 8001 .

Это может заметить, может быть, так сложно. Что мне здесь не хватает?

Спасибо, Пэт

pAt84
источник
Вы имеете в виду «перенаправления на порт» или «прокси на порт»? Они совсем другие. Ваш вопрос неясен, возможно, вы могли бы расширить свой вариант использования, включая клиента.
Тим

Ответы:

12

Поскольку вы пометили это как вопрос обратного прокси-сервера, я предполагаю, что вы имеете в виду, что вы хотите прокси-запрос, чтобы пользователь видел http://aaa.bbb.ccc.ddd/app2URL только в своем браузере.

Вы можете изменить свой locationблок на это:

location ~/app2(.*)$ {
    proxy_set_header X-Real-IP  $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header Host $host;
    proxy_pass http://aaa.bbb.ccc.ddd:8001$1;
}

Здесь мы фиксируем часть URI после /app2к $1переменной, и использовать его в proxy_passдирективе.

Теро Килканен
источник
Спасибо. Это своего рода сделал. aaa.bbb.ccc.ddd: 8001 отображается только частично. На этой странице есть веб-сокеты и множество java-скриптов. Я предполагаю, что это потому, что я прокси порт и не пересылаю его, как Тим, упомянутый выше. На самом деле это возможно сделать, просто используя nginx?
pAt84
Как выглядят URL ресурсов на aaa.bbb.ccc.ddd:8001странице? Скорее всего, вам нужно исправить URL, чтобы содержать /app2часть.
Теро Килканен
Это действительно просто веб-розетка (показывающая некоторые радиолокационные данные, автомобильная ...). В исходном коде нет признаков "app2".
pAt84
Хм хорошо, да. Для вызова websocket JS использует "var ws = new WebSocket ('ws: //' + location.host + '/ ws');". location.host теперь пропускает номер порта, из-за чего все перестает работать.
pAt84
Итак, похоже, что когда я вызываю aaa.bbb.ccc.ddd / app2, мне требуется, чтобы он внутренне использовал aaa.bbb.ccc.ddd: 8001. Другой вариант - изменить все сценарии Java. Причина в том, что я хочу использовать nginx, чтобы дать мне «решение с одним портом», но после того, как я получу доступ (например, через http // aaa.bbb.ccc.ddd / app2), мне, внутренне, это понадобится вернуться к aaa.bbb.ccc.ddd: 8001. Это возможно?
pAt84