Proxy_pass с Nginx и докером

У меня есть простая задача с nginx, но я не могу ее решить:

У меня есть домен example.com, который указывает на локальный сервер 192.168.1.150, на котором работает nginx в докере.

Но у меня есть другой контейнер, «myapp», работающий на порту 8080, и я хочу передать это местоположение — с «https://192.168.1.150/myapp» и «https://example.com/myapp» на «http://192.168.1.150:8080", который является только http, и я хочу иметь безопасное соединение через nginx.

Проблема, которую нужно решить

На данный момент, если я запрашиваю https://192.168.1.150/myapp, он переходит к https://192.168.1.150/login, но цель должна быть https://192.168.1.150/myapp/login. Хотя URL успешно «меняется», nginx отвечает HTTP 404;

Смотрите мои настройки местоположения в nginx.conf:

location /myapp {
        proxy_pass         http://192.168.1.150:8080;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Host $http_host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
}

SSL

Просто примечание: я уже настроил SSL с перенаправлением с HTTP, протестировал простое местоположение «/ test», которое возвращает обычный текст «ОК», выглядит нормально.

Если это не может быть решено таким образом, я также могу использовать его с другим сервером и слушать другой порт, кроме 443. (пробовал, тот же результат)

Любая помощь будет оценена! Заранее спасибо.

Вы говорите, что вас перенаправили? Затем само приложение неправильно перенаправляет пользователя на /login вместо /myapp/login.

GChuf 01.05.2023 21:35

Да спасибо. Мне пришлось переписать request_uri следующим образом: rewrite ^/myapp(.*) $1? break;

koger23 02.05.2023 08:26
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
0
2
90
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Попробуйте это, может это то, что вам нужно:

прокси_пасс http://myapp;

Для этого я должен определить upstream myapp { server 192.168.1.150:8080 } правильно? Такое же поведение.

koger23 30.04.2023 10:55

Нет в вашем коде попробуйте myapp вместо 192.168.1.150:8080

Helper 30.04.2023 11:01

Не работает. То, что мне нужно было использовать rewrite ^/myapp(.*) /$1/$2 break;, но это не подходит для статических файлов или сложных приложений. Только что протестировано с простым http.server с python.

koger23 01.05.2023 21:44
Ответ принят как подходящий

Итак, отвечая на мой собственный вопрос: мне пришлось переписать uri для правильного перенаправления. У меня не было подходящих слов, чтобы найти информацию в сети, но такие ключевые слова, как «сохранить», помогли найти примеры.

Решение состояло в том, чтобы использовать модуль перезаписи nginx и написать замену для раздела «myapp»: rewrite ^/myapp(.*) $1? break;.

Больше информации на ngx_http_rewrite_module.html и поиск «замена».

Итак, на данный момент мой рабочий конфиг с простым Python http.server:

location /myapp/ {
    rewrite ^/myapp(.*) $1? break;
    proxy_pass          http://myapp$is_args$args;
    proxy_set_header    Upgrade $http_upgrade;
    proxy_set_header    Connection keep-alive;
    proxy_set_header    Host $http_host$request_uri;
    proxy_cache_bypa    $http_upgrade;
    proxy_set_header    X-Real-IP $remote_addr;
    proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_f>
    proxy_set_header    X-Forwarded-Proto $scheme;
    proxy_set_header    X-Real-IP $remote_addr;
}

Другие перенаправления на веб-приложения и серверы не работают, но мой вопрос решен.

У меня также были проблемы без завершающей косой черты, например example.com/myapp, nginx сбросил HTTP 500, что я преодолел с помощью этого:

location ~ ^/myapp$ {
    return 301 $request_uri/;
}

Спасибо за помощь!

Другие вопросы по теме