dmtrbskkv
@dmtrbskkv
Кодим и декодим, а иногда кино смотрим

Как проксировать запросы только если хост доступен?

Внутри сети есть сайт на 3000 порте. Иногда он перезагружается и недоступен. Хотелось бы проверить как-то внутри nginx на доступность хост и если он недоступен, то не проксировать на него запрос, а использовать root директорию и выдавать данные из нее

По итогу нужно что-то типа:
if 127.0.0.1:3000
    # проксируем
else
    # используем рут /var/www/html
  • Вопрос задан
  • 375 просмотров
Пригласить эксперта
Ответы на вопрос 3
chupasaurus
@chupasaurus
Сею рефлекторное, злое, временное
Именнованный location в помощь
location / {
  root /var/www/html;
  try_files @upstream $uri =404;
}
location @upstream {
  proxy_pass http://127.0.0.1:3000;
  proxy_intercept_errors on;
  recursive_error_pages on;
  error_page 404 = @local;
}
location @local {
  try_files $uri =404
}
Ответ написан
См. health_check в NGINX
Это относится к выбору серверов. Поэтому надо будет локальную папку поднять как ещё один "сервер" на левом порте, скажем, 3000.
Ответ написан
Lynn
@Lynn
nginx, js, css
Простой вариант в лоб — обрабатывать ошибку 502.

server {
    listen 127.0.0.1:4000;
    root /var/www/html;

    location / {
      proxy_pass http://127.0.0.1:3000;
      error_page 502 = @local;
    }

    location @local {
    }
}


Вариант с upstream (видимо Сергей Соколов имел в виду его):
upstream backend {
    server 127.0.0.1:3000;        # основной сервер
    server 127.0.0.1:4001 backup; # сервер на случай неработающего основного
}

# запасной сервер, просто отдаёт статику
server {
    listen 127.0.0.1:4001;
    root /var/www/html;
}

# Это наш сервер
server {
    listen 127.0.0.1:4000;
    location / {
      proxy_pass http://backend;
    }
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы