一、工具準(zhǔn)備
動態(tài)撥號vps服務(wù)器: 我用的是91VPS的動態(tài)vps,2H0.5G內(nèi)存,11G硬盤,20G寬帶(一型機(jī)器),動態(tài)vps主要是運(yùn)行代理服務(wù),比較耗寬帶,通過撥號來更換IP,實(shí)現(xiàn)動態(tài)代理的效果
固定IP服務(wù)器:用的阿里云服務(wù)器,1核1G內(nèi)存,40G云盤,該服務(wù)器主要是實(shí)時(shí)獲取動態(tài)vps的IP,并對外提供接口,這些服務(wù)不怎么耗資源,該服務(wù)器還可以用來跑爬蟲或者搭網(wǎng)站
二、環(huán)境搭建
撥號VPS
-
功能:搭建代理服務(wù),并通過在vps上撥號切換IP,將切換后的IP傳到固定IP的服務(wù)器上
-
工具:代理服務(wù)-tinyproxy, 發(fā)送IP-python的requests庫
-
系統(tǒng):91VPS的可以預(yù)裝系統(tǒng),我選的是CentOS7.6系統(tǒng),在管理后臺進(jìn)行操作
-
連接服務(wù)器:ssh user@ip -p port
-
撥號操作:斷開網(wǎng)絡(luò):adsl-stop, 撥號:adsl-start
-
查看公網(wǎng)IP:curl icanhazip.com
-
加代理查看IP:curl -x ‘ip:port’ -v icanhazip.com
-
判斷IP是否變化:先查看公網(wǎng)IP,然后斷開連接,重新?lián)芴?,再看下公網(wǎng)IP,如果發(fā)現(xiàn)沒有變化,可以多試幾次,有幾率重播后公網(wǎng)IP依舊沒變
1、代理服務(wù)搭建:tinyproxy
安裝命令:
-
# 添加EPEL倉庫,然后更新yum源:
-
sudo yum install epel-release
-
sudo yum update
-
# 安裝
-
sudo yum install -y tinyproxy
修改配置:
-
vim /etc/tinyproxy/tinyproxy.conf
-
修改 Port 端口,默認(rèn)為 8888
-
Port 8888
-
注釋掉 Allow 127.0.0.1,表示允許所有人訪問代理
啟動服務(wù):service tinyproxy start
日志:/var/log/tinyproxy/tinyproxy.log
本地測試:curl -x ‘ip:port’ -v icanhazip.com
配置以上過程中,注意事項(xiàng):
-
一定要確認(rèn)撥號vps服務(wù)器是有公網(wǎng)ip(外網(wǎng)ip),很多服務(wù)商提供的機(jī)器部分地區(qū)是內(nèi)網(wǎng)IP(如果是在機(jī)器內(nèi)部,可以正常使用,但搭建代理以后,無法訪問外部的網(wǎng)站),所以,一定要確認(rèn)清楚。
-
yum安裝時(shí),報(bào)錯(cuò):yum doesn’t have enough cached data to continue, 解決辦法:
-
將/etc/yum.repos.d/epel.repo中的mirrorlist改為baseurl
-
/etc/resolv.conf文件中增加 nameserver 144.144.144.144
-
在斷開重播時(shí),有時(shí)adsl-start會執(zhí)行失敗,報(bào)錯(cuò):“/usr/sbin/adsl-start: line 217: 5749 Terminated C O N N E C T " CONNECT " CONNECT"@" > /dev/null 2>&1”,最后發(fā)現(xiàn)可能是斷開連接的不干凈,多執(zhí)行幾次adsl-stop,在執(zhí)行adsl-start就會成功了
-
在代理服務(wù)tinyproxy運(yùn)行期間,報(bào)過這個(gè)錯(cuò):Waiting servers (0) is less than MinSpareServers (5). Creating new child.,原因是達(dá)到最大連接數(shù),無法創(chuàng)建新的連接處理請求,代理服務(wù)也就掛了,重啟代理服務(wù)即可,解決辦法
-
vim /etc/tinyproxy/tinyproxy.conf
-
MaxClients 100 -> 500 # 最大連接數(shù)
-
Timeout 600 -> 20 # 超時(shí)時(shí)間
2、搭建Python環(huán)境
(1) 安裝Python Python依賴
-
sudo yum install yum-utils
-
sudo yum-builddep python
Python源碼連接:https://www.python.org/ftp/python/
-
curl -O https://www.python.org/ftp/python/3.5.0/Python-3.5.0.tgz
我在用curl時(shí)無法下載,可以到官網(wǎng)下載指定版本的Python,然后傳到服務(wù)器上
-
tar xf Python-3.5.0.tgz
-
cd Python-3.5.0
-
./configure
-
make
-
sudo make install
安裝完成后通過python3 -V來查看當(dāng)前版本
(2) 安裝虛擬環(huán)境
-
cd ~
-
mkdir venv
-
cd venv
-
python3 -m venv python3-forcrawl
-
source ~/venv/python3-forcrawl/bin/activate
(3) 安裝相應(yīng)的python庫
-
pip install requests
-
# 安裝其他環(huán)境導(dǎo)出的庫
-
pip install -r requirements.txt
阿里云服務(wù)器:
-
功能:接受動態(tài)VPS發(fā)送的IP,并提供接口,返回動態(tài)VPS實(shí)時(shí)的IP&端口
-
工具:web服務(wù)-tornado
-
連接:ssh root@ip -p 22, 如果忘記服務(wù)器密碼,可以重置實(shí)例登陸密碼和遠(yuǎn)程連接密碼:更多->密碼、密鑰
-
搭建Python環(huán)境同上,安裝tornado
-
pip install tornado
-
sudo yum install -y redis
-
# 啟動服務(wù)
-
redis-server >> /dev/null 2>&1 &
-
# 連接redis
-
redis-cli
-
mongo數(shù)據(jù)庫(可以不進(jìn)行安裝,實(shí)現(xiàn)基本的代理功能不需要該庫)
-
# yum中沒有mongo的下載源,需要手動添加
-
vi /etc/yum.repos.d/mongodb-org-3.4.repo
-
# 寫入以下信息,針對centos7
-
[mongodb-org-3.4]
-
name=MongoDB Repository
-
baseurl=https://repo.mongodb.org/yum/redhat/7/mongodb-org/3.4/x86_64/
-
gpgcheck=1
-
enabled=1
-
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
-
# 安裝
-
sudo yum install -y mongodb-org
-
啟動:
-
systemctl start mongod.service
注意事項(xiàng):
-
ssh鏈接時(shí),報(bào)錯(cuò)Permission denied (publickey,gssapi-keyex,gssapi-with-mic),解決辦法:
-
通過阿里云web終端登錄到服務(wù)器,修改ssh配置文件
-
vim /etc/ssh/sshd_config
-
更改:PasswordAuthentication no(默認(rèn)yes)
-
或打開注釋:PermitRootLogin yes
代碼實(shí)現(xiàn)邏輯
1、客戶端:撥號VPS
-
通過Python執(zhí)行斷開連接&撥號的操作,成功后匹配獲取公網(wǎng)IP,通過requests庫將IP發(fā)送至服務(wù)端
-
為了避免惡意干擾,可以加上一個(gè)傳輸秘鑰,服務(wù)器驗(yàn)證傳輸秘鑰,驗(yàn)證失敗的不進(jìn)行IP更新
-
設(shè)置定時(shí)任務(wù)來實(shí)現(xiàn)IP的更換
-
傳送的數(shù)據(jù)中,包含IP、秘鑰、name(區(qū)分vps服務(wù)器)
2、服務(wù)端:固定IP服務(wù)器
使用tornado啟動服務(wù),提供兩個(gè)接口
-
post接口:接收客戶端發(fā)送的IP,驗(yàn)證秘鑰成功后,以name為key,ip&port為val,存入redis
-
get接口:從redis中取出ip&port并返回
代理檢測程序:可用于檢測IP的可用性,剔除失效IP
最后總結(jié):
1,自主搭建的http代理ip池,相比直接購買的代理ip,價(jià)格便宜,最主要的點(diǎn)是IP速度,并發(fā)等不受任何限制。
2,不適用于對IP切換速度要求很快的服務(wù),撥號太頻繁了,一個(gè)是IP有時(shí)不變,另一個(gè)容易撥號失敗
3,撥號vps在每次撥號的過程中,會出現(xiàn)一個(gè)寬帶連接等待的時(shí)長(無網(wǎng)狀態(tài)),那么,此時(shí)會導(dǎo)致代理不可用,所以,在線上正式的環(huán)境中,我們建議多部署一些機(jī)器,做到一定的冗余,就能完美的解決這個(gè)問題。