我不太清楚ServerName和ServerAlias之间的区别。看起来它们都是作为主机名设置工作的,只不过ServerAlias只在标记中工作。
也就是说,我可以:
ServerName www.domain1.com
ServerName www.domain2.com或者:
<VirtualHost *:80>
ServerName www.domain1.com
ServerName www.domain2.com
</VirtualHost>两个域都在同一个框上工作。在这种情况下,我可以使用ServerName或ServerAlias吗?
发布于 2012-08-15 14:50:39
ServerName指令是
服务器用来标识自身的主机名和端口。
而ServerAlias是
将请求与名称匹配时使用的主机的备用名称-虚拟主机
给定配置如下的vhost
...
ServerName example.com
ServerAlias www.example.com foo.example.com *.somewherelse.org
...apache会对example.com、www.example.com foo.example.com和.somewherelse.org中的任何东西使用这个VirtualHost做出响应。
发布于 2013-03-07 13:02:49
我通过实验(基于必要性)发现的一个关键区别是,当与通配符子域(例如"*.mycompany.com“和"*.mycompany.net")一起使用时,通配符必须指定为ServerAlias而不是ServerName。
我还没有在非SSL中尝试过这一点,但是对于SSL来说,情况就是这样(对我来说)。我确定了以下的配置:
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“:
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和通配符)
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可能有用,但可能显示出其他事情正在发生。
所以,也许不是这个问题的答案,而是一些其他人为类似的设置而挣扎的文档。
发布于 2012-12-11 00:41:20
在处理软件时,通常只有一个事实是重要的。ServerName可以被认为是主机的“真实”规范名称。ServerAlias不是。
ServerName所做的一切都是ServerAlias做的,而且更多。作为一种最佳实践,只设置一个ServerName,因为应该只有一个“规范”任何东西。如果没有显式设置ServerName,则httpd将自行确定名称。
另一方面,ServerAlias只是一个别名,只能在VirtualHost上下文中使用。你想要多少就有多少。
如果站点是通过HTTPS提供的,那么服务器名应该匹配包含证书的名称之一。如果您的证书是为www.example.org创建的,但您的配置如下:
ServerName foo.example.org
ServerAlias www.example.org然后Apache将发出以下错误的抱怨:
12月10日13:23:45 web1 httpd1234:警告 RSA服务器证书CommonName (CN) `www.example.org‘不匹配服务器名!?
https://serverfault.com/questions/417810
复制相似问题