使用 Nginx 和 Apache 服务于 Web 应用程序

Posted

技术标签:

【中文标题】使用 Nginx 和 Apache 服务于 Web 应用程序【英文标题】:Using Nginx and Apache to serve web application 【发布时间】:2011-08-17 14:18:13 【问题描述】:

我有许多在 Apache 上运行的 php 站点,但是我即将启动我的第一个 Django 站点。 我已经成功让 WSGI 在 Apache 上工作以处理 Python 脚本,但我有点坚持使用 nginx 来提供我的媒体文件。

我知道我需要让 Apache 在不同的端口上侦听并让 Nginx 在端口 80 上进行侦听,然后将任何非媒体请求转发到端口 8080 上的 Apache。

我真正想知道的是,是否有一种简单的方法可以将其配置为与我所有现有的站点一起使用,或者我是否需要为我当前的每个站点设置一个单独的记录,以便将请求转发到8080端口?

任何建议表示赞赏。

谢谢

【问题讨论】:

你真的需要使用Nginx吗? Apache 也可以提供媒体文件。 我不需要,但我正在尝试遵循文档中推荐的指南 您是想将 nginx 用作 apache 的反向代理还是仅用作媒体服务器? 我只想用它在我的 Django 应用程序中提供静态文件 【参考方案1】:

如果您在Django documentation about serving static files 中向下滚动一点,它们会为您提供有关如何让 Apache 为您提供文件的信息,这样您就不需要 nginx(假设您的媒体文件位于/usr/local/wsgi/static/media/):

Alias /robots.txt /usr/local/wsgi/static/robots.txt
Alias /favicon.ico /usr/local/wsgi/static/favicon.ico

AliasMatch ^/([^/]*\.css) /usr/local/wsgi/static/styles/$1

Alias /media/ /usr/local/wsgi/static/media/

<Directory /usr/local/wsgi/static>
    Order deny,allow
    Allow from all
</Directory>

WSGIScriptAlias / /usr/local/wsgi/scripts/django.wsgi

<Directory /usr/local/wsgi/scripts>
    Order allow,deny
    Allow from all
</Directory>

但是,如果您对使用 nginx 不放心,您可以在 server 指令中添加静态指令:

location /media/ 
    access_log off; # who cares about static files?
    alias /usr/local/wsgi/static/media/;
    expires 30d; # enables caching.

【讨论】:

以上是关于使用 Nginx 和 Apache 服务于 Web 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

WEB服务器如何选择 Apache or Nginx?

nginx web服务器的安装使用

nginx成为4月市占率最高的Web服务器

如何配置高性能的web服务器apache,nginx

Nginx网站服务配置

web服务的简单介绍及apache服务的安装