AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 638416
Accepted
matteo
matteo
Asked: 2014-10-21 11:39:16 +0800 CST2014-10-21 11:39:16 +0800 CST 2014-10-21 11:39:16 +0800 CST

VirtualHost 的服务器名称不起作用(显示 /var/www),所有别名都起作用

  • 772

我已经安装了 apache 2 并创建并启用了一个虚拟主机。

虚拟主机有: ServerName example.com ServerAlias *.example.com ServerAlias foo.com ServerAlias *.foo.com ServerAlias bar.com ServerAlias *.bar.com

如果我将浏览器定向到www.example.com、test.example.com、foo.com、www.foo.com 等,除了裸服务器名称之外的任何内容,它都会按预期工作,显示 /srv/www 的内容/example.com/public_html/index.php 是虚拟主机的 DocumentRoot。

但是,如果我在浏览器中只写“ example.com ”,我会看到/var/www/index.html的内容

它没有缓存在浏览器中,我已经清除了缓存并尝试了另一个浏览器并尝试通过代理。

这对我来说毫无意义。任何想法?

以下是 /etc/apache2/sites-enabled/000-default 的内容

<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
</VirtualHost>

以下是 /etc/apache2/sites-enabled/example.com 的内容:

    <VirtualHost *:80>
    ServerName example.com
    ServerAlias *.example.com
    ServerAlias foo.com
    ServerAlias *.foo.com
    ServerAlias bar.com
    ServerAlias *.bar.com
    #... and a few others
    DocumentRoot /srv/www/example.com/public_html
    ErrorLog /srv/www/example.com/error.log
    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel notice
    CustomLog /srv/www/example.com/access.log combined

      <Directory /srv/www/example.com/public_html>
        Options FollowSymLinks
        AllowOverride All
      </Directory>

    </VirtualHost>

我不明白为什么使用裸服务器名,默认虚拟主机优于与服务器名称特别匹配的虚拟主机,而所有别名都可以正常工作。

这是# apache2ctl -S 的输出

VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:443                  is a NameVirtualHost
     default server example.com (/etc/apache2/sites-enabled/default-ssl:2)
     port 443 namevhost example.com (/etc/apache2/sites-enabled/default-ssl:2)
*:80                   is a NameVirtualHost
     default server example.com (/etc/apache2/sites-enabled/000-default:1)
     port 80 namevhost example.com (/etc/apache2/sites-enabled/000-default:1)
     port 80 namevhost example.com (/etc/apache2/sites-enabled/example.com:1)
Syntax OK

(我想不用说我已经用“example.com”、“foo.com”和“bar.com”替换了实际的域名,只是为了在 SF 上发布)

apache-2.2
  • 2 2 个回答
  • 647 Views

2 个回答

  • Voted
  1. Ed Neville
    2014-10-21T11:51:38+08:002014-10-21T11:51:38+08:00

    /etc/apache2/sites-enabled/ 中链接了哪些其他文件?

    通常,启用 mod-info 对诊断目的很有用,如下所示(来自http://httpd.apache.org/docs/2.2/mod/mod_info.html):

    <Location /server-info>
      SetHandler server-info
    </Location>
    
    <Location /server-info>
      SetHandler server-info
      Order deny,allow
      Deny from all
      Allow from yourcompany.com
    </Location> 
    

    通常我用证书来保护它,但这超出了这个解释。一旦你启用了它,并限制为 127.0.0.1(通过 ssh 连接到服务器的隧道,设置你的主机文件等)。您可以看到 Apache 解析的确切运行配置。您可能会看到 example.com 在其他地方被引用。通常,当您使用 mod-info 时,事情会更有意义。

    • 1
  2. Best Answer
    matteo
    2014-12-31T11:50:29+08:002014-12-31T11:50:29+08:00

    显然,文档并不清楚这一点。

    来自https://issues.apache.org/bugzilla/show_bug.cgi?id=57384

    “如果您省略 ServerName [在虚拟主机定义中],它是根据系统主机名计算的(系统主机名的双反向 DNS 查找)”。因此,如果启用的站点 000-default 没有服务器名称,就好像它具有 example.com 作为 ServerName,即 example.com 我的服务器的主机名。

    因此,在我的情况下,当客户端请求域 example.com 时,000-default 是与请求的主机名匹配的第一个服务器,并“捕获”请求。

    如果我希望(像我一样)让默认站点捕获所有与任何服务器名称不匹配的请求,我需要在默认的 VirtualHost 定义中指定一个虚拟的 ServerName。这样,对服务器主机名的请求不会匹配默认虚拟主机,但会匹配 example.com 虚拟主机。不匹配任何服务器名或别名的请求将被默认站点捕获,因为它是第一个。

    “第一个列出的虚拟主机会捕获与服务器名/服务器别名不匹配的任何内容,即使您指定了服务器名也是如此。”

    • 1

相关问题

  • Apache Django Mod_Wsgi - 自动重新加载应用程序

  • Apache:对多个虚拟主机使用相同的目录指令

  • Apache 上的子域不工作 - 找不到服务器

  • PHP 作为 CGI 还是 Apache 模块?

  • 避免将某些丢失的文件记录到 Apache2 错误日志中

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve