Рейтинг:0

Настройте редирект по умолчанию в Nginx

флаг cn

Мне нужен способ перенаправления клиентов, когда существующий путь не определен. Когда я ввожу конфигурацию возврата 301, nginx, кажется, игнорирует любые конфигурации местоположения. Он перенаправляет все.

Имя хоста в перенаправлении должно быть динамическим (от клиента). Эти серверы на самом деле являются контейнерами и развертываются в средах Dev/Prod. Таким образом, URL-адрес клиента меняется с чего-то вроде dev.example.com на example.com. Я бы предпочел не менять конфигурацию в зависимости от среды.

Я использую v1.18 на RHEL. Прокси-серверы — это приложения Angular, управляемые соответствующими разработчиками.

сервер {
  слушать 80;
  имя сервера _;

  индекс index.html;

  местоположение = /сервис/а {
    proxy_pass http://svc-a.local/service/a/;
  }
  местоположение /сервис/а/ {
    proxy_pass http://svc-a.local/service/a/;
  }

  местоположение = /сервис/б {
    proxy_pass http://svc-b.local/service/b/;
  }
  расположение /сервис/б/ {
    proxy_pass http://svc-b.local/service/b/;
  }

  местоположение = / сервис / х {
    proxy_pass http://svc-x.local/service/x/;
  }
  местоположение /сервис/х/ {
    proxy_pass http://svc-x.local/service/x/;
  }

  местоположение = /дом {
    proxy_pass http://home.local/home/;
  }
  местоположение /дом/ {
    proxy_pass http://home.local/home/;
  }

  # kubernetes исследует это, но не получает 301
  расположение /nginx_status {
    stub_status включен;
    acccess_log выключен;
  }

  # ЕСЛИ НЕТ СОВПАДЕНИЙ ИЗ ВЫШЕ, ТОГДА ПЕРЕХОДИТЕ В /HOME

  # попробуй #1
  вернуть 301 http://$host/home/;

  # попробуй #2
  местоположение = / {
    вернуть 301 http://$host/home/;
  }

  # попробуй #3
  возврат 301 /домой/;

  # попробуй #4
  местоположение = / {
    proxy_pass http://home.local/home/;
  }
}
Рейтинг:0
флаг nr

вернуть 301 Правило, находящееся за пределами каких-либо блоков местоположения, будет применяться ко всему блоку сервера и иметь приоритет над блоками местоположения. Вместо этого вы можете определить блок местоположения по умолчанию/резервный вариант, как в вашей попытке № 2, но без знака равенства (=). Знак равенства указывает точное совпадение, и вместо этого вам нужно совпадение префикса, чтобы оно соответствовало всем запросам.

Например:

сервер {
  слушать 80;
  имя сервера _;

  индекс index.html;

  местоположение = /сервис/а {
    proxy_pass http://svc-a.local/service/a/;
  }
  местоположение /сервис/а/ {
    proxy_pass http://svc-a.local/service/a/;
  }

  расположение /сервис/б/ {
    proxy_pass http://svc-b.local/service/b/;
  }

  местоположение = / сервис / х {
    proxy_pass http://svc-x.local/service/x/;
  }
  местоположение /сервис/х/ {
    proxy_pass http://svc-x.local/service/x/;
  }

  местоположение = /дом {
    proxy_pass http://home.local/home/;
  }
  местоположение /дом/ {
    proxy_pass http://home.local/home/;
  }

  # kubernetes исследует это, но не получает 301
  расположение /nginx_status {
    stub_status включен;
    acccess_log выключен;
  }

  # ЕСЛИ НЕТ СОВПАДЕНИЙ ИЗ ВЫШЕ, ТОГДА ПЕРЕХОДИТЕ В /HOME

  место расположения / {
     вернуть 301 http://$host/home/;
  }
}

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.