2009-06-19 6 views
22

Ich kann derzeit entweder Django über mod_wsgi oder PHP auf meinem Apache-Server ausführen.Wie kann ich Django und PHP zusammen auf einem Apache-Server ausführen?

Meine Django-Projekte laufen an: http://localhost und Quelle ist unter C:/django_proj

Meine PHP-Projekte laufen an: http://php.localhost und Quelle ist unter C:/web

Wenn ich beide einschalten, php. localhost und localhost gehen zum Django-Projekt. Ich habe sie bereits über virtuelle Apache-Hosts eingerichtet.

Hier sind einige relevante Linien in 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" 

die entsprechenden Zeilen in apache_django_wsgi.conf ist:

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

Innen 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> 

Meine PHP-Projekt ist derzeit nicht zugänglich. Hat jemand irgendwelche Ideen was mir fehlt?

Antwort

29

ich laufen Dutzende von mod_wsgi/Django Websites, PHP-Sites und einer Rails-Website mit einem einzigen Apache.

Es ist meist mit virtuellen Hosts getan, aber ich habe einige, die beide auf der gleichen Domäne ausgeführt werden.

Sie müssen nur Ihre WSGIScriptAlias /... nach einer beliebigen anderen Ort/Alias-Richtlinien setzen.

Lassen Sie uns sagen, zum Beispiel, ich will phpMyAdmin auf der gleichen Domäne als Django-Website betreiben. Die Config würde wie folgt aussehen:

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> 

bearbeiten:

Ihre Konfiguration wie folgt aussehen sollte:

<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> 

Sie nicht diese <Directory> Richtlinien in http.conf müssen .. Führen Sie alle Ihre Konfiguration in den virtuellen Hosts durch.

Auch vollständig loszuwerden <Directory /> Block.

+0

Das ist gut zu wissen, aber ich möchte, dass meine Django-Projekt-zu-Punkt y Hauptdomäne, während mein PHP-Projekt auf eine Sub-Domain, zum Beispiel: http: // localhost -> My Django Proj http: //php.localhost -> Mein PHP Proj Wissen Sie, wie ich das oben genannte erreichen kann, habe ich bereits die oben genannten virtuellen Hosts. –

+1

Sie müssen Ihre und Direktiven in die entsprechenden Blöcke setzen. Mit anderen Worten, setzen Sie WSGIScriptAlias ​​in den Block, in dem ServerName localhost ist. Ich werde es klarer machen, indem ich meine Antwort bearbeite. –

+0

Danke für Ihre Hilfe, es funktioniert. Ich habe das "Alias ​​/ C:/web" entfernt und es funktioniert jetzt gut. Ich habe auch die Verzeichnisblöcke aus httpd.conf herausgenommen. –

7

Ihre WSGIScriptAlias/... Direktive wird Apache sagen, dass Anforderung alles mit „/“ beginnen sollte gefüttert durch WSGI Handler Django erhalten. Wenn Sie das geändert haben, um stattdessen WSGIScriptAlias /django-proj/ ... zu lesen, werden nur Anfragen, die mit "/ django-proj" beginnen, in Django übergeben.

Eine Alternative wäre, mit der Einrichtung virtueller Hosts für jedes Projekt zu beginnen. Auf diese Weise können Sie Apache so konfigurieren, dass jedes Projekt in der eigenen Domäne abgelegt wird, und Sie müssen sich keine Gedanken über die Konfiguration eines Projekts machen, das sich auf eines Ihrer anderen Projekte auswirkt.

0

Ich hatte das gleiche Problem. Versuchen Sie, diesen Block <Directory /> in httpd-conf zu entfernen.

Include httpd-vhost.und conf und versuchen, mein WSGIScriptAlias/"/somewhere/file.wsgi" in virtuellen Host-Abschnitt von httpd-vhosts Puting, die auf Port 80.

0

Ich möchte hinzufügen, dass, wenn Sie Apache Proxypass verwenden, dann ist es möglich, bestimmte URL-Muster zu leugnen, so dass es fällt auf mod_php.

ProxyPass /wordpress ! 
<Location /wordpress> 
    Require all granted 
</Location>