在本地设置Apache虚拟主机时,哪些值适用于ServerName?

iaqfqrcu  于 2023-01-05  发布在  Apache
关注(0)|答案(3)|浏览(119)

我目前正在为一些需要在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?我必须全部使用小写字符等?

wb1gzix0

wb1gzix01#

您可以使用任何您想要的本地域名称。请参阅文档。

服务器名Apache

ServerName [scheme://]fully-qualified-domain-name[:port]

The ServerName directive sets the request scheme, hostname and port 
thatthe server uses to identify itself. This is used when creating
redirection URLs.
sgtfey8w

sgtfey8w2#

您可以使用任何有效的FQDN-https://en.wikipedia.org/wiki/Fully_qualified_domain_name
将该名称也放入/etc/hosts中,并使其使用127.0.0.1。
PS:编一个要么不存在于外界,甚至未来打算网站

    • 编辑**

/etc/hosts中的线路

127.0.0.1 example.com

然后

ServerName example.com

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

kzmpq1sx

kzmpq1sx3#

ServerName设置有两个用途:
1.与<VirtualHost>声明中的端口沿着,帮助Apache根据传入的Host:请求标头将请求与虚拟主机匹配。如果Host:标头的内容与虚拟主机的ServerNameServerAlias之一匹配,则将使用虚拟主机来处理请求。并且请求到达<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意义上),因此它们应该不区分大小写。

相关问题