Django、Apache 和 Nginx 的配置

Posted

技术标签:

【中文标题】Django、Apache 和 Nginx 的配置【英文标题】:Configuration for Django, Apache and Nginx 【发布时间】:2011-06-20 18:54:34 【问题描述】:

我已经在 Apache+mod_wsgi 上设置了我的 Django 应用程序。为了提供我正在使用 nginx 的静态文件,正如 Django 项目网站上所建议的那样。 http://docs.djangoproject.com/en/dev/howto/deployment/modwsgi/

Apache运行在8081端口,nginx运行在80端口。现在有人建议我配置错误,我应该把Apache和Nginx的角色互换。我不确定为什么会这样。如果我的配置确实是错误的,为什么 django 网站会建议错误的方法?

【问题讨论】:

在端口 80 上坚持使用 Nginx 是安全的。愿意分享您在哪里发现有人说 apache 是更好的反向代理?基准是关键。 在设置应用程序时,我在 so ***.com/questions/4868213/… 和 sf serverfault.com/questions/229842/apache-reverseproxy-to-nginx 上发布了问题。我在两个页面上都得到了类似的响应。 【参考方案1】:

您链接到的 django 文档不建议您使用 apache 作为反向代理。他们只是建议您使用单独的网络服务器,所以我会说文档对此主题并不清楚 - 他们没有提出任何错误的建议。

我最初的回答是假设您将 nginx 作为反向代理,因为端口 80 是 HTTP 端口,当浏览器尝试访问未指定端口的 url 时使用的端口。

通过快速谷歌搜索有许多设置 nginx + apache 的完整指南,但这里是设置 nginx 的要点:

location / 
        # proxy / requests to apache running django on port 8081
        proxy_pass         http://127.0.0.1:8081/;
        proxy_redirect     off;
     

location /media/  
        # serve static media directly from nginx
        root   /srv/anuva_project/www/;
        expires 30d;
        break;
    

您需要做的就是从您的 apache 配置中删除代理行,并将代理语句添加到您的 nginx.conf 中。

如果您真的想从端口 8081 为您的站点提供服务,您可以让 nginx 在端口 8081 上侦听,而让 apache 在不同的端口上侦听。

关键是,apache 位于某个不起眼的端口,只服务从 nginx 发送给它的请求,而静态文件服务由 nginx 处理。

【讨论】:

坦率地说,我在这里很困惑。或者,也许我把整个服务器概念弄错了。由于 Django 在 Apache 上运行,为了提供静态媒体,我必须通过 Apache 反向代理才能到达 nginx。所以我确实在 apache 配置文件中使用了反向代理。例如我的主要应用程序是:enpass.djangoserver:8081/accounts。在 django 模板中,我从 nginx 检索静态文件。所以我猜apache在前面(而不是nginx,正如你在你的回答中所说的那样)。或者我的概念颠倒了。 端口 80 是 HTTP 端口,因此访问 example.com 将是正在侦听端口 80 的任何服务器。在您的情况下,它是 nginx。然后,Nginx 会将不对您的媒体文件夹的请求代理到 8081 上的 apache “Nginx 然后会将请求代理到您的媒体文件夹到 8081 上的 apache”——您能详细说明一下吗?就 apache/nginx 而言,我是个菜鸟。当然,我还没有为任何类型的代理配置 Nginx。 让我更新帖子 :) 没错,我认为端口 80 是您的反向代理,否则您的用户将不得不输入端口号才能访问您的网站。 哦,现在我明白了。我正在从 apache 转向 nginx,而它应该是其他方式。谢谢。

以上是关于Django、Apache 和 Nginx 的配置的主要内容,如果未能解决你的问题,请参考以下文章

django专题—整合apache整合nginx

nginx+uwsgi+django的搭建笔记

在 nginx 后面的 Apache 上运行 Django - 我可以进行哪些 Apache 优化

python+django+gunicorn+nginx的配置

python+django+gunicorn+nginx的配置

Django、Apache2 和 Nginx:加载时间长