ubuntu 13.10 和 apache 2.4.6 上的虚拟主机
Posted
技术标签:
【中文标题】ubuntu 13.10 和 apache 2.4.6 上的虚拟主机【英文标题】:Virtual host on ubuntu 13.10 and apache 2.4.6 【发布时间】:2013-10-31 09:13:54 【问题描述】:我有以下问题 我的hosts文件如下:
127.0.0.1 localhost
127.0.1.1 barbala4o-HP-ProBook-4530s
127.0.1.1 mysite.localhost
我在/etc/apache2/sites-available/mysite.localhost.conf
的文件如下:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName mysite.localhost
DocumentRoot /var/www/mysite
<Directory /var/www/mysite/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog /var/log/apache2/mysite-error.log
CustomLog /var/log/apache2/mysite-access.log common
</VirtualHost>
在执行sudo a2ensite mysite.localhost.conf
并在 mysite.localhost/ 上重新启动 apache 之后,仅在 localhost 上我得到以下信息(比如列出一个没有索引文件的目录):
Index of /
[ICO] Name Last modified Size Description
[DIR] apache_logs/ 2013-09-24 10:15 -
[DIR] mysql/ 2013-10-22 10:05 -
[DIR] tools/ 2013-10-22 10:05
当我输入localhost/test
而不是加载它显示的index.php
文件时,在/var/www/
目录中的任何其他文件夹(如测试)上:
Not Found
The requested URL /adlantic was not found on this server.
Apache/2.4.6 (Ubuntu) Server at localhost Port 80
如果我执行sudo a2dissite mysite.conf
并重新启动 apache,一切正常。我想问题出在mysite.localhost.conf
的某个地方,但我找不到在哪里。有任何想法吗? 10 倍
【问题讨论】:
您检查过.../site-enabled/
中的符号链接并确保它们是正确的吗?
是的。我对 mysite.localhost.cong 文件进行了一些尝试,我得到了它的工作(或多或少),但现在 /var/www 中的其他文件夹如果它们无法访问不在本地主机上,他们给了我喜欢加载 index.php 的 localhost/test,它给了我 404 not found.The current versionof mysite.localhost.conf is: 经过 3 小时的实验,我发现了问题。显然,在新的 Ubuntu 13.10 中,出于某种愚蠢的原因,虚拟主机的 conf 文件必须与此类似:
<VirtualHost mysite.localhost>
ServerAdmin webmaster@example.com
ServerName mysite.localhost
ServerAlias mysite.localhost
# Indexes + Directory Root.
DocumentRoot /var/www/mysite/public_html
<Directory /var/www/mysite/public_html/>
DirectoryIndex index.php
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
# Logfiles
ErrorLog /var/log/apache2/mysite-error.log
CustomLog /var/log/apache2/mysite-access.log common
</VirtualHost>
显然,开发 Ubuntu 13.10 的人认为使用它不再有价值
<VirtualHost *:80>
在制作虚拟主机时,它必须是
<VirtualHost mysite.localhost>
与专门指定的 DirectoryIndex 混合。这解决了我遇到的问题,现在一切正常(希望它们应该如此,最终可能会出现问题)显然 apache 的配置文件不同。
【讨论】:
我认为您的主配置文件中缺少NameVirtualHost *:80
。这或多或少会禁用name based virtual hosts (*:80
)。
是的。这就是我一直在寻找的:)
当您更新到 13.10 时,您是否保留了旧的 apache 配置文件? NameVirtualHost
无效,在 apache 2.4 中已弃用。
您先生是个好人,非常感谢您,尽管这对我来说毫无意义,因为我正在运行 debian,但它解决了我遇到的所有持续存在的问题。再次感谢您!【参考方案2】:
Ubuntu 13.10 及其变体已移至 Apache 2.4。 Apache 2.4 希望启用的虚拟主机配置文件默认以 .conf 结尾。
解决方案
现在要纠正这个问题,您可以使用两种方法来获得相同的结果。
第一个解决方案和简单的解决方案是为您的所有虚拟主机添加一个 .conf 扩展名。新的 Apache 2.4 读取站点可用目录中的每个虚拟主机,并在新的 Apache 2.4 配置文件中概述了 .conf 扩展名。
第二种解决方案是删除位于 /etc/apache2/apache2.conf 的 Apache 2.4 配置文件中的 .conf 扩展名
在旧的 Apache 2.2 文件中,.conf 文件有一个 Include sites-enabled/ 而新的 .conf 文件有
# Include the virtual host configurations:
IncludeOptional sites-enabled/*.conf
将该行更改为:
# Include the virtual host configurations:
IncludeOptional sites-enabled/
结果:命令 a2ensite yourdomain 现在按预期运行。如果您使用的是第二种方法;您的虚拟主机文件不需要具有 .conf 扩展名。
Note: Configuration file is "/etc/apache2/apache2.conf" in new Apache, so please copy document root path and other configurations from "/etc/apache2/sites-available/000-default.conf" to "/etc/apache2/apache2.conf"
查看更多信息:http://lyemium.com/content/virtual-host-issues-when-upgrading-apache-22-24#sthash.VVRCvEwS.dpuf
【讨论】:
我有 Apache 2.4.6 您提供的建议都没有工作/已经按照建议进行配置。 您使用的是哪个 linux 操作系统,执行上述步骤后的输出是什么? 也遇到了这个问题。将我所有启用站点的符号链接更改为 .conf 修复它。 如果只有 Apache 的错误日志抱怨启用了站点的它正在跳过,那么将为人们升级节省大量时间。感谢您的提醒。 谢谢@AnjithKP,经过数小时的尝试,添加“IncludeOptional sites-enabled/*.conf”为我解决了这个问题!【参考方案3】:对于Ubuntu 13.10
中的Apache 2.4.6
,
你会有
/etc/apache2/apache2.conf
/etc/apache2/sites-available/000-default.conf
和
/etc/apache2/sites-enabled/000-default.conf
指向 /etc/apache2/sites-available/000-default.conf
现在,编辑 apache2.conf
并添加
<Directory /home/my_site/public_html/>
#YOUR SETTINGS
</Directory>
编辑 sites-available/000-default.conf
并将 <VirtualHost *:80>
更改为 <VirtualHost localhost:80>
以使 apache 侦听 localhost(在端口 80 上)作为您的默认设置。
现在要使mysite.localhost
工作,请将其添加到sites-available/000-default.conf
<VirtualHost mysite.localhost:80>
ServerName mysite.localhost
ServerAdmin webmaster@mysite.localhost
DocumentRoot /home/my_new_site_public_html
ErrorLog $APACHE_LOG_DIR/error.log
CustomLog $APACHE_LOG_DIR/access.log combined
</VirtualHost>
现在编辑您的/etc/hosts/
文件并将mysite.localhost
的IP
从127.0.1.1
更改为127.0.0.1
现在访问http://mysite.localhost
& http://localhost
:)
【讨论】:
【参考方案4】:我遇到了同样的问题,但以上这些帖子都没有对我有用。后来我阅读并审查了 Apache 和 PHP 的每一个配置文件。
我可以发现在 apache2.conf(在 ubuntu 13.10 中)有一个名为
的标志HostnameLookups off
默认情况下这将设置为关闭,我将其更改为
HostnameLookups on
通过这样做,Apache 开始很好地收集我的主机条目和虚拟主机配置。
下面也是我实际的 Vhost 文件。我曾经让它工作
当然,我也建议在 Vhost 指令中添加 Require all granted
with。
<VirtualHost *:80>
ServerName test.yoursite.domain.in
DocumentRoot path_to_code_base/public
<Directory path_to_code_base/public>
Options -Indexes
Require all granted
DirectoryIndex index.php
AllowOverride All
</Directory>
ErrorLog /path_to_code_base/logs/error.log
LogLevel warn
CustomLog /path_to_code_base/logs/access.log combined
</VirtualHost>
我发布这篇文章是为了帮助那些不想浪费时间将 Ubuntu 从 13.10 降级到 13.04 的人。
我没有看到任何博客,我也无法理解 hostnameLookups 的实际含义。
希望这会有所帮助。
【讨论】:
我认为 HostnameLookup 没有帮助。根据上面 apache2.conf 中的文档,它控制 apache 是否应该查找客户端的主机名。 @Torandi 当它在服务器上运行时,apache 如何在客户端上查看主机名。即使我在阅读文档后也有同样的错觉,看起来那里的文档中有一些错误,这会误导每个人。我在这里发布的配置是我目前正在使用的配置,它工作正常。我认为打开该标志 表示查找客户端的主机名,即客户端IP的反向DNS。对我来说,VirtualHosts 可以在没有该选项的情况下工作(使用 apache 2.4)。 经过几个小时的追逐,这让我到达了我需要的地方。我运行service apache2 restart
只是为了确保一切正常。【参考方案5】:
执行: vim 可以用你喜欢的文本编辑器来改变,比如 nano、pico 等。
vim /etc/apache2/apache2.conf
原始文件:
# Sets the default security model of the Apache2 HTTPD server. It does
# not allow access to the root filesystem outside of /usr/share and /var/www.
# The former is used by web applications packaged in Debian,
# the latter may be used for local directories served by the web server. If
# your system is serving content from a sub-directory in /srv you must allow
# access here, or in any related virtual host.
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory /usr/share/>
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
将无更改为全部
编辑文件:
# Sets the default security model of the Apache2 HTTPD server. It does
# not allow access to the root filesystem outside of /usr/share and /var/www.
# The former is used by web applications packaged in Debian,
# the latter may be used for local directories served by the web server. If
# your system is serving content from a sub-directory in /srv you must allow
# access here, or in any related virtual host.
<Directory />
Options FollowSymLinks
AllowOverride All
Require all denied
</Directory>
<Directory /usr/share/>
AllowOverride All
Require all granted
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
【讨论】:
【参考方案6】:<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName mysite.localhost
DocumentRoot /var/www/mysite
<Directory /var/www/mysite/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog /var/log/apache2/mysite-error.log
CustomLog /var/log/apache2/mysite-access.log common
</VirtualHost>
在我的情况下,经过多次试验和错误,我刚刚将 <VirtualHost *:80>
替换为 <VirtualHost mysite.localhost:80>
我希望这会有所帮助。
问候,
【讨论】:
【参考方案7】:适用于 Kubuntu 14.04 和 Apache 2.4.7
在尝试了上述建议后,仍然遇到权限问题,“chmod 755 $HOME”对我有用。 不能在多用户系统上使用。
【讨论】:
【参考方案8】:请注意,如果您使用的是 AWS 实例,则需要使用 sudo 来完成所有这些设置。
sudo a2ensite example.com
请记住,即使重新启动 apache,您也需要这样做。如果您没有看到更改发生,这可能是罪魁祸首。
sudo service apache2 restart
【讨论】:
以上是关于ubuntu 13.10 和 apache 2.4.6 上的虚拟主机的主要内容,如果未能解决你的问题,请参考以下文章
ubuntu 13.10 和 apache 2.4.6 上的虚拟主机