禁用 IP 的 Apache 虚拟主机,但不禁用(子)域

禁用 IP 的 Apache 虚拟主机,但不禁用(子)域

我配置了一个域和两个子域,并重定向到相应的 https 版本:

<VirtualHost *:80>
  ServerName domain.com
  Redirect permanent / https://domain.com
</VirtualHost>

<VirtualHost *:80>
  ServerName a.domain.com
  Redirect permanent / https://a.domain.com
</VirtualHost>

<VirtualHost *:80>
  ServerName b.domain.com
  Redirect permanent / https://b.domain.com
</VirtualHost>

现在,我做一些测试:

curl http://domain.com/ gives me the redirect to https://domain.com/
curl http://a.domain.com/ gives me the redirect to https://a.domain.com/
curl http://b.domain.com/ gives me the redirect to https://b.domain.com/

太棒了。最后一个测试,只使用 IP (abcd):

curl http://a.b.c.d/ gives me the redirect to https://a.domain.com/

它采用来自域名的重定向a.domain.com

如果用户请求,是否有任何更改可以禁用 HTTP/HTTPS http://a.b.c.d/?目前,我添加了一个重定向到主域,其中 HTTPS 版本具有自签名证书(因为它只是 IP):

<VirtualHost *:80>
  Redirect permanent / https://domain.com
</VirtualHost>

<VirtualHost *:443>
  SSLEngine ON
  SSLCertificateFile /etc/httpd/ssl/apache.crt
  SSLCertificateKeyFile /etc/httpd/ssl/apache.key

  Redirect permanent / https://domain.com
</VirtualHost>

答案1

您可以创建一个默认虚拟主机,ServerName而无需重定向到任何特定的虚拟主机。据我所知,这就是您想要的。Apache 默认使用配置文件中找到的第一个指令,因此直接将-less 虚拟主机放入(或在您的系统上调用的任何内容)VirtualHost就足够了。ServerNamehttpd.conf

答案2

在命名的 VirtualHost 中:

<VirtualHost *:80>
  ServerName example.com
  Redirect permanent / https://example.com
</VirtualHost>

<VirtualHost *:443>
  ServerName example.com
    SSLEngine On
    ###other directives below
</VirtualHost>

这将始终/强制将用户从http://example.comhttps://example.com

如果您希望用户可以选择使用 HTTP 或 HTTPS,请同时提供两种配置。不要重定向。

<VirtualHost *:80>
  ServerName example.com
  ###other directives below
</VirtualHost>

<VirtualHost *:443>
  ServerName example.com
    SSLEngine On
    ###other directives below
</VirtualHost>

对于基于 IP 的配置,如果您仅在端口 80 上运行一个站点,在端口 443 上运行一个站点,则上述设置仍然有效。

<VirtualHost 192.168.1.100:80>
  ###other directives below
</VirtualHost>

<VirtualHost 192.168.1.100:443>
    SSLEngine On
    ###other directives below
</VirtualHost>

相关内容