数字营销 · Web开发 · 基础设施

HTTP代理和HTTPS代理的区别

通过 Nginx 和 Apache 搭建代理服务器并进行实际测试,分析 HTTP 代理和 HTTPS 代理的区别。

一些浏览器在设置代理的时候,会看到多个选项,包括 HTTP 代理、HTTPS 代理、FTP 代理、SOCKS 代理等。那么,它们之间到底有什么区别呢?为了寻找它们之间的区别,我专门做了一个实验。用 Nginx 搭建 HTTP 代理服务器,用 Apache 搭建 HTTPS 代理服务器,然后在 Chrome 中分别设置不同类型的代理,观察通过代理访问网站时实际使用的 IP。

HTTP代理

首先搭建 HTTP 代理。在 Nginx 下可以使用:

server {
listen 8080;
resolver 8.8.8.8;
location / {
proxy_pass http://$http_host$request_uri;
}
}

然后在 Chrome 中设置 HTTP 代理。首先访问 HTTP 网站,发现网站看到的 IP 是代理服务器的 IP。再使用同样的 HTTP 代理访问 HTTPS 网站,发现网站看到的仍然是本机 IP。也就是说:

HTTP 代理,只代理 HTTP 网站,对于 HTTPS 网站则不通过这个代理。

HTTPS代理

由于 Nginx 不支持 CONNECT 方法,所以不能直接使用 Nginx 来搭建这种 HTTPS 代理服务器。于是使用 Apache 来代替。搭建 HTTPS 代理需要:

mod_proxy.so
mod_proxy_connect.so

并在 Apache 的配置文件中启用相应模块。然后去掉:

ProxyRequests on

前面的注释,重新启动 httpd 服务。这样,HTTPS 代理服务器就配置完成了。然后分别通过这个 HTTPS 代理访问 HTTP 和 HTTPS 网站。

测试发现:

访问 HTTPS 网站时,网站看到的是代理服务器的 IP;

访问 HTTP 网站时,仍然使用本机 IP。

也就是说:

HTTPS 代理,只代理 HTTPS 网站,HTTP 网站则走正常线路。

对所有协议使用相同的代理

当然,在浏览器的代理设置中,还有一个选项:

对所有协议均使用相同的代理服务器。

当启用这个选项之后,浏览器支持的 HTTP、HTTPS、FTP 等协议,都可以通过同一个代理服务器进行访问。当然,前提是:

代理服务器本身需要支持相应的协议。

通过这次实际测试,可以比较直观地看到,不同代理设置对应的实际使用范围并不相同。

评论0

欢迎分享你的看法,也欢迎补充不同的实践经验。