Как запустить Django и PHP вместе на одном сервере Apache?
в настоящее время я могу запускать Django через mod_wsgi или PHP на моем сервере Apache.
мои проекты Django работают по адресу:http://localhost и источник находится на 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 является текущим недоступным. Кто-нибудь знает, чего мне не хватает?
4 ответов
я запускаю десятки сайтов 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 будут передаваться только запросы, начинающиеся с "/django-proj".
альтернативой было бы начать настройку виртуальных хостов для каждого проекта. Таким образом, Вы можете настроить Apache для размещения каждого проекта в / его собственном домене, и вам не нужно будет беспокоиться о конфигурации для один проект влияет на один из ваших других проектов.
у меня была та же проблема.
Попробуйте удалить этот блок <Directory />
в httpd-conf.
Добавить файл httpd-файл vhost.conf и и попробовать Путинг мой WSGIScriptAlias / "/somewhere/file.wsgi"
в разделе виртуального хоста httpd-vhosts, который прослушивает порт 80.
Я хотел бы добавить, что если вы используете Apache ProxyPass, можно запретить определенные шаблоны URL, чтобы он упал до mod_php.
ProxyPass /wordpress !
<Location /wordpress>
Require all granted
</Location>