2009-06-19 3 views
22

В настоящее время я могу запустить Django через mod_wsgi или PHP на моем сервере Apache.Как запустить Django и PHP на одном сервере Apache?

Мой Джанго проекты, работать по адресу: http://localhost и источник находится в C:/django_proj

Мои PHP проекты работают на: http://php.localhost и источник находится в C:/веб

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

ответ

29

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

Edit:

Ваша конфигурация должна выглядеть примерно так:

<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 />.

+0

Это хорошо знать, но я хочу отметить мой проект Django к, у основной домен, а мой PHP проект суб-домен, например: HTTP: // локальный -> Мой Джанго Рго http: //php.localhost -> Мой PHP Proj Знаете ли вы, как я могу достичь вышеуказанного, у меня уже есть работающий как виртуальные хосты. –

+1

Вам нужно поставить директивы и внутри соответствующих блоков . Другими словами, поставьте WSGIScriptAlias ​​внутри блока, где ServerName - localhost. Я сделаю это более ясным, отредактировав свой ответ. –

+0

Спасибо за вашу помощь, он работает. Я удалил «Alias ​​/ C:/web», и теперь он отлично работает. Я также достал блоки Directory из httpd.conf. –

7

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

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

0

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

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

0

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

ProxyPass /wordpress ! 
<Location /wordpress> 
    Require all granted 
</Location> 
Смежные вопросы