Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Django文档建议为静态文件使用单独的服务器?_Django_Apache_Http_Mod Wsgi - Fatal编程技术网

为什么Django文档建议为静态文件使用单独的服务器?

为什么Django文档建议为静态文件使用单独的服务器?,django,apache,http,mod-wsgi,Django,Apache,Http,Mod Wsgi,从: 我们建议使用一个单独的Web服务器(即不运行Django的服务器)来服务媒体 为什么?这是web框架中的常见策略。这里的想法是简单地使用最好的工具来服务静态内容。Apache、Nginx、lighttpd和其他现代web服务器都非常擅长提供静态内容,因此,如果您可以轻松配置这些服务器来完成这项工作,那么您有几个好处: 这些请求非常迅速 您并没有占用重量级python进程来执行普通任务,所以它们可以自由处理应用程序请求 接下来,通过使用这个单独的处理静态内容的过程,您可以更灵活地使用CDN或

从:

我们建议使用一个单独的Web服务器(即不运行Django的服务器)来服务媒体


为什么?

这是web框架中的常见策略。这里的想法是简单地使用最好的工具来服务静态内容。Apache、Nginx、lighttpd和其他现代web服务器都非常擅长提供静态内容,因此,如果您可以轻松配置这些服务器来完成这项工作,那么您有几个好处:

  • 这些请求非常迅速
  • 您并没有占用重量级python进程来执行普通任务,所以它们可以自由处理应用程序请求
  • 接下来,通过使用这个单独的处理静态内容的过程,您可以更灵活地使用CDN或将资产分发到其他服务器

  • 通过将媒体移动到特定目录,您可以更轻松地为此任务配置Web服务器。

    一般来说,最好将静态内容(例如图像、CSS和JS文件)放在不同的服务器上,并且放在不同的域/子域上。这使得为静态文件提供服务的软件能够得到高度优化和惊人的快速(例如,)


    另一个主要好处来自网络流量的减少。如果您提供与动态Django应用程序来自同一域的静态内容,那么客户端浏览器会将域的cookie作为HTTP请求的一部分发送,即使是静态文件。这是不必要的开销-静态文件将始终是静态的-但这是必需的,因为客户端无法区分静态和动态内容。另一方面,如果静态内容是从不同的域提供的,则可以将其配置为“”,从而最大限度地减少请求开销。

    现代web浏览器在从单个主机下载资产时通常会打开两个(多个?)套接字。所以你得到了
    index.html
    ,它引用了一堆图像、js文件、css等。每个额外的文件都由一个单独的块套接字下载

    如果您从一个单独的主机中提取静态文件,您将获得额外的两个套接字来下载文件,因此在生产环境中,这会更快


    这种并行化还允许您运行不同的服务器引擎(好的,它们可能在同一个盒子上,但您仍然只能得到两个套接字),专门处理它们所服务的内容,例如原始内容的
    nginx
    ,动态内容的
    django
    fastcgi

    这对安全性也有好处。一个非常简单的方法是让用户上传的文件远离核心服务器文件。单独的文件夹权限等。但是,是的,速度很快。

    从技术和理论角度来看,这里的答案肯定是正确的。但实际上,对于绝大多数Django部署,我甚至不会考虑为媒体和Django应用程序使用单独的服务器(即虚拟机或物理机)。这只是没有必要。它是“万恶之源”

    相反,我将使用一个通用的httpd服务器(Apache、nginx等)进行部署,让它通过WSGI/FastCGI运行应用程序,并让它同时提供静态和媒体文件。这就行了。您可以避免很多麻烦,特别是如果您考虑为用户媒体使用单独的服务器

    如果你的网站足够成功,出现性能问题,你会很乐意修复它。你的第一步甚至可能是租一台更快的服务器

    这至少在您唯一关心的是性能的情况下适用。出于安全原因,您可能不得不使用单独的服务器,甚至可能是因为您的客户需要它