【问题标题】:Django/mod_wsgi and PHP as Virtual Hosts on same Apache Server using MAMPDjango/mod_wsgi 和 PHP 作为使用 MAMP 的同一 Apache 服务器上的虚拟主机
【发布时间】:2011-06-25 23:52:21
【问题描述】:

更新:我的原始问题如下,但我随问题发布的代码已被编辑为最终的工作解决方案。

我试图在我的 MAMP 开发服务器上运行多个站点。有些网站是 wordpress 网站,位于 MAMP 的 htdocs 中,有些网站是 django 应用程序,位于名为 djangoprojects 的文件夹中。

我一直在尝试实施这些堆栈问题的解决方案:

multiple django sites with apache & mod_wsgi

How do I run Django and PHP together on one Apache server?

但我没有成功。我能够使用您在第一个 VirtualHost 括号中看到的代码(从守护进程行开始)在 apache 上运行 django 站点,但随后无法访问任何 php 站点。

非常感谢您的帮助。我是新手,无法解决错误。

这是我的 httpd.conf 中的代码:

更新:下面的代码有效。 Django App 和 PHP 应用程序都存在于 localhost 服务器上。与 PHP 相关的 VirtualHost 内容是从 MAMP httpd.conf 文件中进一步复制的。

<VirtualHost *:80>
    ServerName localhost:80
    UseCanonicalName Off
    DocumentRoot "/Applications/MAMP/htdocs" 
    <Directory />
        Options Indexes FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory "/Applications/MAMP/htdocs">
        Options All
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>

    WSGIDaemonProcess site1 display-name=%{GROUP}
    WSGIProcessGroup site1
    Alias /media/ /Users/sequoia/djangoprojects/dynamics/media/
    <Directory /Users/sequoia/djangoprojects/dynamics/media>
        Options ExecCGI
            Order deny,allow
        Allow from all
    </Directory>
    WSGIScriptAlias /dynamics /Users/sequoia/djangoprojects/dynamics/apache/django.wsgi
    <Directory /Users/sequoia/djangoprojects/dynamics/apache>
        Order deny,allow
        Allow from all
    </Directory>
</VirtualHost>

【问题讨论】:

  • 这里有另一个类似的问题供参考:serverfault.com/questions/226449/…
  • @mark - 感谢您的链接,我使用第一个链接来解决问题,但该问题的答案和链接的文档都假定比我拥有的知识多一点。所以我不确定我的解决方案是否符合他们的建议。
  • ServerName 字符串中仍然不应该有 ':80'。
  • 谢谢格雷厄姆。我删除了“:80”。我重新访问了这篇文章,因为我正在尝试为更大的站点实施此解决方案。这个问题帮助我解决了 django 试用站点的问题,但是现在当涉及到生产站点时,我又遇到了问题,但类型不同。我收到类似古代亚拉姆语的错误消息,但我不知道如何开始诊断问题。你介意看看吗? Link 谢谢。

标签: php django apache mod-wsgi


【解决方案1】:

首先要解决几个问题:

  1. ServerName 是指指定主机名而不是 URL 路径。
  2. 切勿将 DocumentRoot 设置为 Django 站点源代码所在的位置。

【讨论】:

  • 感谢您的指点。我将主机切换到 localhost,用 Alias 替换了无意的 Aliasmatch,并切换了虚拟主机的端口以获得 django 站点的工作虚拟主机。然后我删除了 php 站点的虚拟主机,因为 MAMP 已设置为处理这些站点。 新问题 我想我不了解 DocumentRoot,我应该将它设置为什么? - 你对如何在不调用不同端口的情况下达到这个结果有什么建议吗?也许像dev2.localhost 这样的东西?谢谢。
  • 只需将您所拥有的,从 WSGIDaemonProcess 指令开始,移动到端口 80 的现有 VirtualHost 中。这些指令将看到安装在子 URL 上的内容,并且不应干扰已经在那里运行的 PHP 应用程序。跨度>
  • 嗯。我想我遗漏了一些东西...您是在建议我应该拥有其他虚拟主机吗?那是我定义的唯一虚拟主机。如果我有另一个用于 PHP 应用程序的 VirtualHost 并且我将 WSGI 指令移到那里,这是否意味着我的 django 项目需要移动到与 php 应用程序相同的目录?我以为我读到您不应该将 django 项目目录放在 public_html 文件夹中?也许?拥有两个具有不同 DocumentRoots 的虚拟主机意味着只有定义的第一个可以工作。
  • 哈。别介意最后一个问题。我的吸收速度很慢。 “从 WSGIDaemonProcess 指令向前移动”...我删除了第二个 DocumentRoot 语句,php 应用程序和 django 站点都可以工作。谢谢你的帮助。我将编辑上面的代码以反映更正。
猜你喜欢
  • 2012-04-22
  • 1970-01-01
  • 2013-08-02
  • 2013-02-17
  • 2016-10-23
  • 2016-11-06
  • 2018-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多