apache

.htaccess常用设置

.htaccess 文件 (Hypertext Access file) 是Apache Web服务器的一个非常强大的配置文件,对于这个文件,Apache有一堆参数可以让你配置出几乎随心所欲的能。.htaccess 配置文件坚持了Unix的一个文化——使用一个ASCII 的纯文本文件来配置你的网站的访问策略。

1. 创建自定义的出错页面

对于Linux Apache来说这是一项极其简单的事情。使用下面的.htaccess语法你可以轻松的完成这一功能。(把.htaccess放在你的网站根目录下)

 
ErrorDocument 401 /error/401.php
ErrorDocument 403 /error/403.php
ErrorDocument 404 /error/404.php
ErrorDocument 500 /error/500.php

2. 设置网站的时区

 
SetEnv TZ America/Houston

3. 阻止IP列表

有些时候,你需要以IP地址的方式阻止一些访问。无论是对于一个IP地址还是一个网段,这都是一件非常简单的事情,如下所示:

 
allow from all
deny from 145.186.14.122
deny from 210.10.56 #封禁210.10.56.0~210.10.56.255的所有IP地址

Apache对于被拒绝的IP会返回403错误。

4. 把一些老的链接转到新的链接上——搜索引擎优化SEO

 
Redirect 301 /iindex.php  http://www.njava.com

5. 为服务器管理员设置电子邮件。

 
ServerSignature EMail
SetEnv SERVER_ADMINdefault@domain.com

6. 使用.htaccess 访止盗链。

如果你网站上的一个图片被别的N多的网站引用了,那么,这很有可能会导致你服务器的性能下降,使用下面的代码可以保护某些热门的链接不被过多的引用。

 
Options +FollowSymlinks
# Protect Hotlinking
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?domainname.com/[nc]
RewriteRule .*.(gif|jpg|png)$http://www.someonename.com/Article/UploadFiles/200908/20090824122550889.png[nc]

7. 阻止 User Agent 的所有请求

 
## .htaccess Code :: BEGIN
## Block Bad Bots by user-Agent
SetEnvIfNoCase user-Agent ^FrontPage [NC,OR]
SetEnvIfNoCase user-Agent ^Java.* [NC,OR]
SetEnvIfNoCase user-Agent ^Microsoft.URL [NC,OR]
SetEnvIfNoCase user-Agent ^MSFrontPage [NC,OR]
SetEnvIfNoCase user-Agent ^Offline.Explorer [NC,OR]
SetEnvIfNoCase user-Agent ^[Ww]eb[Bb]andit [NC,OR]
SetEnvIfNoCase user-Agent ^Zeus [NC]

Order Allow,Deny
Allow from all
Deny from env=bad_bot

## .htaccess Code :: END

8. 把某些特殊的IP地址的请求重定向到别的站点

 
ErrorDocument 403http://www.youdomain.com
Order deny,allow
Deny from all
Allow from 124.34.48.165
Allow from 102.54.68.123

9. 直接找开文件而不是下载

通常,我们打开网上文件的时候总是会出现一个对话框问我们是下载还是直接打开,使用下面的设置就不会出现这个问题了,直接打开。

 
AddType application/octet-stream .pdf
AddType application/octet-stream .zip
AddType application/octet-stream .mov

10. 修改文件类型

下面的示例可以让任何的文件都成为PHP那么被服务器解释。比如:myphp, cgi,phtml等。

 
ForceType application/x-httpd-php
SetHandler application/x-httpd-php

11. 阻止存取.htaccess 文件

 
# secure htaccess file
order allow,deny
deny from all

12. 保护服务器上的文件被存取

 
# prevent access of a certain fileorder allow,deny
deny from all

13. 阻止目录浏览

 
# disable directory brow
sing
Options All -Indexes

14. 设置默认主页

 
# serve alternate default index page
DirectoryIndex about.html

15. 口令认证

你可以创建一个文件用于认证。下面是一个示例:

 
# to protect a file
AuthType Basic
AuthName “Prompt”
AuthUserFile /home/path/.htpasswd
Require valid-user

# password-protect a directory resides
AuthType basic
AuthName “This directory is protected”
AuthUserFile /home/path/.htpasswd
AuthGroupFile /dev/null
Require valid-user

16. 把老的域名转像新的域名

 
# redirect from old domain to new domain
RewriteEngine On
RewriteRule ^(.*)$http://www.yourdomain.com/$1[R=301,L]

Tags: , ,

星期四, 三月 11th, 2010 服务器 没有评论

apache DDos防范模块 mod_evasive

什么是mod_evasive?

mod_evasive is an evasive maneuvers module for Apache to provide evasive action in the event of an HTTP DoS or DDoS attack or brute force attack. It is also designed to be a detection and network management tool, and can be easily configured to talk to ipchains, firewalls, routers, and etcetera. mod_evasive presently reports abuses via email and syslog facilities.

Detection is performed by creating an internal dynamic hash table of IP Addresses and URIs, and denying any single IP address from any of the following:

  • Requesting the same page more than a few times per second
  • Making more than 50 concurrent requests on the same child per second
  • Making any requests while temporarily blacklisted (on a blocking list)

This method has worked well in both single-server script attacks as well as distributed attacks, but just like other evasive tools, is only as useful to the point of bandwidth and processor consumption (e.g. the amount of bandwidth and processor required to receive/process/respond to invalid requests), which is why it’s a good idea to integrate this with your firewalls and routers for maximum protection.

This module instantiates for each listener individually, and therefore has a built-in cleanup mechanism and scaling capabilities. Because of this per-child design, legitimate requests are never compromised (even from proxies and NAT addresses) but only scripted attacks. Even a user repeatedly clicking on ‘reload’ should not be affected unless they do it maliciously. mod_evasive is fully tweakable through the Apache configuration file, easy to incorporate into your web server, and easy to use.

官方网站:http://www.nuclearelephant.com/projects/mod_evasive/

原理

mod_evasive是apache防范DDOS攻击的模块,其原理大致如下:
有新访问到达时:

  • 查看黑名单中是否有该客户IP。
  • 将IP和请求URL一起HASH;查找HASH表看过去1秒是否连续请求同一页。
  • 将IP和请求URL一起HASH;查找HASH表看过去1秒是否请求超过50个连接。

满足任意一条就返回403并阻止该IP一定时间,该时间由DOSSiteInterval决定。

1、安装mod_evasive

bear@bear-laptop:~$ sudo apt-get install libapache2-mod-e
libapache2-mod-encoding  libapache2-mod-evasive
bear@bear-laptop:~$ sudo apt-get install libapache2-mod-evasive
[sudo] password for bear:
正在读取软件包列表… 完成
正在分析软件包的依赖关系树
正在读取状态信息… 完成
下列软件包是自动安装的并且现在不再被使用了:
linux-headers-2.6.31-14 linux-headers-2.6.31-14-generic
使用’apt-get autoremove’来删除它们
下列【新】软件包将被安装:
libapache2-mod-evasive
共升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 0 个软件未被升级。
需要下载 15.9kB 的软件包。
解压缩后会消耗掉 115kB 的额外空间。
获取:1 http://ubuntu.cn99.com karmic/universe libapache2-mod-evasive 1.10.1-1 [15.9kB]
下载 15.9kB,耗时 0 秒 (121kB/s)
选中了曾被取消选择的软件包 libapache2-mod-evasive。
(正在读取数据库 … 系统当前总共安装有 151313 个文件和目录。)
正在解压缩 libapache2-mod-evasive (从 …/libapache2-mod-evasive_1.10.1-1_amd64.deb) …
正在设置 libapache2-mod-evasive (1.10.1-1) …
* Reloading web server config apache2                                          apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1 for ServerName
[ OK ]

bear@bear-laptop:~$

2、配置mod_evasive

sudo vi /etc/apache/conf.d/mod_evasive

#添加以下:

<IfModule mod_evasive20.c>

DOSHashTableSize 3097:定义哈希表大小。

DOSSiteCount 50:允许客户机的最大并发连接。

DOSPageCount 2:允许客户机访问同一页的间隔。

DOSPageInterval 1:网页访问计数器间隔。

DOSSiteInterval 1:全站访问计数器间隔。

DOSSiteInterval 60:加入黑名单后拒绝访问时间。

DOSEmailNotify crdd1130@gmail.com:有IP加入黑名单后通知管理员。

DOSSystemCommand "sudo iptables -A INPUT -s %s -j DROP":IP加入黑名单后执行的系统命令。

DOSLogDir "/tmp":锁定机制临时目录。

DOSWhiteList 127.0.0.1:防范白名单,不阻止白名单IP。

</IfModule>


Tags: ,

星期四, 三月 11th, 2010 服务器 没有评论

查看Apache并发请求数及其TCP连接状态

# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves

StartServers     10
MinSpareServers   10
MaxSpareServers   15
ServerLimit     2000
MaxClients      2000
MaxRequestsPerChild 10000

查看httpd进程数(即prefork模式下Apache能够处理的并发请求数):

Linux命令:

ps -ef | grep httpd | wc -l

返回结果示例:

1388

表示Apache能够处理1388个并发请求,这个值Apache可根据负载情况自动调整,我这组服务器中每台的峰值曾达到过2002。

查看Apache的并发请求数及其TCP连接状态:

Linux命令:

netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’

(这条语句是从新浪互动社区事业部技术总监王老大那儿获得的,非常不错)

返回结果示例:

LAST_ACK 5

SYN_RECV 30

ESTABLISHED 1597

FIN_WAIT1 51

FIN_WAIT2 504

TIME_WAIT 1057

其中的SYN_RECV表示正在等待处理的请求数;ESTABLISHED表示正常数据传输状态;TIME_WAIT表示处理完毕,等待超时结束的请求数。

关于TCP状态的变迁,可以从下图形象地看出:

状态:描述

CLOSED:无连接是活动的或正在进行

LISTEN:服务器在等待进入呼叫

SYN_RECV:一个连接请求已经到达,等待确认

SYN_SENT:应用已经开始,打开一个连接

ESTABLISHED:正常数据传输状态

FIN_WAIT1:应用说它已经完成

FIN_WAIT2:另一边已同意释放

ITMED_WAIT:等待所有分组死掉

CLOSING:两边同时尝试关闭

TIME_WAIT:另一边已初始化一个释放

LAST_ACK:等待所有分组死掉

Tags: , ,

星期四, 三月 11th, 2010 服务器 没有评论

Apache缓存系统

Apache 从2.0开始就已经可以使用缓存模块了,不过在2.0的时候还是实验性的,到了2.2已经完全可以放心的使用。Apache 的缓存实现主要依靠 mod_cache、mod_disk_cache、mod_file_cache 及 mod_mem_cache。只需在配置编译的时候加上参数:–enable-cache、 –enable-disk-cache、–enable-file-cache、 –enable-mem-cache 即可。
关于 Apache 的编译安装本文就不再说了,可以参考以前的文章。这里主要介绍一下如何配置使用 Apache 的缓存功能。
具体来说,Apache 的缓存方式有两种,一种是基于硬盘文件的缓存,由 mod_disk_cache 实现,另一种是使用内存缓存,由 mod_mem_cache 实现,不过它们都是依赖 mod_cache 模块的,mod_cache 模块提供了一些缓存配置的指令供它们使用,而 mod_file_cache 模块是搭配 mod_mem_cache 模块使用的,下面分别进行介绍。
1、基于硬盘文件的缓存
基于硬盘文件存储的缓存由 mod_disk_cache 模块实现,先看个简单的配置例子:

CacheDefaultExpire 86400

CacheEnable disk /
CacheRoot /tmp/apacheCache
CacheDirLevels 5
CacheDirLength 5
CacheMaxFileSize 1048576
CacheMinFileSize 10

把上面的配置加到 Apache 的 httpd.conf 文件中,如果缓存相关的模块都已经编译进了 Apache 的核心,则无需加载模块,直接就能使用上面的指令。指令的详细说明如下:
CacheDefaultExpire: 设定缓存过期的时间(秒),默认是1小时,只有当缓存的文档没有设置过期时间或最后修改时间时这个指令才会生效
CacheEnable:启用缓存,第1个参数是缓存类弄,这里当然是 disk了,第2个参数是缓存路径,指的是 url 路径,这里是缓存所有的东西,直接写上“/”即可,如“/docs”则只缓存 /docs 下的所有文件
CacheRoot:缓存文件所在的目录,运行 Apache 的用户(如daemon 或 nobody)要能对其进行读写,如果不清楚的话可以直接设置成 777,请手动建立该目录并设置好访问权限
CacheDirLevels:缓存目录的深度,默认是3,这里设置为5
CacheDirLength:缓存目录名的字符长度,默认是4,这里设置为5
CacheMaxFileSize 和 CacheMaxFileSize:缓存文件的最大值和最小值(byte),当超过这个范围时将不再缓存,这里设置为 1M 和 10bytes
基于硬盘文件存储的文件基本上就这些内容,设置好后重启 Apache 应该就能使用了。一切正常的话,可以在缓存目录下看到 Apache 自动建立的一些目录和缓存的数据文件。
2、基于内存的缓存
基于内存的缓存主要由 mod_mem_cache 模块实现,还是看个简单的配置吧,这样比较直观:-)

CacheEnable mem /
MCacheMaxObjectCount 20000
MCacheMaxObjectSize 1048576
MCacheMaxStreamingBuffer 65536
MCacheMinObjectSize 10
MCacheRemovalAlgorithm GDSF
MCacheSize 131072

简单说一下上面一些指令的意思:
CacheEnable:启用缓存,使用基于内存的方式存储
MCacheMaxObjectCount:在内存中最多能存储缓存对象的个数,默认是1009,这里设置为20000
MCacheMaxObjectSize:单个缓存对象最大为 1M,默认是10000bytes
MCacheMaxStreamingBuffer:在缓冲区最多能够放置多少的将要被缓存对象的尺寸,这里设置为 65536,该值通常小于100000或 MCacheMaxObjectSize 设置的值
MCacheMinObjectSize:单个缓存对象最小为10bytes,默认为1bytes
MCacheRemovalAlgorithm:清除缓存所使用的算法,默认是 GDSF,还有一个是LRU,可以查一下 Apache 的官方文档,上面有些介绍
MCacheSize:缓存数据最多能使用的内存,单位是 kb,默认是100kb,这里设置为128M
保存重启 Apache 基于内存的缓存系统应该就能生效了,根据需要可以使基于内存的存储或硬盘文件的存储方式一起使用,只要指明不同的URL路径即可。
3、注意事项
使用缓存需要注意如下事项:
要使用缓存,必须使用指令 CacheEnable 启用它,目前可用的缓存类型为 disk 或 mem,禁止缓存可以使用 CacheDisable,如 CacheDisable /private
待缓存的 URL 返回的状态值必须为: 200、203、300、301 或 410
URL 的请求方式必须是 GET 方式
发送请求时,头部中包含 “Authorization: ”的字符串时,返回的内容将不会被缓存
URL 包含查询字符串,如问号?后的那些东西,除非返回的内容包含“Expires:”,否则不会被缓存
如果返回的状态值是 200,则返回的头部信息必须包含以下的一种才会被缓存:Etag、Last-Modified、Expires,除非设置了指令 CacheIgnoreNoLastMod On
如果返回内容的头部信息“Cache-Control:”中包含“private”,除非设置了指令 CacheStorePrivate On,否则不会被缓存
如果返回内容的头部信息“Cache-Control:”中包含“no-sotre”,除非设置了指令 CacheStoreNoStore On,否则不会被缓存
如果返回内容的头部信息“Vary:”中包含了“*”,不会被缓存
4、其它一些指令的介绍
如果你的网站有几个文件的访问非常频繁而又不经常变动,则可以在 Apache 启动的时候就把它们的内容缓存到内存中(当然要启用内存缓存系统),使用的是 mod_file_cache 模块,具体如下:
有多个文件可以用空格格开
MMapFile /var/www/html/index.html /var/www/html/articles/index.html
上面是缓存文件的内容到内存中,除此之外,还可以只缓存文件的打开句柄到内存中,当有请求进来的时候,Apache 直接从内存中获取文件的句柄,返回内容,和 MMapFile 指令很像,具体如下:
CacheFile /var/www/html/index.html /var/www/html/articles/index.html
上面两个指令所缓存的文件如果有修改的话,必须重启 Apache 或使用 graceful 之类的方式强制使 Apache 更新缓存数据,否则当用户访问的时候获取的不是最新的数据。
有时候需要根据某些特殊的头部信息来决定是否进行缓存,则可以使用如下指令:
当头部信息中包含 Set-Cookie 时则跳过不进行缓存操作
CacheIgnoreHeaders Set-Cookie
有时候需要缓存的时候跳过 URL 中的查询字符串?使用如下指令:
CacheIgnoreQueryString On
Apache 的缓存系统不仅可以缓存服务器本身的文件,也可以缓存通过代理得到的内容,对了,Apache 可以像 Squid 一样做代理,而且做的还不错,下篇文章就介绍一下 Apache 的代理功能吧。善用 Apache 的缓存功能,可以让你的网站速度提升不少。做为一个网站来说,虽然可用的各种缓存方案很多,但在 Web 服务器层做缓存的效率还是很值得一试的。

嗯 不过常用功能 nginx都有了 而且nginx效率更高
?nginx配合tomcat、resin等java应用服务器提供java支持
首先探讨一下为什么要使用nginx:

1、类似于apache+resin,nginx用于提供静态页面服务,比java服务器要强。虽然这些java服务器的性能都不赖,tomcat新版甚至还支持了epoll,但是用nginx来处理静态文件是一定比这些服务器更稳妥并更快速的。

2、nginx在配合java应用服务器时相比apache耦合度更低,所以它可以用相同的方式连上所有能支持http服务能力的java应用服 务器,无论是tomcat、resin、weblogic、jetty、websphere……,并且可以轻易地将一个应用同时连接不相同的服务器。譬如 一台跑tomcat,一台跑resin,这一点在切换或测试生产环境时非常有用。另外耦合度的降低,将使nginx和这些服务器之间的相互影响降到最低, 这样两者就能各尽其责,apache一般是采用一个模块来和java应用服务器打交道,这个模块是会对apache的运行或多或少产生影响的,nginx 告诉我们这些模块是多么的鸡肋,java服务器要不就往fastcgi协议支持方面发展会更好。

3、nginx的一些特性可以保住脆弱的java服务器。其中可以点名的:1是可细致定制的负载均衡策略;2是超强的故障屏蔽功能可以做到不遗漏任何一个请求;3是客户端连接的异步处理;4是比java服务器强上百倍的负荷能力。

综合这些优点,一般的java应用服务器,接上一个nginx后,在服务稳定性上将可匹敌数万美金的大型java集群服务器,java开发者就不用再为java性能方面发愁了。

Tags: , ,

星期四, 三月 11th, 2010 服务器 没有评论
1LMooBmUE153Wnd3zDryWvDyXxQudbFxDr