Попробовал этот вариант, и без error_page он не переключается на local. Но если вписать error_page внутрь if-а, то вроде как работает как нужно. Осталось убедить самого себя, что без if-а тут не обойтись. Хотя и очень хочется.
16.12.17 15:21, Aziz Rozyev пишет: > а вариант с 2 апстримами не подходит? > > upstream remote_up { > remote_upstream:443; > } > > upstream local_up { > localhost:7070; > } > > map $http_x_some_header $remote { > “” 0; > “default” 1; > } > > if ($remote) { > proxy_pass https://remote; > } > proxy_pass http://local; > > > br, > Aziz. > > > > > >> On 16 Dec 2017, at 12:50, Fedor Dikarev <f...@hamilton.rinet.ru> wrote: >> >> Привет! >> >> Я тут пытаюсь навести красоту в одном конфиге Nginx-а и что-то пока >> совсем беда :-( >> >> Формулировка, правда, изначально довольно извращенная: >> есть Nginx, по-умолчанию проксирует запрос в локально работающую node. >> Но если в запросе есть заголовок X-Some-Header, то запрос >> нужно спроксировать на другой сервер по https. >> Второе но: если этот прокси недоступен/не ответил/просто 500-тит, то >> сделать fallback опять на локальную node. >> >> первая мысль была: >> map $http_x_some_header $use_backend { >> "" http://localhost:7070; >> default https://remote_upstream; >> } >> upstream remote_upstream { >> server remote:443; >> server localhost:7070 backup; >> } >> >> но локальный сервер не https, и все не очень красиво :-( >> думал тут еще поднять на этом же nginx локальный https на порту 7073, >> проксировать в него как backup, но тут начинаются сложности с >> сертификатами. >> >> Опять же думал о другом варианте: >> proxy_pass $use_backend; >> error_page 500 502 504 = @fallback_local_node; >> >> location @fallback_local_node { >> internal; >> proxy_pass http://localhost:7070; >> } >> >> но тут получается что если заголовка не было, node ответил 502, то мы >> пойдем в node еще раз. Не то, чтобы прям ужас, но некрасиво >> получается... >> >> Может кто подскажет тут красивое решение? >> >> Ну и как feature request: может можно добавить к опции backup для >> директивы server в upstream еще какой-нибудь параметр backup_proto=http >> или другую опцию backup_http, чтобы при переключении на backup сервер >> менялся и протокол обращения. >> -- >> Fedor Dikarev >> _______________________________________________ >> nginx-ru mailing list >> nginx-ru@nginx.org >> http://mailman.nginx.org/mailman/listinfo/nginx-ru > > _______________________________________________ > nginx-ru mailing list > nginx-ru@nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-ru > -- Fedor Dikarev _______________________________________________ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru