Назад | Перейти на главную страницу

Nginx: использовать uwsgi_pass с резервным вариантом proxy_pass?

Можно ли настроить Nginx на прокси-сервер uwsgi (uwsgi_pass), возвращаясь к стандартному http-прокси (proxy_pass) если сервер uwsgi недоступен?

Моя среда разработки работает как стандартный HTTP-сервер на заданном порту, но на производстве он будет работать под сокетом uWSGI. Я хотел бы иметь возможность разработать свое приложение, а затем (все еще на моей машине разработки) запустить приложение на сервере uwsgi для тестирования без необходимости каждый раз переключать мою конфигурацию nginx. Если бы nginx можно было настроить на пытаться с uwsgi_pass, но если он получил ошибку (потому что сервер uwsgi не запущен), вернитесь к proxy_pass, это было бы идеально.

Я также мог видеть, что это удобно в производственной среде: обычно это просто прокси для локального сокета uwsgi, но если по какой-то причине это не работает (для некоторого произвольного определения неработающего), прокси на какой-то вторичный http-сервер в другом месте. Однако для меня пока это просто сделать разработку более удобной.

Предполагая, что вы получите 502 ошибка тайм-аута из бэкэнда uWSGI, следующее должно делать то, что вы ищете.

uwsgi_intercept_errors on;
error_page 502 = @fallback;

location / {
    uwsgi_pass uwsgi://192.168.0.1:9000;
    <rest of your config>
    }

location @fallback {
    proxy_pass http://192.168.0.2;
    <rest of your config>
    }

Очевидно, подставьте свои собственные ценности, но это важные части. Если вы обнаружите, что получаете другой HTTP-ответ, вы можете редактировать его по мере необходимости.