添加 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),然后遍历虚拟主机定义列表以查找为该 IP 定义的任何虚拟主机。如果不止一个,它将查看 Host header 并尝试将其与特定的 ServerName 或 ServerAlias 指令匹配。如果仍然找不到,它将寻找一个默认的虚拟主机。
您有两个虚拟主机定义。一个如果端口 80 <VirtualHost *:80>
上的默认虚拟主机。它是默认值,因为它有 * 表示 IP。另一个特定于 IP 地址 <VirtualHost djangodomain.com:80>
。它使用的 IP 是 djangodomain.com 解析的任何 IP。
因此,任何到达该 IP 的请求都将由 IP 特定配置处理,然后才可能被允许进入默认设置。
要解决此问题,您需要将 django 虚拟主机指令替换为 <VirtualHost *:80>
,与其他虚拟主机一样。这应该将它们全部置于相同的解析优先级,它只会使用主机 header 来计算其余部分。
也就是说,如果您是 运行 拥有 20 多个虚拟主机的 Web 服务器,那么您确实需要更好地了解它的工作原理。有空时阅读 HTTP 和网络托管。
我有一个 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),然后遍历虚拟主机定义列表以查找为该 IP 定义的任何虚拟主机。如果不止一个,它将查看 Host header 并尝试将其与特定的 ServerName 或 ServerAlias 指令匹配。如果仍然找不到,它将寻找一个默认的虚拟主机。
您有两个虚拟主机定义。一个如果端口 80 <VirtualHost *:80>
上的默认虚拟主机。它是默认值,因为它有 * 表示 IP。另一个特定于 IP 地址 <VirtualHost djangodomain.com:80>
。它使用的 IP 是 djangodomain.com 解析的任何 IP。
因此,任何到达该 IP 的请求都将由 IP 特定配置处理,然后才可能被允许进入默认设置。
要解决此问题,您需要将 django 虚拟主机指令替换为 <VirtualHost *:80>
,与其他虚拟主机一样。这应该将它们全部置于相同的解析优先级,它只会使用主机 header 来计算其余部分。
也就是说,如果您是 运行 拥有 20 多个虚拟主机的 Web 服务器,那么您确实需要更好地了解它的工作原理。有空时阅读 HTTP 和网络托管。