Apache重定向

1.Apache Rewrite的主要功能  就是实现URL的跳转和隐藏真实地址,基于Perl语言的正则表达式规范。平时帮助我们实现拟静态,拟目录,域名跳转,防止盗链等  2.Apache Rewrite的配置  Apache下的Rewrite配置主要有两种,一种是针对整个apache服务器的配置,此种配置的Rewrite规则是直接在httpd.conf下书写。配置步骤如下:  (1)去除httpd.conf文件中"#LoadModule rewrite_module modules/mod_rewrite.so"前面的"#"号;  (2)然后再在httpd.conf中书写如下规则:  RewriteEngine on  #当访问任何以t_开头,以.html结尾的文件时,将$1用与(.*)匹配的字符替换后,访问相应的test.php页面  RewriteRule ^/t_(.*).html$ /test.php?id=$1  另一种是针对apache服务器下的某一目录的配置,此种配置的Rewrite规则需在此目录下建立一个.htaccess文件来书写。配置步骤如下:  (1)去除httpd.conf文件中"#LoadModule rewrite_module modules/mod_rewrite.so"前面的"#"号;  (2)修改httpd.conf文件中的"AllowOverride None"为"AllowOverride all",同时最好将Options也置为"all",否则可能会出问题。  (3)在目录中建立.htaccess文件,并用记事本打开,书写如下规则:  RewriteEngine on  RewriteRule ^/t_(.*).html$ /test.php?id=$1  3.Apache Rewrite规则的书写  RewriteEngine on  RewriteRule ^/test(*).html$ /test.php?id=$1  RewriteRule ^/new(*)/$ /new.php?id=$1   RewriteEngine on  #当我们访问的地址不是以www.163.com开头的,那么执行下一条规则  RewriteCond %{HTTP_HOST} !^www.163.com   RewriteRule ^/(.*) http://www.163.com/   4.Apache Rewrite规则修正符  1) R 强制外部重定向  2) F 禁用URL,返回403HTTP状态码。  3) G 强制URL为GONE,返回410HTTP状态码。  4) P 强制使用代理转发。  5) L 表明当前规则是最后一条规则,停止分析以后规则的重写。  6) N 重新从第一条规则开始运行重写过程。  7) C 与下一条规则关联  如果规则匹配则正常处理,以下修正符无效  8) T=MIME-type(force MIME type) 强制MIME类型  9) NS 只用于不是内部子请求  10) NC 不区分大小写  11) QSA 追加请求字符串  12) NE 不在输出转义特殊字符 \%3d$1 等价于 =$1 5 实际示例 如果请求的是域名www.a.org,并且是图片,音视频等资源,则强制跳转到新的链接http://192.168.1.1:10000 RewriteEngine on...
阅读全文

Apache中的KeepAlive选项

原文出处:http://www.2cto.com/os/201107/98147.html 在Apache 服务器中,KeepAlive 是一个布尔值,On 代表打开,Off 代表关闭,这个指令在其他众多的HTTPD 服务器中都是存在的。 KeepAlive 配置指令决定当处理完用户发起的HTTP 请求后是否立即关闭TCP 连接,如果KeepAlive 设置为On,那么用户完成一次访问后,不会立即断开连接,如果还有请求,那么会继续在这一次TCP 连接中完成,而不用重复建立新的TCP 连接和关闭TCP 连接,可以提高用户访问速度。 那么我们考虑3种情况: 1。用户浏览一个网页时,除了网页本身外,还引用了多个javascript 文件,多个css 文件,多个图片文件,并且这些文件都在同一个HTTP 服务器上。 2。用户浏览一个网页时,除了网页本身外,还引用一个javascript 文件,一个图片文件。 3。用户浏览的是一个动态网页,由程序即时生成内容,并且不引用其他内容。 对于上面3中情况,我认为:1 最适合打开KeepAlive ,2 随意,3 最适合关闭KeepAlive 下面我来分析一下原因。 在Apache 中,打开和关闭KeepAlive 功能,服务器端会有什么异同呢? 先看看理论分析。 打开KeepAlive 后,意味着每次用户完成全部访问后,都要保持一定时间后才关闭会关闭TCP 连接,那么在关闭连接之前,必然会有一个Apache 进程对应于该用户而不能处理其他用户,假设KeepAlive 的超时时间为10 秒种,服务器每秒处理50个独立用户访问,那么系统中Apache 的总进程数就是10 * 50 =500 个,如果一个进程占用4M 内存,那么总共会消耗2G内存,所以可以看出,在这种配置中,相当消耗内存,但好处是系统只处理了 50次TCP 的握手和关闭操作。 如果关闭KeepAlive,如果还是每秒50个用户访问,如果用户每次连续的请求数为3个,那么Apache 的总进程数就是50 * 3= 150 个,如果还是每个进程占用4M 内存,那么总的内存消耗为600M,这种配置能节省大量内存,但是,系统处理了150 次TCP的握手和关闭的操作,因此又会多消耗一些CPU 资源。 在看看实践的观察。 我在一组大量处理动态网页内 容的服务器中,起初打开KeepAlive功能,经常观察到用户访问量大时Apache进程数也非常多,系统频繁使用交换内存,系统不稳定,有时负载会出 现较大波动。关闭了KeepAlive功能后,看到明显的变化是:Apache 的进程数减少了,空闲内存增加了,用于文件系统Cache的内存也增加了,CPU的开销增加了,但是服务更稳定了,系统负载也比较稳定,很少有负载大范围 波动的情况,负载有一定程度的降低;变化不明显的是:访问量较少的时候,系统平均负载没有明显变化。 总结一下: 在内存非常充足的服务器上,不管是否关闭KeepAlive 功能,服务器性能不会有明显变化; 如果服务器内存较少,或者服务器有非常大量的文件系统访问时,或者主要处理动态网页服务,关闭KeepAlive 后可以节省很多内存,而节省出来的内存用于文件系统Cache,可以提高文件系统访问的性能,并且系统会更加稳定。 补充1:   关于是否应该关闭KeepAlive 选项,我觉得可以基于下面的一个公式来判断。 在理想的网络连接状况下,系统的Apache 进程数和内存使用可以用如下公式表达: HttpdProcessNumber = KeepAliveTimeout * TotalRequestPerSecond / Average(KeepAliveRequests) HttpdUsedMemory = HttpdProcessNumber * MemoryPerHttpdProcess 换成中文: 总Apache进程数= KeepAliveTimeout * 每秒种HTTP请求数/ 平均KeepAlive请求 Apache占用内存= 总Apache进程数* 平均每进程占用内存数 需要特别说明的是: 数,是指每个用户连接上服务器后,持续发出的HTTP 请求数。当KeepAliveTimeout 等0或者KeepAlive 关闭时,KeepAliveTimeout 不参与乘的运算从上面的公式看,如果多, 的值大,...
阅读全文