首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ServerName与ServerAlias的区别

ServerName与ServerAlias的区别
EN

Server Fault用户
提问于 2012-08-15 14:46:48
回答 4查看 91.2K关注 0票数 39

我不太清楚ServerName和ServerAlias之间的区别。看起来它们都是作为主机名设置工作的,只不过ServerAlias只在标记中工作。

也就是说,我可以:

代码语言:javascript
复制
ServerName www.domain1.com
ServerName www.domain2.com

或者:

代码语言:javascript
复制
<VirtualHost *:80>
ServerName www.domain1.com
ServerName www.domain2.com
</VirtualHost>

两个域都在同一个框上工作。在这种情况下,我可以使用ServerName或ServerAlias吗?

EN

回答 4

Server Fault用户

回答已采纳

发布于 2012-08-15 14:50:39

ServerName指令是

服务器用来标识自身的主机名和端口。

ServerAlias

将请求与名称匹配时使用的主机的备用名称-虚拟主机

给定配置如下的vhost

代码语言:javascript
复制
 ...
 ServerName example.com
 ServerAlias www.example.com foo.example.com *.somewherelse.org
 ...

apache会对example.comwww.example.com foo.example.com.somewherelse.org中的任何东西使用这个VirtualHost做出响应。

票数 41
EN

Server Fault用户

发布于 2013-03-07 13:02:49

我通过实验(基于必要性)发现的一个关键区别是,当与通配符子域(例如"*.mycompany.com“和"*.mycompany.net")一起使用时,通配符必须指定为ServerAlias而不是ServerName。

我还没有在非SSL中尝试过这一点,但是对于SSL来说,情况就是这样(对我来说)。我确定了以下的配置:

代码语言:javascript
复制
Listen *:8443    
NameVirtualHost *:8443
SSLStrictSNIVHostCheck off

<VirtualHost *:8443>
    ServerName mycompany.com
    ServerAlias *.mycompany.com
    ...
</VirtualHost>

<VirtualHost *:8443>
    ServerName mycompany.net
    ServerAlias *.mycompany.net
    ...
</VirtualHost>

当使用"ServerName *.mycompany.net“时,总是使用第一个虚拟主机。这不仅仅是证书,它还重写和代理逻辑。

这完全有可能只在SSL中发生,因为还有大量其他事情在进行--正如使用SNI的虚拟主机SSL和许多ServerFault线程所引用的那样。在遵循了这些建议之后,这是最后一个令人头晕目眩的方面。

我来到这条线上,试图理解自己为什么会有差异,并承认我变得更近了,但并不完全理解。

在我的例子中,ServerName似乎做得更少(不是在虚拟主机搜索中获得),而不是更多。

按照Iain的建议运行"apacectl -S _ httpd -S“:

代码语言:javascript
复制
wildcard NameVirtualHosts and _default_ servers:
*:8443                 is a NameVirtualHost
         default server mycompany.com (/etc/httpd/conf/httpd.conf:1100)
         port 8443 namevhost mycompany.com (/etc/httpd/conf/httpd.conf:1100)
                 wild alias *.mycompany.com
         port 8443 namevhost mycompany.net (/etc/httpd/conf/httpd.conf:1164)
                 wild alias *.mycompany.net

编辑:(为完整性添加ServerName和通配符)

代码语言:javascript
复制
wildcard NameVirtualHosts and _default_ servers:
*:8443                 is a NameVirtualHost
         default server *.mycompany.com (/etc/httpd/conf/httpd.conf:1040)
         port 8443 namevhost *.mycompany.com (/etc/httpd/conf/httpd.conf:1040)
         port 8443 namevhost *.mycompany.net (/etc/httpd/conf/httpd.conf:1105)

注意:别名行中的“野生”一词(在第一种情况下(使用ServerAlias) )来自apache,在第二行(使用ServerName)中没有显示--我怀疑这是很重要的。

此外,如果我将"ServerName“从第二个VirtualHost中删除,并按照建议使用”应该只有一个ServerName“的别名,那么请求就会丢失--似乎会自动重定向到"https://test.mycompany.net:8443”--因为(在我的例子中) 8443没有在外部显示(nat'd),那么它就失败了。是的,我知道这对443可能有用,但可能显示出其他事情正在发生。

所以,也许不是这个问题的答案,而是一些其他人为类似的设置而挣扎的文档。

票数 8
EN

Server Fault用户

发布于 2012-12-11 00:41:20

在处理软件时,通常只有一个事实是重要的。ServerName可以被认为是主机的“真实”规范名称。ServerAlias不是。

ServerName所做的一切都是ServerAlias做的,而且更多。作为一种最佳实践,只设置一个ServerName,因为应该只有一个“规范”任何东西。如果没有显式设置ServerName,则httpd将自行确定名称。

另一方面,ServerAlias只是一个别名,只能在VirtualHost上下文中使用。你想要多少就有多少。

如果站点是通过HTTPS提供的,那么服务器名应该匹配包含证书的名称之一。如果您的证书是为www.example.org创建的,但您的配置如下:

代码语言:javascript
复制
ServerName foo.example.org
ServerAlias www.example.org

然后Apache将发出以下错误的抱怨:

12月10日13:23:45 web1 httpd1234:警告 RSA服务器证书CommonName (CN) `www.example.org‘不匹配服务器名!?

票数 5
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/417810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档