2009-06-19 58 views
22

Actualmente puedo ejecutar Django a través de mod_wsgi o PHP en mi servidor Apache.¿Cómo ejecuto Django y PHP juntos en un servidor Apache?

Mi Django proyectos dirigidos a: http://localhost y la fuente es en C: django_proj

Mis proyectos/PHP se ejecutan en: http://php.localhost y la fuente es en C:/web

Si giro tanto en php. localhost y localhost van al proyecto Django. Ya los configuré a través de servidores virtuales Apache.

Estas son algunas líneas relevantes en 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" 

Las líneas correspondientes apache_django_wsgi.conf es:

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

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

Mi El proyecto PHP es inaccesible actualmente. ¿Alguien tiene alguna idea de lo que me estoy perdiendo?

Respuesta

29

Ejecuto docenas de sitios mod_wsgi/Django, sitios PHP y un sitio de Rails con un solo Apache.

Se hace principalmente usando hosts virtuales pero tengo algunos que se ejecutan en el mismo dominio.

Solo tiene que poner su WSGIScriptAlias /... después de cualquier otra directiva de Ubicación/Alias.

Digamos, por ejemplo, quiero ejecutar phpMyAdmin en el mismo dominio que un sitio de Django. La configuración sería algo como esto:

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> 

Editar:

Su configuración debería ser algo como esto:

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

usted no necesita esas directivas <Directory> en http.conf .. .haga toda su configuración en los hosts virtuales.

Además, elimine por completo el bloque <Directory />.

+0

Eso es bueno saber, pero quiero señalar mi proyecto Django, el dominio principal y mientras mi proyecto PHP para un sub-dominio, por ejemplo: http: // localhost -> Mi Django Proj http: //php.localhost -> My PHP Proj ¿Sabes cómo puedo lograr lo anterior, ya tengo el anterior ejecución como hosts virtuales. –

+1

Debe colocar sus directivas y dentro de los bloques apropiados . En otras palabras, ponga WSGIScriptAlias ​​dentro del bloque donde ServerName es localhost. Lo haré más claro editando mi respuesta. –

+0

Gracias por su ayuda, está funcionando. Eliminé el "Alias ​​/ C:/web" y funciona bien ahora. También saqué los bloques de Directorio de httpd.conf. –

7

Su directiva WSGIScriptAlias/... le dice a Apache que todo lo que se solicite comenzando con "/" debería alimentarse a través del controlador WSGI de Django. Si cambia eso para leer WSGIScriptAlias /django-proj/ ..., solo las solicitudes que comiencen con "/ django-proj" pasarán a Django.

Una alternativa sería comenzar a configurar hosts virtuales para cada proyecto. De esta forma, podría configurar Apache para que coloque cada proyecto en el/de su propio dominio, y no tendría que preocuparse por la configuración de un proyecto que afecta uno de sus otros proyectos.

0

Tuve el mismo problema. Intente eliminar este bloque <Directory /> en httpd-conf.

Incluya httpd-vhost.conf y e intentar que pone mi WSGIScriptAlias/"/somewhere/file.wsgi" en sección de máquinas virtuales de httpd-host virtuales, que escucha en el puerto 80.

0

me gustaría añadir que si está utilizando Apache ProxyPass, es posible negar ciertos patrones de URL para que se cae a mod_php.

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