我正在尝试设置 apache2 和 django 以从同一服务器支持两个不同的网站 example.com 和 beta.example.com。但对 beta.example.com 的请求将转到 example.com。
我的 apache 配置文件包括:
NameVirtualHost *:80
Include /var/www/main/sites-enabled
Include /var/www/beta/sites-enabled
对于 main/,sites-enabled 包含一个文件 main,该文件链接到 sites/available/main。这包括:
<VirtualHost *:80>
ServerName example.com
DocumentRoot /home/mycode/main
</VirtualHost>
<Location "/">
[Django & Python stuff]
SetEnv DJANGO_SETTINGS_MODULE main.settings
</Location>
对于 beta/,sites-enabled 有一个文件 beta,具有类似的符号链接。
<VirtualHost *:80>
ServerName beta.example.com
DocumentRoot /home/mycode/beta
</VirtualHost>
<Location "/beta.example.com/">
[Django & Python stuff]
SetEnv DJANGO_SETTINGS_MODULE beta.settings
</Location>
我已经设置了 DNS,因此 beta.example.com 被转发到 example.com(我认为;我对 DNS 不太了解)。我确实认为对 beta.example.com 的请求确实会到达 http 服务器,因为访问日志显示对与 beta.example.com 相关的图像文件的请求(我已经配置为 Apache 而不是 Django 来处理图像文件)。
但我在 beta.example.com 上看到的页面正是我期望的 example.com 页面。当我启动服务器时,系统警告我“NameVirtualHost *:80 没有 VirtualHosts。”
我在这里可能做错了什么?
更新 这似乎是 DNS 问题。建议的更改对 LAN 内部的请求(路由器已将主机名 beta.example.com 指定为服务器的本地 IP 地址)有效,但对 LAN 外部的请求无效。查看 other_vhosts_access.log 可发现,LAN 内部对 beta.example.com 的请求显示为 beta.example.com,而外部请求显示为 example.com。
我昨晚没注意到这一点,因为我从 LAN 外部查看了服务器行为,而没有检查内部请求。抱歉。
我会去查看 DNS 安排。谢谢您的帮助。
答案1
我不确定这是否就是您的问题,但 NameVirtualHost 没有冒号。此外,测试版网站的“Location”不正确。在两种情况下,请将您的 Location 标签放在 VirtualHost 容器内,并在两种情况下都坚持使用“/”。