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: ServerAdmin webmaster@example.com ServerName mysite .localhost ServerAlias mysite.localhost # 索引 + 目录根。 DirectoryIndex index.php DocumentRoot /var/www/mysite/public_html 【参考方案1】:

经过 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 并将 &lt;VirtualHost *:80&gt; 更改为 &lt;VirtualHost localhost:80&gt; 以使 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.localhostIP127.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>

在我的情况下,经过多次试验和错误,我刚刚将 &lt;VirtualHost *:80&gt; 替换为 &lt;VirtualHost mysite.localhost:80&gt;

我希望这会有所帮助。

问候,

【讨论】:

【参考方案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 上的虚拟主机的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Apache 2.4 创建虚拟主机

ubuntu 13.10 和 apache 2.4.6 上的虚拟主机

如何在 ubuntu 13.10 中创建虚拟主机

Ubuntu 服务器 13.10 上的 ZPanel

升级到 Ubuntu 13.10 后,Apache 上的 laravel 项目出现 403 错误

使用 Apache 虚拟主机在 ubuntu 13.10 上设置 zf2