Подтвердить что ты не робот

Как запустить 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-проект в настоящее время недоступен. У кого-нибудь есть идеи, что мне не хватает?

4b9b3361

Ответ 1

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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

ProxyPass /wordpress !
<Location /wordpress>
    Require all granted
</Location>