我是 Apache 新手。我读过一些教程,但不确定我做错了什么。
我已启用默认站点,并且该站点运行正常:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>
因此我想添加第二个网站 www.example.com。我更新了我的 hosts 文件:
192.168.1.148 sam-NV53 # Added by NetworkManager
127.0.0.1 localhost.localdomain localhost
::1 sam-NV53 localhost6.localdomain6 localhost6
127.0.1.1 sam-NV53
www.example.com localhost.localdomain localhost
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
我定义了我的新网站
<VirtualHost *>
ServerAdmin [email protected]
ServerName www.example.com
ServerAlias example.com
DirectoryIndex index.html
DocumentRoot /var/www/
</VirtualHost>
由于DocumentRoot
我的新网站的 和我的默认网站的 相同,我期望index.html
从我的默认网站看到 。但我看到的却是来自网络的 example.com。我这里漏掉了什么?
编辑
显然没有人注意到我的 hosts 文件中的条目是倒着的。我将其更改为:
127.0.0.1 geekspeak.dev
现在它起作用了。感谢大家的反馈 :)
答案1
无论你的
<VirtualHost>
必须与您列出的内容相匹配
NameVirtualHost
所以如果你有
NameVirtualHost *:80
所有虚拟主机 80 端口条目必须类似
<VirtualHost *:80>
因此,像在第一个示例中一样,将 * 切换为 *:80,它应该会到达正确的位置
答案2
尝试使用除 example.com、www.example.com 或其他衍生名称以外的名称。这些名称由 IANA 保留用于文档。我使用自己的 Apache 服务器尝试在 上配置虚拟主机www.example.com
,但总是被重定向到 IANA 页面,但后来我将其更改为www.someserver.dev
,一切正常。
祝你好运
答案3
您可以尝试以下几件事:
- 正如 rjacks 提到的,不要将其用作
example.com
您网站的名称。 - 不要在
hosts
文件中添加条目。在某些情况下这可能有用,但我认为在这种情况下没有必要这样做。 - 更新您的 DNS,将新服务器名称指向您的 Web 服务器的 IP。例如,如果您拥有,
somesite.com
您可以根据需要自由创建子域test.somesite.com
或任意数量的其他域。 - 确保在配置文件发生任何更改后重新启动 Apache。
- 我会将新网站提供给默认网站以外的其他目录(至少是暂时的),以便确认哪些 VirtualHosts 实际上是匹配并为其提供服务。
答案4
我已经尝试使用 virtualbox 来实现这一点。主机操作系统 - Win7,客户机操作系统 - Ubuntu Server。
1)在 /etc/apache2/sites-available/ 中创建 www.yourdomain.com
<virtualhost *:80> # i recommend adding your interface IP here
ServerAdmin [email protected]
ServerName yourdomain.com
ServerAlias www.yourdomain.com
DirectoryIndex index.html
DocumentRoot /var/www/main/htdocs
LogLevel warn
ErrorLog /var/www/main/logs/error.log
CustomLog /var/www/main/logs/access.log combined
</virtualhost>
2)在/var/www 内创建目录
mkdir -p /var/www/main/htdocs
mkdir -p /var/www/main/logs
修改这些目录的权限
3)在 apache2 中启用站点
a2ensite www.yourdomain.com
4)编辑 /etc/apache2/sites-available/default 并删除 DocumentRoot 和最后一行之间的所有行。
5)重新启动或重新加载 apache2
6)编辑您的主机文件 www.yourdomain.com 然后尝试一下。
这在我的测试服务器上有效。