Как мне запустить Django и PHP вместе на одном сервере Apache? - PullRequest
23 голосов
/ 20 июня 2009

В настоящее время я могу запускать 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 ]

32 голосов
/ 20 июня 2009

Я запускаю десятки сайтов 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 />.

8 голосов
/ 20 июня 2009

Ваша директива WSGIScriptAlias / ... сообщает Apache, что все запросы, начинающиеся с "/", должны передаваться через обработчик Django WSGI. Если вместо этого вы изменили значение на WSGIScriptAlias /django-proj/ ..., в Django будут передаваться только запросы, начинающиеся с "/ django-proj".

Альтернативой может быть установка виртуальных хостов для каждого проекта. Таким образом, вы можете настроить Apache для размещения каждого проекта в / или его собственном домене, и вам не нужно будет беспокоиться о конфигурации одного проекта, влияющего на один из ваших других проектов.

0 голосов
/ 07 марта 2017

Я хотел бы добавить, что если вы используете Apache ProxyPass , можно запретить определенные шаблоны URL, чтобы он упал до mod_php.

ProxyPass /wordpress !
<Location /wordpress>
    Require all granted
</Location>
0 голосов
/ 14 октября 2011

У меня была такая же проблема. Попробуйте удалить этот блок <Directory /> в httpd-conf.

Включите httpd-vhost.conf и попробуйте поместить мой WSGIScriptAlias / "/somewhere/file.wsgi" в раздел виртуального хоста httpd-vhosts, который прослушивает порт 80.

...