squid 代理服务器
他可以帮客户端去访问网站提高客户端访问的速度,工作方式如下:
客户端发起上网的请求
代理服务器首先检查自己的缓存有没有这个网站的数据,
如果有直接取出数据反馈给客户端
如果没有则替客户端访问网站反馈给客户端并将网站数据保留一份到自己的缓存
下次客户端访问同样的网站,代理服务器继续查缓存
如果有就直接拿缓存数据反馈给客户端,没有则继续替客户端访问并保存一份数据到自己的缓存。
其中又分为传统代理与透明代理。
传统代理需要客户端在浏览器上指定代理服务器的ip比较麻烦。
透明代理不需要在浏览器指定,需要将网关设为代理服务器。
透明代理:
解包进包
[root@zhang 桌面]# tar zxf squid-3.4.6.tar.gz
[root@zhang 桌面]# ls
./configure --prefix=/usr/local/squid --sysconfdir=/etc--enable-arp-acl --enable-linux-netfilter --enable-linux-tproxy--enable-async-io=100 --enable-err-language="Simplify_Chinese"--enable-underscore --enable-poll --enable-gnuregex
如果想了解每个参数请看下面:
--enable-underscore:允许解析的URL中出现下划线,因为默认情况下Squid会认为带下划线的URL是 非法的,并拒绝访问该地址
--enable-async-io:异步I/O可以用来提升存储性能。aufs模块使用大量的线程来执行磁盘I/O操作,N_THREADS参数改变Squid使用的线程数量。
--enable-async-io选项等同于如下三个选项:
--with-pthreads:在编译过程中链接到系统的P线程库,aufs存储模块是Squid中唯一需要使用线程的部分。
--with-aufs-threads=N_THREADS:指定aufs存储机制使用的线程数量。Squid会根据cache目录的数量,自动计算需要使用多少线程。
--enable-storeio=ufs,aufs,diskd,coss, null:告诉Squid编译时使用哪个存储模块,源码中/src/fs下面有所有可用的存储模块
--enable-linux-netfilter:使用内核过滤,目的是对透明模式提供支持
--enable-linux-tproxy:允许使用透明模式
--enable-poll:使用poll()函数,提升性能,poll函数用于监测多个等待事件,若事件未发生,进程睡眠,放弃CPU控制权,若监测的任何一个事件发生,poll将唤醒睡眠的进程,并判断是什么等待事件发生,执行相应的操作
--enable-gnuregex:允许规则中使用GNU正则表达式
make&& make install
ln -s /usr/local/squid/sbin/* /usr/local/sbin/ #方便使用squid的命令
useradd -M -s /sbin/nologin squid #创个用户
chown -R squid:squid /usr/local/squid/var/ #把日志文件权属主和属组给squid
squid -k parse #可以检查语法
squid –kreconfigure #重载
squid -z # 初始化缓存目录
squid #启动
这里用squid -k parse 检查了一下语法 发现报错
/etc/squid.conf
报错原因如下
无法确定公共主机名 #解决 配置文件添加
visible_hostname ZHANG
缓存文件没有写入权限 #解决 添加一下两条
cache_effective_user squid
cache_effective_group squid检测没问题就可以开启了
开启后在浏览器设置代理服务器
然后访问就可以了
如果发现访问不了
删了配置文件这三行
或者添加
http_access deny !localnet
就可以了。
访问成功。
web的访问日志可以看到是squid 服务器的ip 来访问的网站。
透明代理:
透明代理不需要再浏览器输入代理服务器的ip
将网关设置成代理服务器就可以。
方法如下。
在代理服务器添加一个网卡 这里的环境是
web vmnet1 192.168.43.60
squid vmnet1 192.168.43.66 vmnet2 192.168.1.2
clietn vmnet2 192.168.1.3
其实都一个网段也可以。 如果想简单做做可以跳过下面添加网卡
添加过网卡 虚拟机还是 一个ip需要去添加网卡文件 复制原来的eth
好了。
squid配置文件里有一行是http_port3128 改为
http_port192.168.1.2:3128 transparent
防火墙重定向策略,来自192.168.1.0的网络重定向到3128端口 一个是80端口的一个是443的
iptables -tnat -I PREROUTING -i eth1 -s 192.168.1.0/24 -p tcp --dport 80 -j REDIRECT --to3128
iptables -tnat -I PREROUTING -i eth1 -s 192.168.1.0/24 -p tcp --dport 443 -j REDIRECT --to3128
serviceiptables save 保存防火墙策略
重启squid
这里把之前浏览器上的代理服务器删掉 并清除浏览器缓存
网关设置为squid的ip
发如果现访问不了
有以下解决方法
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
service iptables save
添加防火墙策略并应用允许3128端口通过 然后重启squid
代理服务器不具备域名解析功能 请在客户端设置好dns 或者写好hosts文件。
透明代理访问成功。
希望可以帮到大家 谢谢。