添加Django站点会破坏我在CentOS 7上的虚拟主机

时间:2016-10-21 18:50:38

标签: django apache virtualhost httpd.conf centos7

我有一个 CentOS 7服务器,大​​约有20个域都使用/etc/httpd/conf.d中的 vhosts文件自动管理。

我正在尝试学习 Django ,并希望使用它来设置一个域,因此我在.conf文件中添加了一个特定的虚拟主机。

结果是Django域工作正常,但所有其他站点都坏了(尝试使用Django但导致错误)。

Django域有两个文件夹: djangodomain.com 用于静态文件, djangodomain.app 用于Python文件。

如何将单个Django域集成到现有的多域虚拟主机设置中?

现有的vhosts.conf:

<VirtualHost *:80>
    serveradmin username@domain.com
    serveradmin username@domain.com

    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>

我添加的内容打破了除Django网站之外的所有内容:

<VirtualHost djangodomain.com:80>
    ServerName djangodomain.com
    ServerAlias www.djangodomain.com
    ServerAdmin user@domain.com

    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>

转发至unix.stackexchange.com

1 个答案:

答案 0 :(得分:0)

当Apache获取HTTP请求时,它需要知道应该处理此请求的虚拟主机。现在,它的工作方式是。 Apache获取客户端请求所涉及的IP地址(服务器IP,而不是客户端),并通过虚拟主机定义列表查找为该IP定义的任何虚拟主机。如果有多个,它将​​查看Host标头并尝试将其与特定的ServerName或ServerAlias指令相匹配。如果它仍然找不到,它将寻找默认的虚拟主机。

您有两个虚拟主机定义。如果端口80 <VirtualHost *:80>上的默认vhost,则为一个。这是默认值,因为它具有*用于IP。另一个特定于IP地址<VirtualHost djangodomain.com:80>。它使用的IP是djangodomain.com解析的任何内容。

因此,任何来自该IP的请求都将由IP特定配置处理,然后才允许其进入默认状态。

要解决此问题,您需要将{django虚拟主机指令替换为<VirtualHost *:80>,与其他虚拟主机相同。这应该将它们全部置于相同的解析优先级,它只使用Host头来计算其余部分。

如果您正在运行具有20多个虚拟主机的Web服务器,那么您真的需要更好地了解它的工作原理。有空的时候阅读HTTP和网络托管。