是否可以将 Nginx 配置为代理到 uwsgi 服务器( ),如果 uwsgi 服务器不可用则uwsgi_pass
回退到标准 http 代理( )?proxy_pass
我的开发环境在给定端口上作为标准 HTTP 服务器运行,但在生产中它将在 uWSGI 套接字下运行。我希望能够开发我的应用程序,然后(仍然在我的开发机器上)在 uwsgi 服务器下启动该应用程序进行测试,而不必每次都切换我的 nginx 配置。如果 nginx 可以配置为尝试使用 uwsgi_pass,但如果出现错误(因为 uwsgi 服务器没有运行)则回退到 proxy_pass,那将是理想的。
我还发现这在生产环境中很方便:通常,只需代理到本地 uwsgi 套接字,但如果由于某种原因(对于某些任意定义的不工作)不起作用,则代理到其他地方的某个辅助 http 服务器。但是,对我来说,现在这只是为了使开发更方便。
答案1
假设您将从 uWSGI 后端收到502
超时错误,以下操作应该可以执行您所寻找的操作。
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 响应,您可以根据需要进行编辑。