2016-10-21 5 views
1

У меня есть CentOS 7 сервер около 20 доменов, всех управляемые автоматически с файлом ВХостов в /etc/httpd/conf.d.Добавление сайта Django разбивает мои виртуальные хосты на CentOS 7

Я пытаюсь изучить Django и хотел бы создать для него один домен, поэтому я добавил конкретный виртуальный хост в файл .conf.

В результате домен Django работает нормально, но все остальные сайты разбиты (попробуйте использовать Django, но вызывают ошибки).

Домен Django имеет две папки:djangodomain.com для статических файлов и djangodomain.app для файлов Python.

Как интегрировать один домен Django в существующую существующую настройку виртуального хоста с несколькими доменами?

Существующие vhosts.conf:

<VirtualHost *:80> 
    serveradmin [email protected] 
    serveradmin [email protected] 

    usecanonicalname off 

    # www.site.com » site.com 
    rewriteengine on 
    rewritecond %{HTTP_HOST} ^www\.(.*)$ [nc] 
    rewriterule ^(.*)$   http://%1 [r=301,l] 

    # file locations 
    virtualdocumentroot "/home/username/%0" 

    <directory "/home/username/*"> 
     allowoverride all 
     require all granted 
     options indexes followsymlinks 
     options +execcgi 
     options +includes 
    </directory> 
</VirtualHost> 

То, что я добавил, что сломал все, кроме сайта Джанго:

<VirtualHost djangodomain.com:80> 
    ServerName djangodomain.com 
    ServerAlias www.djangodomain.com 
    ServerAdmin [email protected] 

    DocumentRoot /home/username/djangodomain.com 

    WSGIScriptAlias//home/username/djangodomain.app/django.wsgi 

    <Directory /home/username/djangodomain.app> 
     Order allow,deny 
     Allow from all 
    </Directory> 

    Alias /robots.txt /home/username/djangodomain.com/robots.txt 
    Alias /favicon.ico /home/username/djangodomain.com/favicon.ico 
    Alias /images /home/username/djangodomain.com/images 
    Alias /static /home/username/djangodomain.com/static 

    ErrorLog /home/username/djangodomain.logs/error.log 
    CustomLog /home/username/djangodomain.logs/access.log combined 
</VirtualHost> 

Crossposted в unix.stackexchange.com

+0

Похоже, вам просто нужно, в файле vhosts.conf, положить часть django внизу –

+0

Я пробовал это, но ничего не изменил. Я также попытался поместить его в отдельный файл, загруженный после динамических виртуальных хостов. –

+0

Не используйте имена в директиве virtualhost. –

ответ

0

Когда Apache получает запрос HTTP, это должен знать, какой виртуальный хост должен обрабатывать этот запрос. Теперь, как это работает. Apache выбирает IP-адрес, к которому пришел запрос клиента (IP-адрес сервера, а не клиент), и он просматривает список определений виртуальных хостов, чтобы найти любые виртуальные узлы, определенные для этого IP-адреса. Если их несколько, он будет рассматривать заголовок Host и попытаться сопоставить его с определенной директивой ServerName или ServerAlias. Если он все еще не может найти его, он будет искать виртуальный хост по умолчанию.

У вас есть два определения виртуального хоста. Один, если по умолчанию vhost на порту 80 <VirtualHost *:80>. Это значение по умолчанию, поскольку оно имеет * для IP. Другая спецификация относится к IP-адресу <VirtualHost djangodomain.com:80>. Используемый IP-адрес - это то, что разрешает djangodomain.com.

Таким образом, любой запрос, поступающий на этот IP-адрес, будет обрабатываться специфической для IP-конфигурации, прежде чем его можно будет по умолчанию сбросить.

Чтобы исправить это, вам нужно заменить директиву виртуального хоста django на <VirtualHost *:80>, как и у ваших других vhosts. Это должно привести их к одному и тому же параметру синтаксического анализа, и он просто будет использовать заголовок Host, чтобы выяснить остальное.

Упомянутый, если вы используете веб-сервер с 20+ vhosts, вам действительно нужно лучше понять, как это работает. Читайте на HTTP и веб-хостинге, когда у вас есть время.

+0

Он работал так, как вы предлагали, и помещал узел Django ПОСЛЕ динамических хостов, используя . –

 Смежные вопросы

  • Нет связанных вопросов^_^