一、反向代理的概念
什么是反向代理呢?其实,反向代理也就是通常所说的WEB服务器加速,它是一种通过在繁忙的WEB服务器和Internet之间增加一个高速的WEB缓冲服务器(即:WEB反向代理服务器)来降低实际的WEB服务器的负载。典型的结构如下图所示:
Web服务器加速(反向代理)是针对Web服务器提供加速功能的。它作为代理Cache,但并不针对浏览器用户,而针对一台或多台特定Web服务器(这也是反向代理名称的由来)。实施反向代理(如上图所示),只要将Reverse Proxy Cache设备放置在一台或多台Web服务器前端即可。当互联网用户访问某个WEB服务器时,通过DNS服务器解析后的IP地址是Reve
rse Proxy Server的IP地址,而非原始Web服务器的IP地址,这时Reverse Proxy Server设备充当Web服务器,浏览器可以与它连接,无需再直接与Web服务器相连。因此,大量Web服务工作量被卸载到反向代理服务上。不但能够防止外部网主机直接和web服务器直接通信带来的安全隐患,而且能够很大程度上减轻web服务器的负担,提高访问速度。
二、反向代理工作原理
反向代理服务器位于本地WEB服务器和Internet之间,如下图所示:
当用户浏览器发出一个HTTP请求时,通过域名解析将请求定向到反向代理服务器(如果要实现多个WEB服务器的反向代
理,需要将多个WEB服务器的域名都指向反向代理服务器)。由反向代理服务器处理器请求。反向代理一般只缓存可缓冲的数据(比如html网页和图片等),而一些CGI脚本程序或者ASP之类的程序不缓存。它根据从WEB服务器返回的HTTP头标记来缓冲静态页面
三、具体搭建过程
1、安装squid
引用
wget /Versions/v3/3.0/squid-3.0.
tar zxvf squid-3.0.
cd squid-3.0.STABLE15
./configure --prefix=/usr/local/squid \
--enable-dlmalloc \
--enable-gnuregex \
--enable-async-io \
--enable-removal-policies='heap,lru' \
--enable-delay-pools \
--enable-snmp \
--enable-storeio='ufs,aufs,null' \
--disable-wccp \
--enable-kill-parent-hack \
--disable-select \
--enable-auth=basic \
--with-aio \
--disable-ident-lookup \
-
-with-filedescriptors=102400 \
--enable-epoll \
--enable-linux-netfilter \
--enable-underscore \
--enable-arp-acl \
--enable-arp-acl \
--enable-cache-digests \
--enable-icmp \
--enable-large-cache-file \
--with-large-files \
--localstatedir=/var/squid \
-
-enable-stacktraces
make && make install
相关编译参数说明:
--prefix=/usr/local/squid
指定squid日志,二进制文件和配置文件的默认位置,squid会将var目录也放在这下面,在这个目录下面会有日志文件,日志文件通常会很大,因此建议将其放在较大的磁盘下面,你可以使用—localstatedir 选项。
--localstatedir=/bigdisk/var
指定var目录的安装位置
--enable-dlmalloc[=LIB]
在一些系统上,内建的内存分配机制(malloc)在使用squid时表现不尽人意。使用
--enable-dlmalloc选项将squid源代码包中的dlmalloc包编译和链接进来。假如你的系统中已安装dlmalloc,你能使用=LIB参数指定库的路径。请g.oswego.edu/dl/html/malloc.html更多关于dlmalloc的信息。
--enable-gnuregex
在访问控制列表和其他配置指令里,squid使用正则表达式作为匹配机制。GNU的正则表达式库包含在squid的源代码包里;它可以在没有内建正则表达式的操作系统中使用。./configure脚本侦察你系统中的正则表达式库,假如必要,它可以激活使用GNU正则表达式。如果因为某些理由,你想强制使用GNU正则表达式,你可以将这个选项加到./configure命令后。
--enable-async-io[=N_THREADS]
异步I/O是squid技术之一,用以提升存储性能。aufs模块使用大量的线程来执行磁盘I/O操作。该代码仅仅工作在linux和solaris系统中。=N_THREADS参数改变squid使用的线程数量。aufs 在多cup 系统上优势更为明显,设置的线程数量不要过多。squid默认根据缓存目录的数量,自动计算需要使用多少线程。
--enable-removal-policies='heap,lru'
排除策略是squid需要腾出空间给新的cache目标时,用以排除旧目标的机制。squid-2.5支持3个排除策略:最少近期使用(LRU),贪婪对偶大小(GDS),最少经常使用(LFU)。。LRU是默认的,它以双链表数据结构执行。
--enable-delay-pools
延时池是squid用于传输形状或带宽限制的技术。该池由大量的客户端IP地址组成。当来自这些客户端的请求处于cache丢失状态,他们的响应可能被人工延迟。
--enable-snmp
简单网络管理协议(SNMP)是监视网络设备和服务器的流行方法。该选项导致编译过程去编译所有的SNMP相关的代码,包括一个裁切版本的CMU SNMP库。
--enable-cachemgr -hostname[=hostname]
cachemgr是一个CGI程序,你能使用它来管理查询squid。默认cachemgr的hostname值是空的,但你能使用该选项来指定一个默认值
--enable-htcp
HTCP是超文本缓存协议--类似于ICP的内部缓存协议。
--enable-ssl
使用该选项赋予squid终止SSL/TLS连接的能力。注意这仅仅工作在web加速器中用以加速请求。--with-openssl[=DIR]
假如必要,你使用该选项来告诉squid到哪里到OpenSSL库或头文件。假如它们不在默认位置,在该选项后指定它们的父路径。例如: ./configure --enable-ssl --with-ssl=/opt/foo/openssl,在这个例子中,你的编译器将在/opt/foo/openssl/include目录中头文件,在/opt/foo/openssl/lib中库文件。
--enable-cache-digests
Cache消化是ICP的另一个替代,但有着截然不同的特性。
--enable-err-languages="Simplify_Chinese"
--enable-default-err-languages="Simplify_Chinese"
上面两个选项告诉Squid编入并使用简体中文错误信息。
squid支持定制错误消息,错误消息可以用多种语言报告。该选项指定复制到安装目录
($prefix/share/errors)的语言。假如你不使用该选项,所有可用语言被安装。想知道何种语言可用,请见源代码包里errors目录下的目录列表。
--enable-epoll:
使用epoll模型(只支持2.6内核)
--enable-linux-netfilter:
可以支持透明代理
--enable-underscore:
允许解析的URL中出现下划先,因为默认squid会认为带下划线的URL地址是非法的,并拒绝访问该地址。
--enable-arp-acl:
可以在规则设置中直接通过客户端的MAC地址进行管理,防止客户使用IP欺骗。
--disable-ident-lookups:
防止系统使用RFC931规定的身份识别方法。
--enable-cahce-digests:
加快请求时,检索缓存内容的速度。
-
-enable-icmp:
加入icmp支持。
--enable-kill-parent-hack:
关掉suqid的时候,要不要连同父进程一起关掉,这个当然要啦
--with-filedescriptors=102400:
设置squid可以同时打开的文件数,此参数比较重要
2、创建squid用户和组:
引用
useradd squid -M -c "Squid user" -d /dev/null -s /sbin/nologin
3、配置squid
引用
rm -f /usr/local/squid/f
vi /usr/local/squid/f
使用以下内容:
引用
cache_effective_user squid
cache_effective_group squid
visible_st
http_port 80 accel vhost vport
cache_st parent 8080 0 no-query originserver
acl all src
http_access allow all
cache_log /var/squid/logs/cache.log
acl QueryString url_regex \.php?
no_cache deny QueryString
maximum_object_size 10240 KB
maximum_object_size_in_memory 512 KB
参数说明:
cache_effective_user
cache_effective_group
表明运行squid进程的用户和组都为squid
visible_hostname
squid服务器的名称,没有这项服务启动不了
http_port 80 accel vhost vport
表明squid监听本机80端口加速web访问,后面的vhost和vport必须加
cache_st parent 8080 0 no-query originserver
设置真实服务器,上面的选项表明为加速st:8080端口的访问
acl all src
http_access allow all
cache_log /var/squid/logs/cache.log
acl QueryString url_regex \.php?
no_cache deny QueryString
访问控制与日志的存放位置,上面的选项表明允许所有的访问,日志存放于/var/squid/logs/,不缓存.php文件
maximum_object_size 10240 KB
最大缓存文件大小
maximum_object_size_in_memory 512 KB
内存中缓存文件大小
4、优化linux内核
linux内核的优化根据具体情况来定,其中比较重要的参数有:
p_max_tw_buckets = 6000
表示允许的最多timewait数量,这个值根据服务器的情况来定,不建议太高net.ipv4.ip_local_port_range = 1024    65000
允许tcp连接打开的端口范围,上面指定为1024-65000
参考优化参数:(将此参数插入到/f文件中)
引用
net.ipv4.ip_forward = 0
f.default.rp_filter = 1
f.default.accept_source_route = 0
正则匹配 链接 无域名的链接kernel.sysrq = 0
<_uses_pid = 1
p_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
p_max_tw_buckets = 6000
p_sack = 1
p_window_scaling = 1
p_rmem = 4096        8388608  16777216
p_wmem = 4096        8388608  16777216
p_max_orphans = 262144
p_max_syn_backlog = 262144
p_timestamps = 0
p_synack_retries = 2
p_syn_retries = 2
p_tw_recycle = 1
p_tw_reuse = 1
p_mem = 94500000 915000000 927000000
p_tw_recycle = 1
p_fin_timeout = 1
p_keepalive_time = 60
net.ipv4.ip_local_port_range = 1024    65000
运行命令使其生效:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。