with mod_wsgi how framework and php django apache-config

php - mod_wsgi - wsgi django



¿Cómo ejecuto Django y PHP juntos en un servidor Apache? (4)

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

Se realiza principalmente con hosts virtuales, pero tengo algunos que se ejecutan en el mismo dominio.

Solo debe colocar su WSGIScriptAlias /... después de cualquier otra directiva de ubicación / alias.

Digamos, por ejemplo, que quiero ejecutar phpMyAdmin en el mismo dominio que un sitio Django. La configuración se verí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 debe verse 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>

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

Además, deshacerse completamente del bloque <Directory /> .

Actualmente puedo ejecutar Django a través de mod_wsgi o PHP en mi servidor Apache.

Mis proyectos Django se ejecutan en: http: // localhost y la fuente está en C: / django_proj

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

Si enciendo ambos, php.localhost y localhost van al proyecto Django. Ya los he configurado a través de los hosts virtuales de Apache.

Aquí hay 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 relevantes en apache_django_wsgi.conf son:

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

Dentro de 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 proyecto PHP es actualmente inaccesible. ¿Alguien tiene alguna idea de lo que me estoy perdiendo?


Me gustaría agregar que si está utilizando Apache ProxyPass , es posible negar ciertos patrones de URL para que caiga en mod_php.

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


Su directiva WSGIScriptAlias / ... le dice a Apache que toda solicitud que comience con "/" debería alimentarse a través del controlador WSGI de Django. Si cambió eso para leer WSGIScriptAlias /django-proj/ ... lugar, solo las solicitudes que comiencen con "/ django-proj" se pasarán a Django.

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


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

Incluya httpd-vhost.conf e intente WSGIScriptAlias / "/somewhere/file.wsgi" mi WSGIScriptAlias / "/somewhere/file.wsgi" en la sección de host virtual de httpd-vhosts que escucha el puerto 80.