2009-06-19 7 views
22

Attualmente posso eseguire Django tramite mod_wsgi o PHP sul mio server Apache.Come si eseguono Django e PHP insieme su un server Apache?

mio Django progetti gestiti a: http://localhost e la sorgente è in C:/django_proj

miei progetti PHP funzionano a: http://php.localhost e la fonte è in C:/web

Se mi rivolgo sia, php. localhost e localhost vanno al progetto Django. Li ho già configurati tramite gli host virtuali di Apache.

Ecco alcune linee rilevanti 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" 

rispettive linee apache_django_wsgi.conf è:

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

All'interno 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> 

mio Il progetto PHP è attualmente inaccessibile. Qualcuno ha qualche idea di ciò che mi manca?

risposta

29

Eseguo dozzine di siti mod_wsgi/Django, siti PHP e un sito Rails con un singolo Apache.

Si utilizza principalmente host virtuali, ma alcuni di essi sono in esecuzione entrambi nello stesso dominio.

Devi solo inserire il tuo WSGIScriptAlias /... dopo ogni altra direttiva Posizione/Alias.

consente di dire, per esempio, voglio fare funzionare phpMyAdmin sullo stesso dominio come un sito Django. La configurazione dovrebbe essere simile a questa:

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> 

Edit:

La configurazione dovrebbe essere simile a questo:

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

non hai bisogno di quei <Directory> direttive in http.conf .. fai tutta la tua configurazione negli host virtuali.

Inoltre, eliminare completamente il blocco <Directory />.

+0

Questo è bene sapere, ma voglio sottolineare il mio progetto Django a, y dominio principale, mentre il mio progetto PHP per un sotto-dominio, per esempio: http: // localhost -> Il mio Django Proj http: //php.localhost -> My PHP Proj Sapete come posso ottenere quanto sopra, ho già i precedenti in esecuzione come host virtuali. –

+1

È necessario inserire le direttive e all'interno dei blocchi appropriati. In altre parole, inserire WSGIScriptAlias ​​nel blocco in cui ServerName è localhost. Lo renderò più chiaro modificando la mia risposta. –

+0

Grazie per il tuo aiuto, sta funzionando. Ho rimosso "Alias ​​/ C:/web" e ora funziona bene. Ho estratto anche i blocchi della directory da httpd.conf. –

7

La vostra direttiva WSGIScriptAlias/... sta dicendo ad Apache che ogni richiesta che inizia con "/" dovrebbe essere alimentata tramite il gestore WSGI di Django. Se invece lo hai modificato per leggere WSGIScriptAlias /django-proj/ ..., solo le richieste che iniziano con "/ django-proj" verrebbero passate a Django.

Un'alternativa sarebbe iniziare a configurare gli host virtuali per ciascun progetto. In questo modo è possibile configurare Apache per inserire ciascun progetto nel proprio dominio e non ci si dovrebbe preoccupare della configurazione di un progetto che interessa uno dei tuoi altri progetti.

0

Ho avuto lo stesso problema. Provare a rimuovere questo blocco <Directory /> in httpd-conf.

Include httpd-vhost.conf e e provare mettendo il mio WSGIScriptAlias/"/somewhere/file.wsgi" nella sezione host virtuale di httpd-vhosts che ascolta la porta 80.

0

Vorrei aggiungere che se si utilizza Apache ProxyPass, è possibile negare certi schemi URL in modo che cade su mod_php.

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