В настоящее время я могу запустить Django через mod_wsgi или PHP на моем сервере Apache.
Мои проекты Django выполняются по адресу: http: // localhost и source находятся в C: / django_proj
Мои проекты PHP работают на: http: //php.localhost, а источник – на C: / web
Если я включу оба, php.localhost и localhost перейдут в проект Django. Я уже установил их через виртуальные хосты Apache.
Вот некоторые соответствующие строки в 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"
Соответствующие строки в apache_django_wsgi.conf
:
WSGIScriptAlias / "C:/django_proj/apache/proj.wsgi" <Directory "C:/django_proj/apache"> Order allow,deny Allow from all </Directory>
Внутри 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>
Мой PHP-проект недоступен в настоящее время. У кого-нибудь есть идеи, что мне не хватает?
Я запускаю десятки сайтов mod_wsgi / Django, сайтов PHP и сайта Rails с одним Apache.
В основном это делается с использованием виртуальных хостов, но у меня есть некоторые, которые работают как в одном домене.
Вам просто нужно разместить WSGIScriptAlias /...
после каких-либо других директив Location / Alias.
Скажем, например, я хочу запустить phpMyAdmin в том же домене, что и сайт Django. Конфигурация будет выглядеть примерно так:
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>
Изменить :
Ваша конфигурация должна выглядеть примерно так:
<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>
Вам не нужны эти директивы <Directory>
в http.conf
… все ваши настройки на виртуальных хостах.
Кроме того, полностью избавиться от блока <Directory />
.
Ваша директива WSGIScriptAlias / ...
сообщает Apache, что все запросы, начинающиеся с «/», должны получать через обработчик WSGI Django. Если вы изменили это, чтобы читать WSGIScriptAlias /django-proj/ ...
вместо этого, запросы, начинающиеся с «/ django-proj», будут переданы в Django.
Альтернативой было бы начать настройку виртуальных хостов для каждого проекта. Таким образом, вы можете настроить Apache для размещения каждого проекта в / своем собственном домене, и вам не нужно будет беспокоиться о конфигурации для одного проекта, затрагивающего один из ваших других проектов.
У меня такая же проблема. Попробуйте удалить этот блок <Directory />
в httpd-conf.
Включите httpd-vhost.conf и попробуйте WSGIScriptAlias / "/somewhere/file.wsgi"
мой WSGIScriptAlias / "/somewhere/file.wsgi"
в разделе виртуального хоста httpd-vhosts, который прослушивает порт 80.
Я хотел бы добавить, что если вы используете Apache ProxyPass , можно отклонить определенные шаблоны URL-адресов, чтобы он попадал в mod_php.
ProxyPass /wordpress ! <Location /wordpress> Require all granted </Location>