nginx и upstream, как можно отключить upstream ?

12
neoks
На сайте с 17.03.2010
Offline
152
7848

Здравствуйте, есть абзуоустойчивкик на котором стоит nginx, в конфигах nginx все по простому

server {#имя сайта
location / {
proxy_pass http://www.сайт:80;
proxy_set_header Host www.сайт.ru;
include /etc/nginx/location.conf;}}

Есть 100~ клиентов которые проксирует через сервер на свои сайты трафик, все как бы отлично но есть проблема с "upstream", например я добавил еще один сайт в конфиг и пытаюсь перезапустить nginx, в ответ получаю:

Testing nginx configuration: nginx: [emerg] host not found in upstream

То есть один из сайтов клиента временно недоступен, убрать временно нерабочий конфиг я не могу, добавить новый сайт так же не могу так как для этого нужно убрать нерабочий конфиг, как заставить nginx не проверять сайты на доступность при proxy_pass ?

L
На сайте с 13.01.2011
Offline
125
#1

что значит - убрать временно нерабочий конфиг я не могу ?

достаточно #proxy_pass http://www.сайт:80; #и все остальное что не нужно

он же все равно не пашет - делай что хочешь

Контакты-icq 535609 ()
neoks
На сайте с 17.03.2010
Offline
152
#2

Ну сейчас он не пашет, через минут 10 сайт клиента будет работать, но мой сервер будет отдавать вместо сайта клиента, заглушку сервера так как конфиг для этого сайта я удалил, что бы сайт клиента отображался, мне нужно добавить обратно конфиг который я удалил и сделать рестарт nginx, но во время рестарта неработает теперь другой сайт, и так по кругу, поэтому такой вариант не подходит.

Мне нужен вариант где можно сделать рестарт nginx независимо от того работает сайт клиента или нет.

---------- Добавлено 14.02.2013 в 16:03 ----------

Нашел дерективу "proxy_next_upstream" но внятной инструкции как ею пользоваться как всегда нету.

K5
На сайте с 21.07.2010
Offline
209
#3
neoks:
что бы сайт клиента отображался, мне нужно добавить обратно конфиг который я удалил и сделать рестарт nginx, но во время рестарта неработает теперь другой сайт, и так по кругу, поэтому такой вариант не подходит.
Мне нужен вариант где можно сделать рестарт nginx независимо от того работает сайт клиента или нет.

непонятно почему у вас при добавлении в конфиг одного сайта перестает работать другой, с кавычками ничего не напутали?

аська 45два48499два записки на работе (http://memoryhigh.ru) помогу с сайтом, удалю вирусы, настрою впс -> отзывы ТУТ (/ru/forum/836248) и ТАМ (http://www.maultalk.com/topic140187.html) !!!всегда проверяйте данные людей, которые сами пишут вам в аську или скайп!!!
izbushka
На сайте с 08.06.2007
Offline
110
#4

Сысоев говорит, что можно юзать IP вместо имени.

PS. С проблемой не знаком, но, видимо, если использование IP вместо имени помогает, то проблема в резолве? Может тогда обеспечить резолв каким-то способом (/etc/hosts например)?

neoks
На сайте с 17.03.2010
Offline
152
#5

Ладно, тогда по другому объясню.

Я арендую сервер в 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 если в нем есть конфиг:

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 не работает, к при этом sait_105 должен остаться в конфиге (удаление или комментирование с конфига не подходит)

Andreyka
На сайте с 19.02.2005
Offline
822
#6

Что-то я ничего не понимаю.

У вас есть конфиг для проксирования, который ведет на разные бекенды

Если один из них будет недоступен - выдаст страницу-заглушку

Как только он станет доступен - страница-заглушка пропадет и человек откроет сайт с бекенда

Если же загвоздка в ресловинге DNS, которые могут отвалиться когда сайт недоступен вместе с DNS, то поможет локальный кеширующий DNS сервер

Не стоит плодить сущности без необходимости
neoks
На сайте с 17.03.2010
Offline
152
#7

Andreyka,

Проблема в том что если один из бекендов недоступен, то я не могу перезапустить nginx так как вылетает ошибка:

Testing nginx configuration: nginx: [emerg] host not found in upstream

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

[Удален]
#8
neoks
На сайте с 17.03.2010
Offline
152
#9

Выходит все тот же:

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 не додумались сделать функцию что бы отключить проверку сайта на доступность при прокси пасс ?

Andreyka
На сайте с 19.02.2005
Offline
822
#10

Насколько я понял - host not found это ресолвинг

Рецепт я дал выше

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий