- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу

Тренды маркетинга в 2024 году: мобильные продажи, углубленная аналитика и ИИ
Экспертная оценка Адмитад
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Здравствуйте, есть абзуоустойчивкик на котором стоит nginx, в конфигах nginx все по простому
Есть 100~ клиентов которые проксирует через сервер на свои сайты трафик, все как бы отлично но есть проблема с "upstream", например я добавил еще один сайт в конфиг и пытаюсь перезапустить nginx, в ответ получаю:
Testing nginx configuration: nginx: [emerg] host not found in upstream
То есть один из сайтов клиента временно недоступен, убрать временно нерабочий конфиг я не могу, добавить новый сайт так же не могу так как для этого нужно убрать нерабочий конфиг, как заставить nginx не проверять сайты на доступность при proxy_pass ?
что значит - убрать временно нерабочий конфиг я не могу ?
достаточно #proxy_pass http://www.сайт:80; #и все остальное что не нужно
он же все равно не пашет - делай что хочешь
Ну сейчас он не пашет, через минут 10 сайт клиента будет работать, но мой сервер будет отдавать вместо сайта клиента, заглушку сервера так как конфиг для этого сайта я удалил, что бы сайт клиента отображался, мне нужно добавить обратно конфиг который я удалил и сделать рестарт nginx, но во время рестарта неработает теперь другой сайт, и так по кругу, поэтому такой вариант не подходит.
Мне нужен вариант где можно сделать рестарт nginx независимо от того работает сайт клиента или нет.
---------- Добавлено 14.02.2013 в 16:03 ----------
Нашел дерективу "proxy_next_upstream" но внятной инструкции как ею пользоваться как всегда нету.
что бы сайт клиента отображался, мне нужно добавить обратно конфиг который я удалил и сделать рестарт nginx, но во время рестарта неработает теперь другой сайт, и так по кругу, поэтому такой вариант не подходит.
Мне нужен вариант где можно сделать рестарт nginx независимо от того работает сайт клиента или нет.
непонятно почему у вас при добавлении в конфиг одного сайта перестает работать другой, с кавычками ничего не напутали?
Сысоев говорит, что можно юзать IP вместо имени.
PS. С проблемой не знаком, но, видимо, если использование IP вместо имени помогает, то проблема в резолве? Может тогда обеспечить резолв каким-то способом (/etc/hosts например)?
Ладно, тогда по другому объясню.
Я арендую сервер в vps-hosting.lv , назовем его server_01
Есть 100 клиентов, каждый проксирует свои сайты через server_01 но при этом их сайты находятся на своих серверах, то есть скажем sait_01 находиться на server_02 а sait_02 находиться на server_03 и т.д
Когда я добавляю в конфиг server_01 новый сайт клиента то это выглядит примерно так:
server {#sait_105
location / {
proxy_pass http://www.sait_105:80;
proxy_set_header Host www.sait_105.ru;
include /etc/nginx/location.conf;}}
Сам же sait_105 находиться не на server_01 а на server_90 а через server_01 он только проксируеться. Когда я добавил новый конфиг то я перезапускаю nginx что бы вместо заглушки для sait_105 отображались данный который находятся на server_90. Но когда я перезаускаю nginx то скажем сервер одного из клиента под названием server_85 не работает (перезапускаеться, под досс атакой и т.д и т.д). Значит что бы перезапустить nginx нужно удалить конфиг клиента server_85, но когда пользователи будут заходить на sait_85 то они будут видеть вместо данных с server_85 заглушку server_01 так как конфига для sait_85 не будет.
Теперь задание, нужно сделать так что если server_85 который есть в конфиге недоступен (ВРЕМЕННО), я все равно смог перезапустить nginx без удаления или комментирования конфига для server_85. Так как server_85 недоступен лиш временно и ждать когда он заработает у меня нету времени, к тому же обычно выходит еще так что когда заработает server_85 то у другого клиента обычно не работает server_74 и т.д, а выжидать когда все 100 серверов клиента будут работать тоже очень нужно и долго.
По IP так же не вариант из за того что обычно выделенные сервера, и IP адреса соответственно недоступны вместе с сервером и сайтами.
---------- Добавлено 14.02.2013 в 19:45 ----------
------------------------
В общем суть не в этом, не важно для чего и т.д, важен вопрос как можно перезапустить nginx если в нем есть конфиг:
Но sait_105 не работает, к при этом sait_105 должен остаться в конфиге (удаление или комментирование с конфига не подходит)
Что-то я ничего не понимаю.
У вас есть конфиг для проксирования, который ведет на разные бекенды
Если один из них будет недоступен - выдаст страницу-заглушку
Как только он станет доступен - страница-заглушка пропадет и человек откроет сайт с бекенда
Если же загвоздка в ресловинге DNS, которые могут отвалиться когда сайт недоступен вместе с DNS, то поможет локальный кеширующий DNS сервер
Andreyka,
Проблема в том что если один из бекендов недоступен, то я не могу перезапустить nginx так как вылетает ошибка:
Testing nginx configuration: nginx: [emerg] host not found in upstream
И весь сервер лежит, мне нужен вариант как перезапустить nginx если в данный момент один или несколько бекендов недоступны.
Я же вам давал ссылку на другом форуме. Что не выходит?
http://serverfault.com/questions/341810/nginx-failing-to-resolve-upstream-names-on-reload-even-if-they-do-resolve-by-the
http://www.ruby-forum.com/topic/176580
Выходит все тот же:
Testing nginx configuration: nginx: [emerg] host not found in upstream
И лежащий сервер если если один из серверов недоступен.
---------- Добавлено 14.02.2013 в 21:58 ----------
Ладно еще проще, вот конфиг,
server {
location / {
proxy_pass http://4pda.ruh:80;
proxy_set_header Host 4pda.ru;}}
Как мне перезапустить nginx с данным конфигом ? сайт именно 4pda.ruh
---------- Добавлено 14.02.2013 в 22:01 ----------
Конфиг в виде этого
upstream backend {
server 4pda.ruh:80;
server 4pda.ru:80 backup;
}
server {
location / {
proxy_pass http://backend;
proxy_set_header Host 4pda.ru;}}
так же отдает ошибку
Testing nginx configuration: nginx: [emerg] host not found in upstream
---------- Добавлено 14.02.2013 в 22:04 ----------
Можно по IP типа такого
server {
location / {
proxy_pass http://159.999.19.190;
proxy_set_header Host 4pda.ru;}}
Но если IP недоступен а он недоступен когда сервер лежит то опять вылетает
Testing nginx configuration: nginx: [emerg] host not found in upstream
---------- Добавлено 14.02.2013 в 22:07 ----------
-------
Если
server {
location / {
proxy_pass http://4pda.ruh:80$request_uri;
proxy_set_header Host 4pda.ru;}}
или
server {
location / {
proxy_pass http://4pda.ru:80$request_uri;
proxy_set_header Host 4pda.ru;}}
То вовсе 502 отдается.
Не ужели в nginx не додумались сделать функцию что бы отключить проверку сайта на доступность при прокси пасс ?
Насколько я понял - host not found это ресолвинг
Рецепт я дал выше