爬蟲代理的作用
在我們的爬蟲系統(tǒng)中私股,如果在一臺服務(wù)器上不停的訪問通一個目標(biāo)站點,很有可能因為對方的發(fā)爬蟲策略而將您的爬蟲請求給阻止,導(dǎo)致您無法獲取網(wǎng)站的信息酸纲。所以我們一般采用一個代理池的方式,不停的切換代理瑟匆,將爬蟲的請求偽裝成為不同代理發(fā)起的闽坡,從而避開這種問題。這里以 centos7 和 squid 為例介紹如何建立一個 http 或者 https 的代理服務(wù)器愁溜。
軟件安裝
該軟件需要使用 openssl 組件疾嗅,所以如果沒有安裝請執(zhí)行如下命令進行安裝
yum install openssl
首先檢查是否已經(jīng)安裝了 squid 軟件。執(zhí)行如下的命令
rpm -qa squid
如果顯示 package squid is not installed 則表示沒有安裝冕象,否則會顯示具體的安裝包信息代承。如果沒有安裝,則執(zhí)行安裝命令如下
yum install -y squid*
結(jié)束后渐扮,再執(zhí)行檢查命令论悴,則顯示結(jié)果如下
[root@localhost ~]# rpm -qa squid
squid-3.5.20-12.el7.x86_64
軟件配置
squid 的配置文件默認是 /etc/squid/squid.conf 文件掖棉。默認情況下,squid 只允許有限幾個內(nèi)網(wǎng)地址段來訪問膀估。所以我們在的 acl localcal 部分加入如下的內(nèi)容:
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl localnet src 0.0.0.0/20
上面一行是原來有的幔亥,下面一個行是我們先加入的。然后我們改一下默認的端口號
#http_port 3128
http_port 5872
最后修改一下訪問日志配置
coredump_dir /var/spool/squid
access_log /var/log/squid/access.log
下面一行設(shè)置了訪問日志的文件為 /var/log/squid/access.log
啟動服務(wù)
首先需要在防火墻中開放剛才配置的端口 5872 察纯。執(zhí)行如下命令
firewall-cmd --zone=public --add-port=5872/tcp --permanent
firewall-cmd --reload
這個命將 5872 端口加入到防火墻的開發(fā)端口列表中持久化保存帕棉,并且重新載入防火墻策略,讓其生效
然后執(zhí)行命令啟動
systemctl start squid
啟動后饼记,我們執(zhí)行命令命令
[root@localhost ~]# netstat -lnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1689/master
tcp 0 0 0.0.0.0:15678 0.0.0.0:* LISTEN 20050/sshd
tcp6 0 0 :::5872 :::* LISTEN 27903/(squid-1)
可以看到笤昨,squid 服務(wù)已經(jīng)在端口 5872 上開始監(jiān)聽了
使用和監(jiān)控
已 chrome 為例。打開 chrome “設(shè)置菜單”握恳,在底部展開“高級”瞒窒,在底部找到“打開代理設(shè)置”菜單,在對話框中點擊“局域網(wǎng)設(shè)置”按鈕乡洼,在新出現(xiàn)的界面中輸入代理服務(wù)器的設(shè)置崇裁。如下圖所示
確定后,就可以在瀏覽器中使用代理服務(wù)器來訪問網(wǎng)絡(luò)了束昵。為了看到效果拔稳,我們在瀏覽器上訪問《不一樣的 Java 日期格式化大全》 這篇文章,同時對代理服務(wù)器的訪問日志進行監(jiān)控锹雏,看到日志輸出如下
[root@localhost ~]# tail -f /var/log/squid/access.log
1543289079.273 16467 192.168.1.60 TCP_TUNNEL/200 3687 CONNECT upload-images.jianshu.io:443 - HIER_DIRECT/61.156.196.84 -
1543289079.274 16715 192.168.1.60 TCP_TUNNEL/200 152 CONNECT upload.jianshu.io:443 - HIER_DIRECT/150.138.176.244 -
1543289079.274 16667 192.168.1.60 TCP_TUNNEL/200 4159 CONNECT upload.jianshu.io:443 - HIER_DIRECT/150.138.176.244 -
1543289079.524 0 192.168.1.60 TCP_DENIED/403 4085 CONNECT events.jianshu.io:4006 - HIER_NONE/- text/html
1543289081.664 0 192.168.1.60 TCP_DENIED/403 4085 CONNECT events.jianshu.io:4006 - HIER_NONE/- text/html
1543289082.433 0 192.168.1.60 TCP_DENIED/403 4085 CONNECT events.jianshu.io:4006 - HIER_NONE/- text/html
1543289097.966 35623 192.168.1.60 TCP_TUNNEL/200 55584 CONNECT upload-images.jianshu.io:443 - HIER_DIRECT/61.156.196.84 -
1543289097.991 35259 192.168.1.60 TCP_TUNNEL/200 16029 CONNECT upload-images.jianshu.io:443 - HIER_DIRECT/61.156.196.84 -
1543289099.311 60913 192.168.1.60 TAG_NONE/503 0 CONNECT clients4.google.com:443 - HIER_NONE/- -
1543289100.321 38894 192.168.1.60 TCP_TUNNEL/200 23165 CONNECT upload.jianshu.io:443 - HIER_DIRECT/150.138.176.244 -
1543289109.312 47056 192.168.1.60 TCP_TUNNEL/200 10707 CONNECT upload.jianshu.io:443 - HIER_DIRECT/150.138.176.244 -
可以看到巴比,是通過代理服務(wù)器的轉(zhuǎn)發(fā)來訪問的目標(biāo)網(wǎng)站。
代理服務(wù)器鑒權(quán)
上面的代理服務(wù)器如果是在公網(wǎng)上提供服務(wù)的礁遵,那么所有人都能使用這個代理服務(wù)轻绞。如果我們想加入鑒權(quán)機制對這個進行限制,則需要增加其他配置佣耐。這里我們采用用戶名和密碼的鑒權(quán)方式政勃,具體方法如下。
首先用 apache 的密碼工具生成用戶密碼兼砖,如果沒有的話需要先安裝 httpd 軟件
yum install httpd
然后生成密碼奸远。
[root@localhost ~]# htpasswd -c /etc/squid/passwd youname
New password:
Re-type new password:
Adding password for user youname
如果沒有 htpasswd 命令,則安裝 apache
yum install -y httpd
在 http_access deny all 語句之前讽挟,加入如下的配置內(nèi)容
cache_dir ufs /var/spool/squid 100 16 256
cache_mem 128 MB
maximum_object_size 128 MB
cache_dir ufs /var/spool/squid 100 16 256
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd
auth_param basic children 5
auth_param basic realm your message
auth_param basic credentialsttl 5 hours
acl ncsa_users proxy_auth REQUIRED
http_access allow ncsa_users
然后重啟