繁体   English   中英

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

[英]Adding a Django site breaks my virtual hosts on CentOS 7

我有一个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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM