Введение:
Пожалуйста, прочтите этот вопрос о сбое сервера наПроблема балансировки нагрузки nginx с 301 из бэкэнда. Немного похоже на мою проблему, но ответ не работает. Nginx перенаправляет на "имя" моего апстрима. Дело в том, что это не вопрос, специфичный для OpenShift.
Конфигурация:
Я правильно настроил nginx 1.4.4 (собрал из исходников, проверил, что работает правильно [1]) на одном DIY немасштабируемом оборудовании с OPENSHIFT_DIY_IP 127.8.143.129. Назовем его A. Я настроил один сервер Tornado на этом оборудовании и другой Tornado на другом немасштабируемом оборудовании. (Предположим, что оборудование = Red Hat Linux Box в той же локальной сети за NAT, упрощенно) Оба являются простыми приложениями hello-world, основанными нарепозиторий openshift-hellotornado. Назовем его B. DNS-адрес B — pam-picaxe.rhcloud.com. DNS-адрес A — main-picaxe.rhcloud.com.
Всякий раз, когда я захожу на main-picaxe.rhcloud.com, браузер перенаправляется с ошибкой 302 Найдено с
Location: https://frontends/app.
"frontends" здесь — это имя апстрима в конфигурации nginx. Странно.
[1]: Доказательство того, что nginx работает только с Gear A: Если я закомментирую строку 20 и раскомментирую строку 21 в файле конфигурации (ссылка pastebin в конце поста), все работает хорошо, и я получаю «Hello world!». Но всякий раз, когда у меня возникает ситуация, похожая на строку 20 (даже если это DNS-адрес Gear A, а не Gear B).
Попробовал решение:
Я потратил на это полдня, устал пытаться настроить это. Я попробовал решение, приведенное в вышеупомянутом посте serverfault, заменив свой блок location на:
расположение / { proxy_pass http://frontends; proxy_set_header Хост $host; proxy_redirect http://frontends http://$host:$server_port/; proxy_redirect http://frontends:8080/ http://$host:$server_port/; }
Это приводит к циклу перенаправления. Пример вывода журнала, начиная с первого запроса к /:
AAA.BBB.CCC.DDD - - [22/дек./2013:14:53:53 -0500] "GET / HTTP/1.1" 302 331 "-" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.31 (KHTML, как Gecko) Chrome/26.0.1410.63 Safari/537.31" "WWW.XXX.YYY.ZZZ" AAA.BBB.CCC.DDD - - [22/дек./2013:14:53:55 -0500] "GET /app HTTP/1.1" 302 331 "-" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.31 (KHTML, как Gecko) Chrome/26.0.1410.63 Safari/537.31" "WWW.XXX.YYY.ZZZ" AAA.BBB.CCC.DDD - - [22/дек./2013:14:53:55 -0500] "GET /app HTTP/1.1" 302 331 "-" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.31 (KHTML, как Gecko) Chrome/26.0.1410.63 Safari/537.31" "WWW.XXX.YYY.ZZZ" AAA.BBB.CCC.DDD - - [22/дек./2013:14:53:55 -0500] "GET /app HTTP/1.1" 302 331 "-" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.31 (KHTML, как Gecko) Chrome/26.0.1410.63 Safari/537.31" "WWW.XXX.YYY.ZZZ" AAA.BBB.CCC.DDD - - [22/дек./2013:14:53:56 -0500] "GET /app HTTP/1.1" 302 331 "-" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.31 (KHTML, как Gecko) Chrome/26.0.1410.63 Safari/537.31" "WWW.XXX.YYY.ZZZ"
Есть ли у меня идеи, как обеспечить нормальную работу с балансировкой нагрузки с помощью nginx?
Ссылка на nginx.conf:http://pastebin.com/91CMftSc