是否可以将 Nginx 配置为代理到 uwsgi 服务器 ( ),如果 uwsgi 服务器不可用,则uwsgi_pass
回退到标准 http 代理 ( )?proxy_pass
我的开发环境在给定端口上作为标准 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>
}
Run Code Online (Sandbox Code Playgroud)
显然用你自己的价值观来代替,但这些是重要的部分。如果您发现收到不同的 http 响应,您可以根据需要进行编辑。