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 / 问题 / 520195
Accepted
njp
njp
Asked: 2013-07-03 06:00:31 +0800 CST2013-07-03 06:00:31 +0800 CST 2013-07-03 06:00:31 +0800 CST

ServerName 和 ServerAlias 是如何工作的?

  • 772

这是我需要进一步澄清的虚拟主机配置的以下部分:

<VirtualHost *:80>
  # Admin email, Server Name (domain name), and any aliases
  ServerAdmin [email protected]
  ServerName  141.29.495.999
  ServerAlias example.com
...

这是和示例配置,类似于我目前拥有的(我目前没有域名)。

<VirtualHost *:80>- 允许在端口 80 上向可以联系此服务器的 IP 发出的所有 HTTP 请求进行以下设置。例如,如果可以在多个 IP 上访问服务器,则可以将此指令限制为仅一个而不是两个。

ServerName- 如果 HTTP 请求的主机部分与此名称匹配,则允许该请求。通常这将是映射到 IP 的域名,但在这种情况下,HTTP 请求主机必须与此 IP 匹配。

ServerAlias- 服务器接受的备用名称。

对我来说令人困惑的部分是,在上述情况下,如果我设置ServerAlias mytestname.com然后向 发出 HTTP 请求mytestname.com,是否必须有一个指向服务器 IP 的 DNS 记录才能正常工作?在这种情况下,ServerAlias 基本上只是 EXTRA ServerName 条目吗?

假设我有一个 DNS 条目,foobar.com = 141.29.495.999但后来我有ServerName = 141.29.495.999并且ServerAlias是空的,这是否意味着尽管 foobar.com 被解析到正确的 IP,因为在ServerNameor中没有接受 foobar.com 的引用ServerAlias?

或者其他的东西。伙计,我很困惑。

apache-2.2
  • 4 4 个回答
  • 289515 Views

4 个回答

  • Voted
  1. Best Answer
    Jenny D
    2013-07-03T06:07:44+08:002013-07-03T06:07:44+08:00

    可以这样想:

    DNS 是电话目录/黄页。当有人想拨打您的电话时,他们可以查找您的姓名并获取您的电话号码并拨打该电话。DNS 的作用与计算机相同——当有人想访问时,www.example.com他们向 DNS 询问 IP 地址,然后他们可以联系具有该 IP 地址的计算机。这就是决心的意思。解析 IP 地址与 Apache 无关;这严格来说是一个 DNS 问题。

    ServerNameandServerAlias更像是一个公司的内部电话列表。您的网络服务器就是总机;它将接受到服务器的所有传入连接。然后客户端/调用者将告诉他们他们正在寻找什么名称,它会在 Apache 配置中查找如何处理该名称。

    如果该名称未在 apache 配置中列为 ServerName/ServerAlias,则 apache 将始终为它们提供列出的第一个 VirtualHost。或者,如果根本没有 VirtualHost,那么无论请求中给出什么主机名,它都会给出相同的内容。

    ETA:所以,一步一步进行正常连接:

    1. 你http://www.example.com在浏览器中输入。
    2. 您的计算机询问它的 DNS 解析器,当它想与之交谈时应该使用哪个 IP 地址www.example.com。
    3. 您的计算机连接到该 IP 地址,并说它想与之交谈www.example.com(这是Host:HTTP 中的标头)。
    4. 网络服务器查看其配置以确定如何处理来自www.example.com. 可能发生以下任何一种情况:
      • www.example.com被列为 aServerName或ServerAliasfor a VirtualHost- 如果是这样,那么它将使用该 VirtualHost 的配置来传递内容。
      • 服务器根本没有任何虚拟主机 - 如果有,那么它将使用其 httpd.conf 中的配置来传递内容。
      • 服务器具有 VirtualHosts 但未www.example.com在其中任何一个中列出 - 如果是这样,则列表中的第一个 Virtualhost 将用于传递内容。
    • 130
  2. blau
    2013-07-03T06:13:51+08:002013-07-03T06:13:51+08:00

    如果你没有定义 ServerName,那么 apache2 会尝试从 /etc/hosts 中猜测它。ServerAlias 是可选的。最常见的用例是

    ServerName example.com
    ServerAlias www.example.com
    

    确保请求到达网络服务器 IP 取决于您(不是 apache2 的工作),例如,注册域和设置 DNS 记录。在没有域和 dns 记录的情况下这样做(用于测试和开发)的一种非常常见的方法是设置您的本地计算机 /etc/hosts 文件,以便 example.com 指向您服务器的 IP。

    192.168.0.12 example.com
    192.168.0.12 www.example.com
    
    • 24
  3. Pierluigi Vernetto
    2019-01-10T08:41:40+08:002019-01-10T08:41:40+08:00

    我强烈建议阅读有关该主题的官方文档:https ://httpd.apache.org/docs/2.4/vhosts/name-based.html

    它说“如果在包含最具体匹配 IP 地址和端口组合的虚拟主机集中没有找到匹配的 ServerName 或 ServerAlias,则将使用第一个列出的匹配的虚拟主机。” . 因此,在您的情况下,如果您访问“foobar.com”,httpd 将使用第一个以某种方式匹配 IP 141.29.495.999 的 VirtualHost 条目

    同一份文档说“许多服务器希望可以通过多个名称访问。这可以通过 ServerAlias 指令实现”。因此,您可以将 ServerAlias 简单地视为附加的 ServerName 条目。

    • 1
  4. Gajendra Sharma
    2021-12-08T23:41:32+08:002021-12-08T23:41:32+08:00
    <VirtualHost *:80>
        ServerName influenceknowledge.test
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/work-force/public
        ServerAlias influenceknowledge.test *.influenceknowledge.test
        <Directory /var/www/html/influence-knowledge/public >
           AllowOverride All
               Require all granted
        </Directory>    
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>
    
    • 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