摆脱nginxconfiguration中的if指令

我有一个Django的应用程序,它有nginx作为一个反向代理与gunicorn作为一个应用程序的Web服务器(上游)。

在我的nginx虚拟主机文件的location /块中,我指的是Web应用程序服务器中的unix套接字,如下所示:

 if (!-f $request_filename) { proxy_pass http://application_server; break; } 

想法是不需要得到gunicorn服务静态资产,nginx应该照顾他们。

我有两个相关的问题:1)性能明智,有这样的types检查nginx可能是昂贵的。 你有没有看到你的经验? 我的networking应用程序是一个高stream量的社交论坛和大量的静态资产需要服务。 想法,做和不(如果有的话)? 需要更多信息?

2)很好的certificate, 如果在nginx的情况下是邪恶的。 如何用try_files更改if指令? 我自己开了一枪。 它看起来很直接。 但是每次都会坠毁和烧毁。 这是我的尝试:

  • try_files $uri @application_server;replace整个if指令try_files $uri @application_server;
  • location /下包含location @application_server块; 这包含proxy_pass http://application server
  • 在configuration文件的顶部有一个upstream application_server块(外部server ),它包含了对unix socket的引用, fail_timout=0;

应该有效,不是吗? 如果您需要,请询问更多信息。

您发布的错误是由Django返回的,因为它无法确定URL的主机名部分。

当您从Web服务器进行代理时,必须明确地通过此标头。

你缺less的关键线是:

 location @application_server { proxy_set_header Host $http_host; ... 

另请参阅gunicorn文档中的示例nginxconfiguration 。