一些浏览器在设置代理的时候,会看到多个选项,包括 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
欢迎分享你的看法,也欢迎补充不同的实践经验。