我有一个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 。 upstream application_server块(外部server ),它包含了对unix socket的引用, fail_timout=0; 。 应该有效,不是吗? 如果您需要,请询问更多信息。
您发布的错误是由Django返回的,因为它无法确定URL的主机名部分。
当您从Web服务器进行代理时,必须明确地通过此标头。
你缺less的关键线是:
location @application_server { proxy_set_header Host $http_host; ...
另请参阅gunicorn文档中的示例nginxconfiguration 。