Apache允许HTTP访问时应该重定向到 HTTPS

分享于 

4分钟阅读

互联网

 

问题:

我想我会遵循接受的智能转向 HTTPS,但今天跟随DNS问题,而不是 URL。

Apache.conf:


<VirtualHost *:80>


 ServerName 127.0.0.1



 DocumentRoot/var/www/web


</VirtualHost>



<VirtualHost _default_:443>


 ServerName example.com



 DocumentRoot/var/www/web


 SSLEngine On


 SSLCertificateFile/etc/ssl/local_certs/example.com.pem


 SSLCertificateKeyFile/etc/ssl/local_certs/example.com.pem.key


 Header set Access-Control-Allow-Origin"*"


</VirtualHost>



<VirtualHost *:80>


 ServerName example.com



 Redirect permanent"/""https://example.com/"


</VirtualHost> 



考虑到 上面,我对几个点感到困惑:

1 ) 如果我们现在使用的是IP地址,为什么任何 上面 服务器的虚拟主机都是为页面服务的? 如果当前使用的IP地址与域 NAME ( 应该是,但今天它没有,DNS问题) 相对应,这将使我更少。

2 ) 给出的IP地址不是 127.0.0.1,为什么我在端口 80上允许访问?

为了解释 127.0.0.1 主机,这对于本地apt存储库来说是方便的。 我知道ServerName不是 100%安全的,但这不是一个立即关注的问题。

当我通过IP浏览站点时,会发生什么情况:

在第一个实例中,我被重定向到同一个IP地址上的HTTPS,这是。 但是,如果我返回浏览器中的地址栏,并将","导航到端口 80上的页面,我就可以继续浏览。

I out-of-the-box的站点配置文件仍然存在,但是这些文件的文档 root 不包含默认的apache目标页面,它不是我所提供的。


回答 1:

引用文档:

如果在包含最具体匹配IP地址和端口组合的虚拟主机集中找不到匹配的ServerName或者 ServerAlias,则将要使用的第1 个虚拟主机收费为1.

( 突出显示不是我)。

换句话说,Apache总是使用一个 VirtualHosts,即使没有完全配置的VirtualHosts MATCHES。 不配置地址并不意味着地址不是服务器的某些内容。

我发现这个问题是用 apache-2.2 标记的,但是 2.2文档中包含了一个实际上相同的段落( 实际上是同一个段落)。


回答 2:

2 ) 给出的IP地址不是 127.0.0.1,为什么我在端口 80上允许访问?

因为你不将 Apache httpd绑定到环回接口,并且侦听所有接口。

在 httpd.conf的中可能有一个 Listen 80 指令,允许Apache接受所有接口上端口 80的流量。 ( 你可能希望继续将它的从互联网上的HTTP转到facing网站( s ) )。

另外,在虚拟主机定义中使用 <VirtualHost *:80>。 这使得它们在所有接口/ip地址上都有效。 就像Gerald已经解释了,然后将第一个VirtualHost条目makes默认that处理所有请求,而这些请求不是你的其他虚拟设备条目的MATCH。

你的用例是在何时使用更具体的ip基本定义的例子,这些定义可以按照你的方式使用:


<VirtualHost 127.0.0.1:80>


 ServerName 127.0.0.1


 DocumentRoot/var/www/web


</VirtualHost>



<VirtualHost example.com:80>


 ServerName example.com


 Redirect permanent"/""https://example.com/"


</VirtualHost> 





acc  HTTP  RED  Apache  Https  Redirect  
相关文章