声明同一虚拟主机的多个端口


35

声明同一虚拟主机的多个端口:

SSLStrictSNIVHostCheck off
# Apache setup which will listen for and accept SSL connections on port 443.
Listen 443
# Listen for virtual host requests on all IP addresses
NameVirtualHost *:443

<VirtualHost *:443>
  ServerName domain.localhost
  DocumentRoot "/Users/<my_user_name>/Sites/domain/public"
  <Directory "/Users/<my_user_name>/Sites/domain/public">
    Order allow,deny
    Allow from all
  </Directory>

  # SSL Configuration
  SSLEngine on
  ...
</VirtualHost>

如何为“ domain.localhost”声明一个新端口(“ listen”,ServerName等)?

如果我添加以下代码,则apache也可以对“ domain.localhost”的所有其他子域(subdomain1.domain.localhost,subdomain2.domain.localhost等)起作用(太多):

<VirtualHost *:80>
  ServerName pjtmain.localhost:80
  DocumentRoot "/Users/Toto85/Sites/pjtmain/public"
  RackEnv development
  <Directory "/Users/Toto85/Sites/pjtmain/public">
    Order allow,deny
    Allow from all
  </Directory>
</VirtualHost>

3
只是要注意。您不能将https和非https虚拟主机合并为一个。<VirtualHost *:80 *:443>。80不能启用“ SSLEngine”。对于SSL和非SSL,必须具有2个单独的VirtualHost声明。
加塞克2014年

Answers:


63

这个问题有些模棱两可,但我会尽力提供帮助。

如果您希望同一个虚拟主机在多个端口上进行侦听,请执行以下操作:

Listen 80
NameVirtualHost *:80

Listen 8080    
NameVirtualHost *:8080

<VirtualHost *:80 *:8080>
  ServerName some.domain.name
  ServerAlias some.other.domain.name
  ....
</VirtualHost>

一般来说,除非您需要使用不同的协议,否则您不会定义多个具有相同域名的基于名称的虚拟主机。

对于基于SSL名称的虚拟主机,您必须格外小心:根据定义,同一IP:Port上不能有多个证书,因此,为避免证书错误,它必须是通配符证书,覆盖所有服务的域名。


2
+1,但需要一些更正:SSL证书与IP地址绑定,而是与必须等于主机名的公用名(CN)绑定。同样,通过SNI扩展,可以在同一IP地址上拥有多个具有不同证书的虚拟主机。(en.wikipedia.org/wiki/Server_Name_Indication
丹尼尔Rikowski

3
也是+1,对于SSL,它应该是<VirtualHost *:80 *:443>
fedmich 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.