我目前正在为一些需要在localhost上开发的网站设置Apache虚拟主机,使用以下配置(更新/etc/hosts
文件后),我可以通过在Web浏览器中转到example.com
来访问存储在/var/www/example.com/public_html
上的内容:
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/example.com/public_html
...
</VirtualHost>
- 我的问题:**
是否有为ServerName
选择值的规则?例如,我使用的值必须是域名(如ServerName example.com
),或者我可以省略.com
扩展名而仅使用ServerName example
?我必须全部使用小写字符等?
3条答案
按热度按时间wb1gzix01#
您可以使用任何您想要的本地域名称。请参阅文档。
服务器名Apache
sgtfey8w2#
您可以使用任何有效的FQDN-https://en.wikipedia.org/wiki/Fully_qualified_domain_name。
将该名称也放入
/etc/hosts
中,并使其使用127.0.0.1。PS:编一个要么不存在于外界,甚至未来打算网站
/etc/hosts中的线路
然后
This will make example.com be on your local machine. Ideal for development. When done all you need to do (assuming example.com has a CNAME) is remove the line from /etc/hosts. You can even do the development off line
kzmpq1sx3#
ServerName
设置有两个用途:1.与
<VirtualHost>
声明中的端口沿着,帮助Apache根据传入的Host:
请求标头将请求与虚拟主机匹配。如果Host:
标头的内容与虚拟主机的ServerName
或ServerAlias
之一匹配,则将使用虚拟主机来处理请求。并且请求到达<VirtualHost>
声明中指定的端口。(如果HTTP动词后面是完整的URL而不是仅仅是路径,例如GET http://example.com/index.html HTTP/1.1
,则URL的主机名部分也可以用于虚拟主机匹配,而不仅仅是Host
标头。)如果与任何虚拟主机都不匹配,则会提供默认虚拟主机。默认值是配置中首先出现的虚拟主机。只要您可以让客户机a)与您的服务器完全对话,B)在它们对话时将相同的字符串放在Hosts:
标头中,任何服务器名对于该服务器名的这种使用都是“有效的”,但第二个服务器名不是:1.根据
UseCanonicalName
的值,在生成重定向时,ServerName
将用于传出的Location:
响应标头中。(如果UseCanonicalName
关闭,则Location
标头将引用客户端在发出请求时使用的相同主机名。)Location:
标头必须包含有效的absolute URI、这完全排除了ServerNames的任意字符串(但是只使用“example”而不使用“.com”在技术上是可以的,只要您的客户能够理解这是一个完全限定的域名,并且不应该尝试进一步的限定,例如从域搜索列表中附加后缀)。虽然您实际上可以使用几乎任何字符串作为ServerName,但它可能只对您所关心的客户机在与您的服务器通信时实际使用的ServerName有用;也就是说,当客户端使用它们用来将名称转换为IP地址的任何机制(在几乎所有情况下,如果第一次查找失败,则将是
/etc/hosts
后跟DNS)查找您的服务器名称时,它们应该看到可以到达您的服务器的IP。(服务器名称也可以是IP地址本身。)由于ServerNames被视为域名(在DNS意义上),因此它们应该不区分大小写。