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

添加Django站点会破坏CentOS 7上的虚拟主机,django,apache,virtualhost,httpd.conf,centos7,Django,Apache,Virtualhost,Httpd.conf,Centos7,我有一个CentOS 7服务器,大约有20个域,都是通过/etc/httpd/conf.d中的vhosts文件自动管理的 我正在尝试学习Django,并希望使用它建立一个域,因此我在.conf文件中添加了一个特定的virtualhost 结果是Django域工作正常,但所有其他站点都已损坏(尝试使用Django,但会导致错误) Django域有两个文件夹:djangomain.com用于静态文件,而djangomain.app用于Python文件 如何将单个Django域集成到现有的多域虚拟主机

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

我正在尝试学习Django,并希望使用它建立一个域,因此我在.conf文件中添加了一个特定的virtualhost

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

Django域有两个文件夹:
djangomain.com用于静态文件,而djangomain.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>

服务器管理员username@domain.com
服务器管理员username@domain.com
UseCononicalName关闭
#www.site.com»site.com
重新启动发动机
重写条件%{HTTP_HOST}^www\.(.*)$[nc]
重写规则^(.*)$http://%1[r=301,l]
#文件位置
virtualdocumentroot“/主页/用户名/%0”
允许超越所有
要求所有授权
选项索引跟随符号链接
选项+执行CGI
选项+包括
除了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>

ServerName djangomain.com
ServerAlias www.djangomain.com
服务器管理员user@domain.com
DocumentRoot/home/username/djangomain.com
WSGIScriptAlias//home/username/djangomain.app/django.wsgi
命令允许,拒绝
通融
别名/robots.txt/home/username/djangomain.com/robots.txt
别名/favicon.ico/home/username/djangomain.com/favicon.ico
别名/images/home/username/djangomain.com/images
别名/static/home/username/djangomain.com/static
ErrorLog/home/username/djangomain.logs/error.log
CustomLog/home/username/djangomain.logs/access.log组合

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

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

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

要解决此问题,您需要将django虚拟主机指令替换为
,与其他vhost相同。这将使它们具有相同的解析优先级,并且它将只使用主机头来计算其余部分


如上所述,如果您运行的web服务器有20多个vHost,那么您确实需要更好地了解它的工作原理。如果有时间,请阅读HTTP和web主机。

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

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

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

要解决此问题,您需要将django虚拟主机指令替换为
,与其他vhost相同。这将使它们具有相同的解析优先级,并且它将只使用主机头来计算其余部分


如上所述,如果您运行的web服务器有20多个vHost,那么您确实需要更好地了解它的工作原理。如果有时间,请阅读HTTP和web hosting。

看起来您只需要在vhosts.conf文件中,将django部分放在底部。我尝试了,但没有改变任何东西。我还尝试将它放在一个单独的文件中,在动态虚拟主机之后加载。不要在virtualhost指令中使用名称。看起来您只需要在vhosts.conf文件中,将django部分放在底部。我尝试了,但没有改变任何东西。我还尝试将它放在一个单独的文件中,加载在动态虚拟主机之后。不要在virtualhost指令中使用名称。它按照您的建议工作,并使用将Django主机放在动态主机之后。它按照您的建议工作,并使用将Django主机放在动态主机之后。