代理服务器:
由于部分网络的限制,禁止访问github或者速度很慢,可以通过代理解决这一问题.
即: 通过代理服务器转发http请求,绕过网络限制.
常用的开源代理软件:
常用开源代理软件有tinyproxy, squid, Privoxy等5种
Squid代理服务器的搭建
-
环境
服务器为阿里云服务器, 系统为Ubuntu18.04 LTS
-
安装squid
先检查是否已安装squid,如果已安装,则会提示squid路径
root@iZbp19avc72hef0pmt4u02Z:~# which squid
root@iZbp19avc72hef0pmt4u02Z:~#
安装squid
root@iZbp19avc72hef0pmt4u02Z:~# apt-get install squid -y
-
修改squid的配置文件
编辑squid配置文件
root@iZbp19avc72hef0pmt4u02Z:~# sudo vim /etc/squid/squid.conf
使用/进入搜索模式, 搜索http_access deny all并注释掉
# http_access deny all
shift+g切到配置文件尾端,追加如下配置信息
dns_nameservers 8.8.8.8
http_port 8000
http_access allow all
cache_mem 60 MB
-
启动squid代理
首次启动squid需要创建交换目录
root@iZbp19avc72hef0pmt4u02Z:~# cd /usr/sbin/
root@iZbp19avc72hef0pmt4u02Z:/usr/sbin# ./squid -z
启动squid代理
root@iZbp19avc72hef0pmt4u02Z:/usr/sbin# ./squid
然后去阿里云服务器安全组放行代理服务器端口(配置文件中追加的8000端口)
-
代理服务测试
客户机直接获取ip,结果为:
客户机使用代理:
再次获取ip,结果为:
此时说明代理成功.
-
停止squid代理:
首次创建交换目录之后, 后续重启squid代理无需再次创建交换目录
root@iZbp19avc72hef0pmt4u02Z:/usr/sbin# ./squid -k shutdown
使用Docker搭建squid代理服务器
- ######拉取squid镜像
先搜索一下docker hub上的squid镜像
root@iZbp19avc72hef0pmt4u02Z:~# docker search --filter stars=50 squid
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
sameersbn/squid 183 [OK]
squidfunk/mkdocs-material A Material Design theme for MkDocs 54 [OK]
root@iZbp19avc72hef0pmt4u02Z:~#
拉取一个镜像, 此处拉取指定版本的镜像
root@iZbp19avc72hef0pmt4u02Z:~# docker pull sameersbn/squid:3.3.8-14
......
root@iZbp19avc72hef0pmt4u02Z:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myblog v3.0.3 1ba5ed2d545a 29 hours ago 231MB
portainer latest ff4ee4caaa23 3 weeks ago 81.6MB
redis latest dcf9ec9265e0 5 weeks ago 98.2MB
mysql 8 d435eee2caa5 5 weeks ago 456MB
logstash 7.3.1 1c5964893183 4 months ago 841MB
kibana 7.3.1 b54865ba6b0b 4 months ago 1.01GB
elasticsearch 7.3.1 3d3aa92f641f 4 months ago 807MB
livingobjects/jre8 latest 16e881b54ec0 3 years ago 128MB
sameersbn/squid 3.3.8-14 b51686290574 3 years ago 214MB
-
创建并运行squid容器
先停止宿主机的squid服务:
root@iZbp19avc72hef0pmt4u02Z:~# systemctl stop squid.service
创建squid容器
由于squid镜像暴露的端口号为3128, 因此端口要映射到容器的3128端口
root@iZbp19avc72hef0pmt4u02Z:~# docker run -d -p 8000:3128 --name squid sameersbn/squid:3.3.8-14
......
root@iZbp19avc72hef0pmt4u02Z:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5cdb090ba055 sameersbn/squid:3.3.8-14 "/sbin/entrypoint.sh" 3 seconds ago Up 3 seconds 0.0.0.0:8000->3128/tcp squid
-
修改squid容器中的配置文件
先停止squid容器:
root@iZbp19avc72hef0pmt4u02Z:~# docker stop 5c
先复制一份宿主机的squid配置文件
root@iZbp19avc72hef0pmt4u02Z:/java/squid# ls
squid.conf
root@iZbp19avc72hef0pmt4u02Z:/java/squid# vim squid.conf
编辑复制的squid配置文件
dns_nameservers 8.8.8.8
# 修改要暴露的端口号为3128, 与squid镜像要暴露的端口一致
http_port 3128
http_access allow all
cache_mem 60 MB
使用/进入搜索模式, 搜索http_access deny all并注释掉
# http_access deny all
直接复制此配置文件到squid容器中:
root@iZbp19avc72hef0pmt4u02Z:/java/squid# docker cp squid.conf squid:/etc/squid3/squid.conf
启动容器:
root@iZbp19avc72hef0pmt4u02Z:/java/squid# docker start 5c
-
代理测试
此时squid代理容器已经启动, 并映射到宿主机的8000端口, 宿主机的squid代理完全可以卸载掉.
客户机使用代理:
再次获取ip,结果为:
此时说明代理成功.
-
针对arm版本的docker引擎
由于x86和arm指令集的不同, 在arm架构的CPU上无法直接使用x86的容器, 否则无法启动容器, 在容器日志中可以看到指令集报错信息.
可以通过squid在github上的项目重新构建镜像
docker build -t sameersbn/squid github.com/sameersbn/docker-squid