|
公司一网站未做登陆校验,用户均可以游客身份浏览网页下载附件。无奈,网站内有部分资源被迅雷盗链,深受p2p下载所害,带宽被占,正常用户都无法访问。服务器是tomcat,后研究了一下,采用如下解决方案:
采用Apache Http与tomcat集成,Apache Http处理静态软件资源,tomcat处理动态。在Apache Http配置方面做手脚,限速、限IP。步骤如下(从网上搜集修改整理如下):
一、apache整合Tomcat
1.我是用的是Apache2.2的proxy-ajp(只有2.1及其以后版本才有),整合比较简单。也可以使用mod_jk,但我配置了一天也没弄好。 找到apache 安装目录 下conf 下的文件:httpd.conf。
2.先把apache和tomcat都停止了。然后打开httpd.conf文件,把
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
前面的#号去掉,在文件最后添加
#不转发的目录
ProxyPass /images/ !
#正向代理
ProxyPass / ajp://127.0.0.1:8009/
#反向代理
ProxyPassReverse / ajp://127.0.0.1:8009/
3.最后测试整合后的apache+tomcat,启动apache,再启动tomcat,准备以下代码的jsp文件,以便测试。
<%@ page contentType="text/html;charset=gb2312" %>
<HTML>
<HEAD>
<TITLE>JSP测试页面</TITLE>
</HEAD>
<BODY>
<%out.println("<h1>Hello World! </h1>");%>
</BODY>
</HTML>
保存为test.jsp ,在D:tomcat5.5webappsROOT下新建一个文件夹myjsp,并把test.jsp放在里面。
在IE中输入http://localhost:8080/myjsp/test.jsp ,再输入http://localhost/myjsp/test.jsp .如果两次都显示Hello World!说明已经成功整合了。
二、利用apache 限制一个IP可以打开的线程数,能防止第三方软件的多线程下载。注意:此功能不能正确区分公用IP的情况,不建议使用。
需要用到mod_limitipconn为非官方组件,处于应用层。请到 http://dominia.org/djao/limitipconn2.html 下载相应版本。httpd.conf 中添加:
LoadModule limitipconn_module modules/mod_limitipconn.dll
ExtendedStatus On
<IfModule mod_limitipconn.c>
<Location /> #需要控制的路径,相对于网站根目录
MaxConnPerIP 3 #限制的线程数
NoIPLimit image/* #对图片文件不做限制 如果仅限制某几种文件请用以下语句,本语句就不要
OnlyIPLimit audio/mpeg video/* application/x-rar #只对音频视频文件,自定义 minetype文件起作用
</Location>
</IfModule>
a、mod_status一定要加载,且httpd.conf中的ExtendedStatus选项要打开。
b、如果要限制特定目录,请使用如下格式:
<Location />
# global per-directory settings here
<Location /somewhere>
# local per-directory settings here
</Location>
</Location>
c、若使用了mod_cache模块,则mod_limitipconn对特定目录的限制无效,只能通过全局参数来限制。
d、对连接数的限制是针对所有IP的,不能针对个别IP进行限制。
e、如果有客户端的超过了限制,则会报503错误。
f、 可以将超过连接数的访问记录到access.log中。
三、利用apache +多个Tomcat 做负载均衡和集群。
1.apache tomcat 简单负载均衡。apache负责处理静态内容,Tomcat负责处理动态内容,httpd.conf 中添加:
ProxyPass /adres/ !
ProxyPass /tebluestand/ !
ProxyPass /tebluestand_20091224/ !
ProxyPass /teredpassion/ !
ProxyPass /teres/ !
ProxyPass / ajp://127.0.0.1:8069/
ProxyPassReverse / ajp://127.0.0.1:8069/
2.Apache开启Gzip和Expires提升网页加载速度
在Apache的配置文件中找到下面两行,将注释#去掉,重启。
LoadModule deflate_module modules/mod_deflate.so
LoadModule expires_module modules/mod_expires.so
在你网站的目录下新建.htaccess,添加如下内容:
LoadModule expires_module modules/mod_expires.so
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/x-icon "access plus 1 month"
ExpiresByType application/x-javascript "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
ExpiresByType text/css "access plus 1 month"
</IfModule>
<IfModule mod_deflate.c>
SetOutputFilter DEFLATE
AddOutputFilterByType DEFLATE text/html text/css image/gif image/jpeg image/png application/x-javascript
</IfModule>
解释一下。ExpiresByType 是通过MIME类型来设置具体文件的缓存时间,A表示访问,A后面的数字表示访问后的缓存时间。AddOutputFilterByType表示根据后面的MIME类型来压缩文件,这里对css,html,gif,jpeg,png,JavaScript等进行gzip压缩。更多选项请参考apache手册哦。
关闭ETag。Etag的问题在于,它是根据可以辨别网站所在的服务器的具有唯一性的属性来生成的。当浏览器从一台服务器上获得页面内容后到另外一台服务器上进行验证时ETag就会不匹配,这种情况对于使用服务器组和处理请求的网站来说是非常常见的。在配置文件中写入下面一行即可:
FileETag none
如果是多服务器负载均衡,可以设置为FileETag MTime Size,apache默认设置为FileETag INode MTime Size,去掉INode。
经过上面的设置,即可开启压缩和缓寸
3.apache图片加载不上
在配置文件中加上EnableSendfile off
四、安全与性能推荐配置
#### 貌似安全相关
#仅当一个请求映射到一个真实存在的路径时才会被接受
#AcceptPathInfo Off
#禁止URL中使用经过编码的路径分割符
#AllowEncodedSlashes Off
#指定内部重定向和嵌套子请求的最大数量(至少是5)
#LimitInternalRecursion 10
#限制客户端发送的HTTP请求体的最大字节长度(1.2M)
#LimitRequestBody 1300000
#限制基于XML的请求体的最大字节长度(1.2M)
#LimitXMLRequestBody 1300000
#<IfModule mpm_prefork_module>
#限制Apache子进程派生的进程占用CPU的最大秒数
#RLimitCPU 1 1
#限制由Apache子进程派生的进程占用的最大内存字节数
#RLimitMEM 1 1
#限制由Apache子进程派生的进程所派生的进程数目
# RLimitNPROC 0 1
#</IfModule>
#禁止生成服务器端生成文档的页脚
ServerSignature Off
#### 性能相关
#在递送中使用内存映射来读取文件(某些情况下需要禁用)
EnableMMAP On
#使用操作系统内核的sendfile支持来将文件发送到客户端
EnableSendfile On
#禁用对客户端IP的DNS查找
HostnameLookups Off
#持久链接(禁用)
KeepAlive Off
KeepAliveTimeout 1
五 apache限速配置
1.下载 mod_bw.dll 文件,注意对应apache版本,放到目录下:Apache Software Foundation\Apache2.2\modules
2.相关配置
1、确定是否有以下两句,如果有,如上面的安装是成功的,如果没有请手动添加试试(
不一定完成相同)
LoadModule limitipconn_module modules/mod_limitipconn.dll
LoadModule bw_module modules/mod_bw.dll
2、找到ExtendedStatus On,如果前面有#号的话要把#号去掉,如果没有这个选项需要自己手工添加
3、配置限速,添加以下语句,配置限速,可根据控制的范围放在全局域或放在虚拟主机域
#这个 module 预设是关闭的,要将他开启才能够使用
BandwidthModule On
#这个 module 预设不会过滤每个需求,如果您开启他,他将处理过滤每个需求
ForceBandWidthModule On
#最大带宽,这个有两个参数。第一个是限制来源的位置,也就是该位置受限制。他可以是完整的 hostname、网域名称或 IP。可搭配遮罩使用,例如 192.168.0.0/24 or 192.168.0.0/255.255.255.0,all代表所有 。另一个参数是限制的速率,以 bytes 每秒为单位;假如为 0,则不受限制。
Bandwidth all 10000 #限速10K
#最小带宽,一般不限制,以下为不限制
MinBandwidth all -1
#大文件下载限制,顾名思义,这设定是专门用来限制大型档案的。第一个参数是指文件名,可以使用 * 代表全部。也可使用 .rar 等,
第二个参数单位是 kbyte,只要超过这个 Size 就被规范在这个设定的限速中,最后一个参数就是被限制的速率,单位是byte/s。
LargeFileLimit * 500 10240 #500kb 10kb/s
4、保存httpd.conf,重启httpd,一切OK。 |
|
|