Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Возможно ли заставить Nginx отдавать на реверс-прокси добавленный префикс?

Ответить
Настройки темы
Возможно ли заставить Nginx отдавать на реверс-прокси добавленный префикс?

Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 5637
Благодарности: 1123


Конфигурация

Профиль | Сайт | Отправить PM | Цитировать


Привет!

Допустим, на сайте site.com есть три сервиса, которые нужно опубликовать так:
site.com/service1
site.com/service2
site.com/service3

Все сервисы крутятся в докере и опубликованы через реверс-прокси (traefik).
Вопрос - как сделать так, чтобы сервисы можно было оставлять в корневом каталоге /var/www/html, но чтобы Nginx, который используется в качестве веб-движка, отдавал на реверс-прокси не $scheme://$site$request_uri;, а добавленный префикс $scheme://$site/serviceN$request_uri;, чтобы реверс-прокси понимал, куда посылать запрос и откуда приходит ответ?

Опубликовать сервисы на поддоменах в сто раз легче, но такой возможности в данном случае нет, нужен именно добавочный URL.

-------
Скачать ffmpeg для Windows: https://www.gyan.dev/ffmpeg/builds/


Отправлено: 14:58, 20-08-2021

 

Deadooshka


Сообщения: 2294
Благодарности: 596

Профиль | Отправить PM | Цитировать


proxy_pass в location (лучше в префиксном). Там что угодно можно сделать.

Отправлено: 16:59, 20-08-2021 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 5637
Благодарности: 1123

Профиль | Сайт | Отправить PM | Цитировать


Про то, что можно "что угодно сделать" я знаю, мне бы пример.
Я пока не очень понимаю, как это работает.

Именно, что установка в корне, а надо показать, что оно опубликовано как бы в подкаталоге.

Ну вот пример конфига:

Код: Выделить весь код
server {
        server_name localhost;
        listen 443 ssl;

        root /var/www/path/to/alltube;
        index index.php;

        access_log  /var/log/nginx/alltube.access.log;
        error_log   /var/log/nginx/alltube.error.log;

        types {
                text/html   html htm shtml;
                text/css    css;
                text/xml    xml;
                application/x-web-app-manifest+json   webapp;
        }

        # Deny access to dotfiles
        location ~ /\. {
                deny all;
        }

        location / {
                try_files $uri /index.php?$args;
        }

        location ~ \.php$ {
                try_files $uri /index.php?$args;

                fastcgi_param     PATH_INFO $fastcgi_path_info;
                fastcgi_param     PATH_TRANSLATED $document_root$fastcgi_path_info;
                fastcgi_param     SCRIPT_FILENAME $document_root$fastcgi_script_name;

                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_intercept_errors off;

                fastcgi_buffer_size 16k;
                fastcgi_buffers 4 16k;

                include fastcgi_params;
        }
}
Как его переделать? Добавлять proxy_pass в каждый location?

-------
Скачать ffmpeg для Windows: https://www.gyan.dev/ffmpeg/builds/


Последний раз редактировалось DJ Mogarych, 20-08-2021 в 17:28.


Отправлено: 17:05, 20-08-2021 | #3


Deadooshka


Сообщения: 2294
Благодарности: 596

Профиль | Отправить PM | Цитировать


зависит от того, что должен получать реверс-прокси. Простейший случай это
Код: Выделить весь код
location /service {
    proxy_pass http://traefik-ip:port;
}

Отправлено: 18:31, 20-08-2021 | #4


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 5637
Благодарности: 1123

Профиль | Сайт | Отправить PM | Цитировать


Реверс-прокси должен получать полный ответ, но с прибавкой /serviceN после домена.
Иными словами, как будто все файлы сервиса лежат в подкаталоге /var/www/html/serviceN, но реально они лежат в /var/www/html.

-------
Скачать ffmpeg для Windows: https://www.gyan.dev/ffmpeg/builds/


Последний раз редактировалось DJ Mogarych, 21-08-2021 в 08:40.


Отправлено: 21:20, 20-08-2021 | #5


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 5637
Благодарности: 1123

Профиль | Сайт | Отправить PM | Цитировать


proxy_pass - это, похоже, не то, т. к. эта директива передаёт запрос, пришедший на nginx, на другой сервер. Поэтому в случае
Цитата Sham:
Код: Выделить весь код
location /service {
 proxy_pass http://traefik-ip:port;
}
»
запрос, полученный на /service, будет отправлен обратно на прокси, а не обработан.

-------
Скачать ffmpeg для Windows: https://www.gyan.dev/ffmpeg/builds/


Отправлено: 09:29, 21-08-2021 | #6


Deadooshka


Сообщения: 2294
Благодарности: 596

Профиль | Отправить PM | Цитировать


т.е nginx - это бэкенд за traefik? Тогда непонятно это:
Цитата:
отдавал на реверс-прокси не $scheme://$site$request_uri;, а добавленный префикс $scheme://$site/serviceN$request_uri;, чтобы реверс-прокси понимал, куда посылать запрос и откуда приходит ответ?
по идее бэкенд уже должен получать ожидаемые пути, обрезка должна быть перед ним. Если нужно обрезать в nginx, то
Код: Выделить весь код
rewrite "^/service\d*(/.+?)$" "$1" last;
или через регекспный location можно.

Отправлено: 19:43, 21-08-2021 | #7


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 5637
Благодарности: 1123

Профиль | Сайт | Отправить PM | Цитировать


Да, nginx - это бэкенд.
Нюанс ещё в том, что в корне тоже находится сервис, и получается так, что /serviceN отвечает на запрос, а реверс-прокси думает, что ответил /, и перебрасывает в корень.
Можно ли как-то по-другому разграничивать трафик по контейнерам, заголовки какие-нибудь?

-------
Скачать ffmpeg для Windows: https://www.gyan.dev/ffmpeg/builds/


Отправлено: 09:57, 24-08-2021 | #8



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Возможно ли заставить Nginx отдавать на реверс-прокси добавленный префикс?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Не пропускает прокси, возможно кривой wpad или прокси ip gfagnum ISA Server / Microsoft Forefront TMG 1 06-02-2014 10:17
Клавиатура - [решено] Возможно ли заставить компьютер распознавать клавиатуру как геймпад? Dimon.bma Прочее железо 3 19-06-2010 19:59
Разное - [решено] Возможно ли заставить систему работать на другом железе (чипсете) UncleStark Microsoft Windows 2000/XP 5 17-06-2010 10:21
UserGate - Возможно ли удаленное управление через прокси? Trojan16 Сетевые технологии 6 13-03-2008 11:05
Стоит ли ставить прокси на Хипи? И какую прокси... warezhka84 Сетевые технологии 2 18-11-2004 20:49




 
Переход