多个站点上的虚拟主机设置在失败

多个站点上的虚拟主机设置在失败

再次编辑:我认为在我的 ubuntu 操作系统(个人版)上安装 apache2 可以让我在内部“托管”网站,而无需上网。我现在意识到“有效”的两个域名实际上是注册域名,另外两个是我打算在上线后注册的名称。但是断开与互联网的连接甚至会使前两个域名无法工作 - 尽管我知道它们正在从 localhost.mysitename.com 提取文件。这是怎么回事?我现在正在阅读 etc/host 和 etc/host.conf 以及 etc/nsswitch.conf - 我的方向正确吗?

我重写了这个问题并添加了更多信息。问题仍然存在。谢谢:

你到底如何才能彻底阅读 Apache 文档vHost 配置,尝试了几乎所有的方法,但仍然会出现初始情况,即前两个 vHost 和目录运行良好,但之后的每个都出现问题。“错误请求”,“未找到服务器”。

这是基本 vHost 文件(位于 /etc/apache2/sites-available 中),复制了 4 次,只有“mysitename1”发生变化,其 DocumentRoot 和 Directory 也发生了变化。顺便说一句,此版本使用的是本地主机 IP(127.0.0.1),但我使用了 *:80,结果完全相同。

<VirtualHost 127.0.0.1>
 ServerAdmin [email protected]
 ServerName localhost.mysitename1.com

 DocumentRoot /home/folder/folder/folder/folder
 <Directory />
  Options FollowSymLinks
  AllowOverride All
 </Directory>
 <Directory /home/folder/folder/folder/folder>
  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 "path to this site's error.log"

 LogLevel warn

 CustomLog "path to this site's access.log"

    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>

ports.conf 里面的内容如下:(我以 *:80 而不是 127.0.0.1 开始) - 结果与上面描述相同:

Listen 80
NameVirtualHost 127.0.0.1

我对文档中的这句话感到疑惑:“您可以将条目放入主机文件中以进行本地测试,但这只能在具有这些主机条目的机器上进行。”这就是我所要做的,本质上是一个开发环境,我可以在本地处理多个站点。我找不到这个“hosts”文件,但我想知道我是否输入了我的前两个域名(很久以前)并忘记了我是怎么做的。??

谢谢你的帮助。

答案1

答案就在 /etc/hosts 文件中。要发现名称的 IP 地址,系统 DNS 解析器将(应该)首先在 /etc/hosts 文件中查找 name=ip,如果没有,则进行 DNS 搜索。阅读“man hosts”以查看 hosts 文件的语法。为所有域(最好不是 FQDN)分配本地主机的 IP 地址(127.0.0.1)示例:

127.0.0.1 localhost.exmaplesite1.com
127.0.0.1 localhost.exmaplesite2.com

在 VirtualHost 指令中使用 localhost.examplesite1.com 和 localhost.examplesite2.com 作为 ServerName。有关其他设置和语法,请参阅文档链接。@Antonious 未记录 Apache2 中对单一通配符的使用 - 但他不明白我试图通过本地主机环回强制某些名称,以便我可以离线开发 Web 应用程序。我从来不明白 @lynxman 的假设,即“错误请求”或“未找到服务器”错误可以写入错误日志 - 尽管我无论如何都为每个 VirtualHost 指令使用单独的日志文件。

顺便说一句:“sudo host localhost.examplesite.com”将打印出该站点的 IP 地址(如果“examplesite.com”是实际站点)。显然,“sudo host”命令不会查找 /etc/hosts 设置和对 IP 的影响。<-- 是的,我知道,这让我很倒霉。

干杯!

答案2

您可以在 apache 中托管任意数量的虚拟主机,这看起来主机名要么非常相似,要么重叠,在 apache 中创建虚拟主机时,请确保

  • 当使用基于 DNS 的虚拟主机时,你总是会有一个NameVirtualHost针对你服务的 IP 和端口的指令
  • 确保虚拟主机名不冲突,您可以随时通过添加%V到日志格式(以便显示哪个域正在访问)或在每个 VH 中都有一个文件声明它是谁来检查您正在访问哪一个

答案3

我将与您分享我的工作配置。

确保已链接虚拟主机已启用站点. Apache 执行每个已启用站点按字母数字顺序保存文件,因此将默认网站命名为0000-默认因此它将首先执行。这是虚拟主机失败时用户应该看到的站点。我的站点如下所示:

NameVirtualHost *

    <VirtualHost *>
            ServerAdmin [email protected]

            DocumentRoot /var/www/0000-default-site
            <Directory />
                    Options FollowSymLinks
                    #AllowOveride set to All for mod rewrite (default None)
                    AllowOverride All
            </Directory>
            <Directory /var/www/0000-default-site>
                    Options Indexes FollowSymLinks MultiViews
                    AllowOverride None
                    Order allow,deny
                    allow from all
                    # Uncomment this directive is you want to see apache2's
                    # default start page (in /apache2-default) when you go to /
                    #RedirectMatch ^/$ /apache2-default/
            </Directory>


            ErrorLog /var/log/apache2/error.log

            # Possible values include: debug, info, notice, warn, error, crit,
            # alert, emerg.
            LogLevel info

            CustomLog /var/log/apache2/access.log combined
            ServerSignature On


    </VirtualHost>

注意 *NameVirtualHost ** 指令。这必须是虚拟配置中的第一个指令。因此,你将其放在0000-默认并确保没有其他操作被首先执行。

接下来命名您的第一个虚拟主机0010-您的域名和你的第二个0020-另一个.名称。这是我的虚拟外观(注意它们与默认值略有不同):

<VirtualHost *>
        ServerName www.lickmyquads.net
        ServerAlias lickmyquads.net
        ServerAdmin [email protected]

        DocumentRoot /var/www/lickmyquads.net/www/docroot
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/lickmyquads.net/www/docroot>
                Options FollowSymLinks
                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 /var/log/apache2/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel info

        CustomLog /var/log/apache2/access.log combined
        ServerSignature On

        #Custom Error
        #ErrorDocument 404 /app/404.php
        #ErrorDocument 404;2 /app/404.php
        #ErrorDocument 404;3 /app/404.php

</VirtualHost>

希望这个示例能帮你解决问题。如果没有,请尝试运行apache2ctl 配置测试命令来帮助查找配置中的任何语法错误。

答案4

如果您有多个客户端并且不想维护单独的主机文件,则可以设置分割水平 DNS 服务器。

http://en.wikipedia.org/wiki/Split-horizo​​n_DNS

这并不像听起来那么难,而且拥有本地缓存​​ DNS 服务器有很多优势。

相关内容