Как запустить 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>