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

Несколько сайтов django с apache и mod_wsgi

Я хочу разместить несколько сайтов под тем же сервером, который использует Debian 5, скажем, у меня есть site1, site2 и site3, и предположим, что мой ip 155.55.55.1:

site1: 155.55.55.1:80  , script at /opt/django/site1/
site2: 155.55.55.1:8080, script at /opt/django/site2/
site3: 155.55.55.1:8090, script at /opt/django/site3/

Вот мой apache по умолчанию:

<VirtualHost *:80>
    ServerName /
    ServerAlias  */
    DocumentRoot /opt/django/site1/
    LogLevel warn
    WSGIScriptAlias / /opt/django/site1/apache/django.wsgi
    Alias /media /opt/django/site1/media/statics
    Alias /admin_media  /home/myuser/Django-1.1/django/contrib/admin/media 
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/usr/share/phpmyadmin"
    ServerName /phpmyadmin
    Alias /phpmyadmin /usr/share/phpmyadmin
    <Directory /usr/share/phpmyadmin>
        Options Indexes FollowSymLinks
        AllowOverride None
        Order Deny,Allow
        Allow from all
    </Directory>
</VirtualHost>

И вот моя конфигурация wsgi для site1, /opt/django/site1/apache/django.wsgi:

import os, sys
import django.core.handlers.wsgi

sys.path.append('/opt/django')
sys.path.append('/opt/django/site1')

os.environ['DJANGO_SETTINGS_MODULE'] = 'site1.settings'
application = django.core.handlers.wsgi.WSGIHandler()

Как добавить site2 и site3, которые являются сайтами на основе Django, и будут обслуживаться как site1?

4b9b3361

Ответ 1

Директивы ServerName/ServerAlias ​​неверны. Имя_сервера должно быть именем хоста. Вероятно, вы должны просто удалить ServerAlias.

Затем просто сделайте очевидные и повторяющиеся директивы VirtualHost/Listen, просто изменив номер порта и расположение сценариев в файловой системе.

Наконец, не устанавливайте DocumentRoot в качестве кода вашего Django, так как это упрощает случайное раскрытие исходного кода, если вы загружаете конфигурацию Apache. Поэтому просто удалите директиву DocumentRoot с сайта VirtualHost для сайтов Django.

Listen 80

<VirtualHost *:80>
ServerName www.example.com
WSGIScriptAlias / /opt/django/site1/apache/django.wsgi
Alias /media /opt/django/site1/media/statics
Alias /admin_media  /home/myuser/Django-1.1/django/contrib/admin/media

<Directory opt/django/site1/apache>
Order allow,deny
Allow from all
</Directory>

<Directory /home/myuser/Django-1.1/django/contrib/admin/media>
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

Listen 8080

<VirtualHost *:8080>
ServerName www.example.com
WSGIScriptAlias / /opt/django/site2/apache/django.wsgi
Alias /media /opt/django/site2/media/statics
Alias /admin_media  /home/myuser/Django-1.1/django/contrib/admin/media

<Directory opt/django/site2/apache>
Order allow,deny
Allow from all
</Directory>

<Directory /home/myuser/Django-1.1/django/contrib/admin/media>
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

Listen 8090

<VirtualHost *:8090>
ServerName www.example.com
WSGIScriptAlias / /opt/django/site3/apache/django.wsgi
Alias /media /opt/django/site3/media/statics
Alias /admin_media  /home/myuser/Django-1.1/django/contrib/admin/media

<Directory opt/django/site3/apache>
Order allow,deny
Allow from all
</Directory>

<Directory /home/myuser/Django-1.1/django/contrib/admin/media>
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

Я также добавляю отсутствующую директиву каталога для доступа к статическим файлам. Однако вы должны просмотреть пути.

Убедитесь, что вы читаете:

http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango http://code.google.com/p/modwsgi/wiki/ConfigurationGuidelines#Hosting_Of_Static_Files

для получения дополнительной информации.


ОБНОВЛЕНИЕ 1

Кстати, поскольку вы используете PHP в том же Apache, вам будет намного лучше использовать режим демонов mod_wsgi и вытолкнуть каждый экземпляр Django в отдельный процесс. Это позволяет многопроцессорным процессам, хотя основные процессы Apache вынуждены быть однопоточными из-за PHP. Конечный результат будет намного меньше используемой памяти, чем при запуске нескольких экземпляров Django в каждом процессе в встроенном режиме с помощью предпрофессионального MPM. Ваш код Django просто должен быть потокобезопасным. Конфигурация в дополнение к выше была бы добавить WSGIDaemonProcess/WSGIProcessGroup для каждого Django VirtualHost, где имя группы процессов демона отличается для каждого VirtualHost.

<VirtualHost *:80>
WSGIDaemonProcess site1 display-name=%{GROUP}
WSGIProcessGroup site1
... existing stuff
</VirtualHost>

<VirtualHost *:8080>
WSGIDaemonProcess site2 display-name=%{GROUP}
WSGIProcessGroup site2
... existing stuff
</VirtualHost>

<VirtualHost *:8090>
WSGIDaemonProcess site3 display-name=%{GROUP}
WSGIProcessGroup site3
... existing stuff
</VirtualHost>

Это также позволяет вам более легко перезапускать каждый экземпляр Django без перезагрузки всего Apache. Читайте:

http://code.google.com/p/modwsgi/wiki/QuickConfigurationGuide#Delegation_To_Daemon_Process http://code.google.com/p/modwsgi/wiki/ReloadingSourceCode

Ответ 2

Включение всей конфигурации virtualHost в одном месте отлично работает, но у Debian есть своя концепция, разделяя их в файле для каждого сайта в /etc/apache 2/sites-available, которые активируются путем ссылки на них в. /sites - включен. Таким образом, сервер-администратор также может назначать отдельные права доступа к файлу конфигурации для каждого из пользователей unix-сайта unix, скрипты могут проверять, активен ли сайт и т.д.

В принципе, было бы неплохо иметь одно центральное руководство для установок Django-Admin, текущее множество отдельных документов, ссылок и статей в блогах не очень полезно для распространения Django.