为同一个 VirtualHosts 声明多个端口

use*_*567 39 configuration port virtualhost apache-2.2

为同一个 VirtualHosts 声明多个端口:

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>
Run Code Online (Sandbox Code Playgroud)

如何为“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>
Run Code Online (Sandbox Code Playgroud)

小智 70

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

如果您希望同一个虚拟主机侦听多个端口,那么您可以这样做:

Listen 80
NameVirtualHost *:80

Listen 8080    
NameVirtualHost *:8080

<VirtualHost *:80 *:8080>
  ServerName some.domain.name
  ServerAlias some.other.domain.name
  ....
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

一般而言,您不会定义多个相同域名的基于名称的 VirtualHost,除非您需要使用不同的协议。

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

  • +1 也是,对于 SSL,它应该是 &lt;VirtualHost *:80 *:443&gt; (4认同)
  • +1 但一些小的更正:SSL 证书*不*绑定到 IP 地址,而是绑定到必须等于 **主机名** 的通用名称 (CN)。此外,使用 SNI 扩展,可以在同一 IP 地址上拥有多个具有不同证书的虚拟主机。(http://en.wikipedia.org/wiki/Server_Name_Indication) (2认同)