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.