代理
科普
-
正向代理 对服务端来说是无感的,服务端无需配置,要在客户端指定。代理的是客户端。
- 访问原来无法访问的资源
- 用作缓存,加速访问速度
- 对客户端访问授权,上网进行认证
- 代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息
-
反向代理 对客户端来说的无感的,客户端无需配置,要在服务端实现。代理的是服务端。
- 保护内网安全
- 负载均衡
- 缓存,减少服务器的压力
-
透明代理 与正向代理相同,但是客户端无需指定
透明代理服务器阻断网络通信,并且过滤出访问外部的HTTP(80端口)流量。如果客户端的请求在本地有缓冲则将缓冲的数据直接发给用户,如果在本地没有缓冲则向远程web服务器发出请求, 其余操作和正向代理服务器完全相同。对于linux操作系统来说,透明代理使用Iptables或者Ipchains实现。因此不需要对浏览器作任何设置,所以,透明代理对于ISP(Internet服务器提供商)特别有用。
应用 squid
docker-compose.yaml
version: '2'
services:
squid3:
image: sameersbn/squid:3.3.8-14
ports:
- 3128:3128
volumes:
- /etc/squid3/squid.conf:/etc/squid3/squid.conf
- /var/log/squid3://var/log/squid3
- /var/spool/squid3:/var/spool/squid3
restart: always
container_name: squid3
/etc/squid3/squid.conf
acl Safe_ports port 80 # http
acl Safe_ports port 443 # https
acl CONNECT method CONNECT
cache_dir ufs /var/spool/squid3 100 16 256
http_access allow all
http_port 3128
visible_hostname proxy
#ufs:缓存数据的存储格式 #/var/spool/squid 缓存目录 #100:缓存目录占磁盘空间大小(M) #16:缓存空间一级子目录个数 #256:缓存空间二级子目录个数
客户端使用配置
Environment=HTTP_PROXY={SERVER_IP}:3128
Environment=HTTPS_PROXY={SERVER_IP}:3128
示例
curl -x "https://SERVER_IP:3128" -LO https://lang-python.s3.amazonaws.com/heroku-16/runtimes/python-3.7.0.tar.gz
ll /var/spool/squid3
drwxr-x--- 258 13 13 8192 10月 31 11:39 00
drwxr-x--- 258 13 13 8192 10月 31 11:39 01
drwxr-x--- 258 13 13 8192 10月 31 11:39 02
drwxr-x--- 258 13 13 8192 10月 31 11:39 03
drwxr-x--- 258 13 13 8192 10月 31 11:39 0F
....
-rw-r----- 1 13 13 72 10月 31 11:39 swap.state
Varnish VS squid
varnish
- Varnish 可以认为是内存缓存,速度一流,但是内存缓存也限制了其容量,缓存页面和图片一般是挺好的;
- varnish本身的技术上优势要高于squid,它采用了“Visual Page Cache”技术,在内存的利用上,Varnish比Squid具有优势,它避免了Squid频繁在内存、磁盘中交换文件,性能要比Squid高。
- varnish是不能cache到本地硬盘上的。
- Varnish可以使用正则表达式快速、批量地清除部分缓存
- varnish的内存管理完全交给内核,当缓存内容超过内存阈值时,内核会自动将一部分缓存存入swap中让出内存。以挪威一家报社的经验,1台varnish可以抵6台squid的性能。
- varnish用来做网站和小文件的缓存,相当给力的,做图片cache之类的合适
- varnish没有专门的存储引擎
squid
- squid是功能最全面的比较传统的web cache server,有自己的存储引擎。,但是架构太老,性能不怎样。
- squid可以用于缓存更多更大的内容,属于专业用语缓存的功能,比如尤其适合缓存图片、文档等;
- squid可以说是越俎代庖自己实现了一套内存页/磁盘页的管理系统,但这个虚拟内存swap其实linux内核已经可以做得很好,squid的多此一举反而影响了性能
- squid支持正向代理缓存,而这方面varnish、nginx cache做不到