前言
买了三年的腾讯cmv在4月14日到期了,于是斥资99元全款拿下了一个Hong Kong区域的vps,选择这个区域节点的原因就是想测试一下openai的接口,于是乎就在vps搭建了一个代理服务。
最后搭建了两个代理服务,一个是socks5代理,一个是http代理。本来dante搭建了一个socks5代理,在python已经测试成功了。
proxies = {
'http': f'socks5h://{proxy_username}:{proxy_password}@{proxy_host}:{proxy_port}',
'https': f'socks5h://{proxy_username}:{proxy_password}@{proxy_host}:{proxy_port}'
}
添加socks5代理之后进行测试:
然后就想在Chrome中也测试一下吧,然后我就根据在网上的步骤进行了设置。
配置socks5
我使用的MacBook,网上一共给出了两种方案,第一个是在网络偏好设置中设置。
然后在chrome访问任何网页,都出现该网站可能移动到其他网址类似的提示,说白了就是访问不到,此时我还没有意识到问题的严重性,于是我就换了第二种方案,下载Proxy SwitchyOmega插件。
开始鼓捣SwitchyOmega是凌晨一点多,不知道是心累还是真困了,刚开始没有看到浏览器不支持socks5代理的提示,就是一直连不上....最后又换了FireFox浏览器,FireFox更过分!!socks5没有用户名、密码的输入框,还得从自定义配置搜....耽误了半个小时,反正是没成功。
期间分析了socks5代理服务器的日志,在python中使用代理的时候,可以看到访问的成功信息,使用浏览器的时候,日志blocked by higher-level socks-rule #0: no rules matched; using default block rule,关键这个日志是INFO级别的,也看不出什么。
快凌晨三点的时候,我还研究了半个小时dante的规则配置,该尝试修改的都修改了,github仓库和网上相关的资料也不多,所以放弃了chrome使用socks5的想法,于是就乖乖搭建了一个http代理服务器。
搭建HTTP代理
搭建HTTP代理的选择有很多,我这里选择的是Nginx。
正向代理
在大学刚接触web的时候就用到了Nginx,那时候一个反向代理的概念让我理解了好久,而今天要搭建的HTTP代理,是一个正向代理。这里再来回顾一下正向和反向的区别。
我在浏览器上加了一个IP代理,在浏览器输入百度的URL,然后成功访问了百度,这个IP代理就是正向代理,因为我们知道我用这个IP要访问什么网站(百度)。
百度作为一个很大的搜索引擎,想要支撑全国的搜索需求,肯定会使用很多服务器,然后通过区域或者负载均衡来均分搜索请求。所以说,我们访问www.baidu.com的时候,百度的网关服务器会随机将我们的请求转发到某一台服务器,但是具体哪一台我们是不知道的,我们只知道访问了百度。百度的网关服务器就是反向代理。
代理配置
在下载、编译好nginx之后,在nginx.conf中添加http代理的配置。
server {
listen 8848;
server_name 122.91.xx.xx;
resolver 114.114.114.114;
proxy_connect;
proxy_connect_allow 443 80;
location / {
proxy_pass $scheme://$host$request_uri;
proxy_set_header Host $http_host;
proxy_buffers 256 4k;
proxy_max_temp_file_size 0;
proxy_connect_timeout 30;
}
}
在nginx.conf中增加一个server节点来监听8848端口,其中server_name是vps公网IP,proxy_pass通过变量设置,来解析并转发我们接收到的请求到目标网站。
proxy_connect是很重要的一个配置,可以将客户端的TCP连接转发到另一台服务器,建立源地址与目的地址之间的直接TCP连接,实现TCP级别的代理转发。Nginx自带的proxy模块只支持HTTP代理,不支持TCP代理。
同时如果想要代理HTTPS请求,也必须配置proxy_connect,请求建立到目标服务器的SSL/TLS连接。使用此配置需要安装ngx_http_proxy_connect_module模块。
其他就是一些常规配置,启动nginx进行测试。
使用代理
在我的笔记本上使用curl -x指定代理进行测试,返回的ip是vps的代理。
在chrome浏览器中设置代理,访问网站。
从nginx后台日志可以看到请求代理信息。
结语
使用nginx也可以搭建https代理,但是需要域名申请SSL证书,尝试未果,放弃。除此之外,在新的vps上安装nginx也遇到了一些问题,下一篇将会整理遇到的问题及解决方案。