Пробросить домашний путь на другой сервер через nginx

у меня есть фляжный сервер, который работает на порту 5000, и у меня есть домен. Я развертываю флягу с gunicorn и nginx. Что я хочу сделать, так это иметь возможность перенаправлять «www.mydomain.com» на другой сервер, скажем, «www.mydomain.webflow.io», но сохранять все запросы, поступающие по другим путям, скажем, «www.mydomain.com/ path1» или «www.mydomain.com/path2» на тот же хост nginx, но с перенаправлением на номер порта 5000.

Как я могу настроить nginx для этого. Нужно ли делать отдельную запись для каждого пути (в разделе местоположения)?

Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
0
0
69
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете сделать что-то вроде этого:

server {
    listen 80;
    server_name example.com;

    location = / {
        # this location block handles only request which ends with /

        # redrects to another domain
        return 301 https://example.otherdomain.tld;

        # proxies to another backend
        # proxy_pass http://localhost:6000/;
    }
    
    location / {
        # this location block handles everything else
        proxy_pass http://localhost:7777/;
    }
}

В приведенной выше конфигурации nginx есть два блока местоположения.

Первый блок местоположения обрабатывает каждый запрос, который заканчивается только знаком /. Например:

https://example.com/

# a / is appended automatically so this works as well
https://example.com

Второй блок локаций обрабатывает все, что не совпадает, только /.

Например:

https://example.com/api
https://example.com/static/img.png

Я включил опцию, которая перенаправляет вас на новый домен с кодом состояния HTTP 301 (постоянный)

return 301 https://example.otherdomain.tld;

# https://example.com -> https://example.otherdomain.tld;

Второй вариант передает запрос другому бэкенду.

proxy_pass http://localhost:6000/;

Вы должны использовать только один из обоих вариантов

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