Отдельный экземпляр django с поддоменами для каждого приложения в проекте django - PullRequest
0 голосов
/ 25 апреля 2010

У меня есть проект django (django + apache + mod_wsgi + nginx) с несколькими приложениями, я хотел бы сопоставить каждое приложение как поддомен:

project/
      app1 (domain.com)
      app2 (sub1.domain.com)
      app3 (sub3.domain.com)

У меня есть один скрипт .wsgi, обслуживающий проект, который хранится в папке / apache. Ниже мой файл vhost. Я использую один файл vhost вместо отдельных для каждого поддомена:

<VirtualHost *:8080>
    ServerAdmin xxx@gmail.com
    ServerName www.domain.com
    ServerAlias domain.com
    DocumentRoot /home/path/to/app/
    Alias /admin_media/ /usr/local/lib/python2.6/dist-packages/django/contrib/admin/media
    <Directory /home/path/to/wsgi/apache/>
        Order deny,allow
        Allow from all
    </Directory>
    LogLevel warn
    ErrorLog   /home/path/to/logs/apache_error.log
    CustomLog /home/path/to/logs/apache_access.log combined
    WSGIDaemonProcess domain.com user=www-data group=www-data threads=25
    WSGIProcessGroup domain.com
    WSGIScriptAlias / /home/path/to/apache/kcdf.wsgi
</VirtualHost>

<VirtualHost *:8081>
    ServerAdmin xxx@gmail.com
    ServerName sub1.domain.com
    ServerAlias sub1.domain.com
    DocumentRoot /home/path/to/app
    Alias /admin_media/ /usr/local/lib/python2.6/dist-packages/django/contrib/admin/media
    <Directory /home/path/to/wsgi/apache/>
        Order deny,allow
        Allow from all
    </Directory>
    LogLevel warn
    ErrorLog   /home/path/to/logs/apache_error.log
    CustomLog /home/path/to/logs/apache_access.log combined
    WSGIDaemonProcess sub1.domain.com user=www-data group=www-data threads=25
    WSGIProcessGroup sub1.domain.com
    WSGIScriptAlias / /home/path/to/apache/kcdf.wsgi
</VirtualHost>

Моя конфигурация Nginx для domain.com:

server {
    listen       80;
    server_name  domain.com;

    access_log  off;
    error_log off;

    # proxy to Apache 2 and mod_wsgi
    location / {
        proxy_pass         http://127.0.0.1:8080/;
        proxy_redirect     off;

        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_max_temp_file_size 0;

        client_max_body_size       10m;
        client_body_buffer_size    128k;

        proxy_connect_timeout      90;
        proxy_send_timeout         90;
        proxy_read_timeout         90;

        proxy_buffer_size          4k;
        proxy_buffers              4 32k;
        proxy_busy_buffers_size    64k;
        proxy_temp_file_write_size 64k;
    }
}

Конфигурация для sub.domain.com:

server {
    listen       80;
    server_name  sub.domain.com;

    access_log  off;
    error_log off;

    # proxy to Apache 2 and mod_wsgi
    location / {
        proxy_pass         http://127.0.0.1:8081/;
        proxy_redirect     off;

        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_max_temp_file_size 0;

        client_max_body_size       10m;
        client_body_buffer_size    128k;

        proxy_connect_timeout      90;
        proxy_send_timeout         90;
        proxy_read_timeout         90;

        proxy_buffer_size          4k;
        proxy_buffers              4 32k;
        proxy_busy_buffers_size    64k;
        proxy_temp_file_write_size 64k;
    }
}

Эта настройка, похоже, не работает, все указывает на основной домен. Я пробовал http://effbot.org/zone/django-multihost.htm, который работал, но, похоже, возникают проблемы с загрузкой моих css, изображений, js файлов.

Ответы [ 2 ]

1 голос
/ 26 апреля 2010

Если предположить, что nginx работает нормально, у вас есть соответствующие директивы NameVirtualHost, установленные в Apache, чтобы правильно отображать виртуальные хосты. Если вы этого не сделаете, то все запросы будут переданы первому виртуальному хосту, найденному в файле конфигурации.

0 голосов
/ 26 апреля 2010

По умолчанию Django не имеет разного поведения для каждого имени хоста. Средство промежуточного программного обеспечения django-multihost прекрасно работает для меня, чтобы включить эту функцию. Я вижу, что вы настроили ваше местоположение admin_media в вашей конфигурации Apache, но не местоположение медиа в конфигурациях Apache или Nginx, может быть, поэтому у вас проблемы с носителями?

...