如何在一台Apache服务器上同时运行Django和PHP?

2022-08-30 16:36:55

我目前可以通过mod_wsgi运行Django或PhP在我的Apache服务器上。

我的 Django 项目运行于:http://localhost 源代码位于 C:/django_proj

我的PHP项目运行在:http://php.localhost 源代码在C:/web

如果我同时打开这两个,php.localhost和localhost就会转到Django项目。我已经通过Apache虚拟主机设置了它们。

以下是 httpd.conf 中的一些相关行:

DocumentRoot "C:/web"

<Directory />
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
</Directory>

<Directory "C:/web">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

<Directory "C:/django_proj">
    Order allow,deny
    Allow from all
</Directory>

Include "C:/django_proj/apache/apache_django_wsgi.conf"

中的相关行是:apache_django_wsgi.conf

WSGIScriptAlias / "C:/django_proj/apache/proj.wsgi"
<Directory "C:/django_proj/apache">
    Order allow,deny
    Allow from all
</Directory>

Inside httpd-vhosts.conf:

<Directory C:/web>
    Order Deny,Allow
    Allow from all
</Directory>

<Directory C:/django_proj>
    Order Deny,Allow
    Allow from all
</Directory>

<VirtualHost *:80>
    DocumentRoot "C:/django_proj"
    ServerName localhost
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "C:/web"
    ServerName php.localhost
</VirtualHost>

我的 PHP 项目当前无法访问。有没有人知道我错过了什么?


答案 1

我运行了几十个mod_wsgi/ Django站点,PHP站点和一个带有单个Apache的Rails站点。

它主要使用虚拟主机完成,但我有一些主机在同一域上运行。

您只需要将任何其他位置/别名指令放在后面即可。WSGIScriptAlias /...

例如,我想在与Django站点相同的域上运行phpMyAdmin。配置将如下所示:

Alias /phpmyadmin /full/path/to/phpmyadmin/
<Directory /full/path/to/phpmyadmin>
   Options -Indexes
   ...etc...
</Directory>

WSGIScriptAlias / /full/path/to/django/project/app.wsgi
<Directory /full/path/to/django/project>
    Options +ExecCGI
    ...etc...
</Directory>

编辑

您的配置应如下所示:

<VirtualHost *:80>
    DocumentRoot "C:/django_proj"
    ServerName localhost
    WSGIScriptAlias / "C:/django_proj/apache/proj.wsgi"
    <Directory "C:/django_proj/apache">
        Options +ExecCGI
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "C:/web"
    ServerName php.localhost
    Alias / C:/web
    <Directory C:/web>
        Options Indexes FollowSymLinks
        AllowOverride None
        Order Deny,Allow
        Allow from all
    </Directory>
</VirtualHost>

您不需要这些指令...在虚拟主机中执行所有配置。<Directory>http.conf

另外,完全摆脱块。<Directory />


答案 2

你的指令告诉Apache,所有以“/”开头的请求都应该通过Django的WSGI处理程序进行输入。如果您将其更改为读取,则只有以“/django-proj”开头的请求才会传递到Django中。WSGIScriptAlias / ...WSGIScriptAlias /django-proj/ ...

另一种方法是开始为每个项目设置虚拟主机。通过这种方式,您可以将Apache配置为将每个项目放在其自己的域中,并且您不必担心一个项目的配置会影响其他项目之一。


推荐