搜档网
当前位置:搜档网 › apache优化

apache优化

本文由i1see1you贡献
ppt文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。
apache
丁灿彪 dingcanbiao@https://www.sodocs.net/doc/ae684569.html,
概要
背景 节省网络带宽 apache优化 临时端口不足的问题 改善用户体验 Future work
概要
背景 节省网络带宽 apache优化 临时端口不足的问题 改善用户体验 Future work
apache
Apahce是一个Web服务器软件 Apache 服务器最大的特点:高度模块化 除了少数几个核心文件外,Apache中大部分功能都被模 块化. 模块化的优点:用户可以根据自己的实际需要裁剪,增 加功能. apache1.3:采用多进程模型,每个请求适用一个单独的 子进程处理.不支持线程 apache2.0:多进程 + 多线程 百度绝大多数产品线使用apache作为web服务器 使用版本有1.3,2.x
一次广告请求
cp.js Apache web server cpro ads Logo.jpg Web browser
Cpro apache
apache 版本: 1.3.27 多进程模型 Keepalive off 管理进程 – 任务分配(记分板) – 进程回收 工作进程 – 处理用户请求 – 进程数与并发用户数1:1的关系 流量大,超过10亿/天 机器多,超过100台apache服务器
概要
背景 节省网络带宽 apache优化 临时端口不足的问题 改善用户体验 Future work
节省网络带宽
背景 动态广告压缩(zlib) 静态文件预压缩(pregzip) mod_expires 利用客户端缓存(etag&last modified time)
背景 – 压缩
GET / HTTP/1.1 Accept:*/* Accept-Encoding:gzip, deflate Host:https://www.sodocs.net/doc/ae684569.html, Connection:Keep-Alive
HTTP/1.1 200 OK Date:Tue, 15 Jan 2008 15:07:54 GMT Server:BWS/1.0 Content-Length:1559 Content-Type:text/html Cache-Control:private Expires:Tue, 15 Jan 2008 15:07:54 GMT Content-Encoding:gzip
背景 – 304 not modified
GET / HTTP/1.1 Accept:*/* Accept-Encoding:gzip, deflate If-Modified-Since:Wed, 02 Jan 2008 09:52:05 GMT If-None-Match:"5db-477b5ec5" Host:https://www.sodocs.net/doc/ae684569.html, Connection:Keep-Alive
(Status-Line):HTTP/1.1 304 Not Modified Date:Tue, 15 Jan 2008 15:11:08 GMT Server:cws 1.1.1.3 Connection:close ETag:"5db-477b5ec5" Expires:Fri, 12 Jan 2018 15:11:08 GMT Cache-Control:max-age=315360000
动态的广告压缩 - zlib
– –
在apache中使用zlib库 和文本内容有关,平均压缩率55% 支持压缩的请求85% 没有请求压缩的流量

绝大部分是非正常流量 http/1.0
我们可以丢弃这些流量
Spider (compatible; MSIE 5.5; Windows 95; Alexa Toolbar) Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt) JO=ar-jo;IQ=ar-iq
动态的广告压缩 – mod_gzip
现成的开源apache模块 通用,灵活 Gzip on the fly and precompressed 通用,灵活是以牺牲性能为代价的 存在大量的磁盘读写操作
Mod_gzip在2.4内核上的内存问题
Mod_gzip在2.4内核上的内存问题
2.4内核的机器,启用了mod_gzip后,系统缓存的使

用 不断增加,积累到一定阶段后会有一个突降 内存突降通常在30秒钟内完成,突降的过程中系统负载 突增,严重影响了正常的服务,导致报警. 缓存使用上的变化是由于mod_gzip模块大量的文件读写 造成的. 缓存使用的突然下降是因为系统在大量回收slab缓存导 致的. 基于2.4内核是无法控制这种回收过程中造成的对应用程 序的影响的. Slab缓存是系统内核的一种cache,在2.4内核算法中, 即使系统的空闲内存很多,也会回收slab缓存,而在2.6 内核算法中,只要系统有足够的剩余内存,系统就不回 收slab缓存.
Mod_gzip和zlib的性能对比
使用zlib后,apache进程数减少了将近1/3 系统负载减小45% Cpu使用率减低接近50% Mod_gzip存在大量磁盘读写 (主要原因)
mod_gzip作为一个通用的模块,配置非常灵活,其通用性,灵活性 是以牺牲了性能为代价的. 对比没有使用压缩,压缩过程需要使用到cpu,但文件变小了,减 少了io,使用zlib后机器的吞吐量反而变大了
静态文件预压缩
if( ((p=(char*)ap_table_get(r->headers_in, "Accept-Encoding")) != 0) && (strstr(p, "gzip") != 0) ) { new_name = ap_pstrcat(r->pool, r->filename, ".gz", NULL); if (stat(new_name, &statbuf) == 0) { new_name = ap_pstrcat(r->pool, r->uri, ".gz", NULL); if ( r->args != NULL ) new_uri = ap_pstrcat(r->pool, new_name, "?", r->args, NULL); else new_uri = ap_pstrcat(r->pool, new_name, NULL ); ap_internal_redirect( new_uri, r ); return OK; } }
使用ap_internal_redirect的问题
https://www.sodocs.net/doc/ae684569.html,/index.html/ 陷入无限的间接递归调用,stack的使用不 断上涨 一个小时内达到4G,apache进程被杀死 系统内存出现问题,内存使用报警 同机器的appui受到影响,super重启报警 导致了一次回滚
使用ap_internal_redirect的问题
1. 2. 3. 4. 5.
客户端请求index.html/文件 mod_pregzip模块判断存在index.html并且存在 index.html.gz mod_pregzip使用r->uri + .gz得出新的文件名: index.html/.gz,重定向到index.html/.gz文件 Apache重新解析,得出的结果是r->filename = index.html 运行2到5,反复进行
解决方案: 1. Mod_pregzip第一次运行的时候设置一个标志位,第二 次运行到mod_pregzip模块的时候检查该标识,简单的 无限循环检测 2. 使用mod_mime模块+内容协商实现预压缩功能
利用客户端缓存
对同一文件的多次请求落到不同机器上 文件的Etag不一致以及文件最后修改时间不一致 从etag中去掉inode信息 使用scp –p统一上传所有静态文件 保持不同服务器上的同一文件etag,最后修改时 间的一致性 客户端的缓存利用率大幅度上升,从2.2%上升 到49.5%
应用
几个优化策略在节省cpro带宽方面的贡献
各策略流量节省比较
4.70% 8.20%
0.50% 动态广告压缩 Etag以及Mtime一致性优化 静态文件预压缩 m

od_expires 37.40%
概要
背景 节省网络带宽 apache优化 临时端口不足的问题 改善用户体验 Future work
apache优化
配置优化 去掉多余的模块
配置优化
– – – – –
HostnameLookups off
1.3.27中默认on 消除多余的符号链接验证 去掉对.htaccess的支持 减少每次请求多出的两次gettimeofday调用 隐藏服务器信息(版本,模块及其版本)
Options FollowSymLinks AllowOverride None
ExtendedStatus Off (mod_status) ServerSignature Off, ServerTokens Prod
去掉多余的模块
Apache把请求处理分解成一系列步骤: URI -> Filename 转换 验证检查身份 [用户是否是他自称是的那位?] 检查访问授权 [该用户是否有权访问这里?] 除授权机制以外的其他访问检查 决定被请求对象的MIME类型 修正不是这些类型中的任何一种 实际发送响应回客户端 记录该请求
去掉多余的模块
根据实际应用情况,只保留 http_core,mod_log_config,mod_mime, mod_dir,mod_expires 去掉了多余的模块: mod_imap, mod_include, mod_info, mod_userdir, mod_status, mod_cgi, mod_autoindex ……
概要
背景 节省网络带宽 apache优化 临时端口不足的问题 改善用户体验 Future work
临时端口不足的问题
– – – – – –
cannot assign requested address 短连接 & time_wait apache和ui之间的极限压力
默认情况下,可用端口数28232,TIMEWAIT时间60s 28232/60 = 470 超过极限压力,系统崩溃 使用长连接(cpro的做法) 修改内核参数 端口复用
解决临时端口不足的问题
将短连接改为长连接
每个apache进程维护和后端ui的长连接 进程建立的时候建立初始连接 连接是否可用的检测 进程销毁的时候句柄自动释放 Apache最多进程数限制为1024,连接数与进程 数成正比 压力1400的时候,系统保持稳定

整个机群的极限压力取决于后端的处理速度
节省一半的apache服务器
概要
背景 节省网络带宽 apache优化 临时端口不足的问题 改善用户体验 Future work
改善用户体验
与apache无关 减少rtt个数 优化ui.js文件
概要
背景 节省网络带宽 apache优化 临时端口不足的问题 改善用户体验 Future work
Future work
apache的问题 Transmit 使用apache 2.x? 在前端部署tcpflow
apache的问题
Keepalive off使得客户端需要重新连接 apache是多进程模型,并发进程数不能太 高,不能为每个用户hold一个长连续 用户提交数据过程可能比较慢,apache的 进程是在建立连接后就分配,容易被ddos 攻击 prison通过扫描日志的方法,属于事后行 为
使用transmit
keepalive – 与用户保持长连接,与apache开短连接 慢连接 – 接收完所有请求后再建立与apache的连接 – 减少占用apache进程的时间,解放

了apache进程,提高利用率 防攻击功能 – 使用字典记录ip/cookie/connect,实时封禁
使用apache2.x
Apache在space的测试数据
nach(每秒请求数) 7000 6000 响应次数/秒 秒 5000 4000 3000 2000 1000 0 1 2 3 4 5 6 7 1.3 2.0prefork 2.0worker
使用apache2.x
CPU Idle
nach(每秒请求数) 7000 1.3 2.0prefork 2.0worker
1.3
2.0prefork
2.0worker
80 70 60 cpu idle 50 40 30 20 10 0 1
6000 响应次数/秒 秒 1 2 5000 4000 3000 2000 1000 0 2
3
3
4 4 压力次数
5 5
6 6
77
在前端部署tcpflow
统计RTT,丢包率,传输时间,服务时间 了解用户,也了解自己 及时发现问题,比如之前的教育网速度慢的问题
Q&A
Any question?
https://www.sodocs.net/doc/ae684569.html,/本文由spiderworld贡献
ppt文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。
apache
丁灿彪 dingcanbiao@https://www.sodocs.net/doc/ae684569.html,
概要
? ? ? ? ?
背景 节省网络带宽 apache优化 临时端口不足的问题 改善用户体验 Future work
概要
? ? ? ? ?
背景 节省网络带宽 apache优化 临时端口不足的问题 改善用户体验 Future work
apache
? ? ? ? ? ? ?
Apahce是一个Web服务器软件 Apache 服务器最大的特点:高度模块化 除了少数几个核心文件外,Apache中大部分功能都被模 块化。 模块化的优点:用户可以根据自己的实际需要裁剪、增 加功能。 apache1.3:采用多进程模型,每个请求适用一个单独的 子进程处理。不支持线程 apache2.0:多进程 + 多线程 百度绝大多数产品线使用apache作为web服务器 使用版本有1.3,2.x
一次广告请求
cp.js Apache web server cpro ads Logo.jpg Web browser
Cpro apache
? ? ? ? ? ?
apache 版本: 1.3.27 多进程模型 Keepalive off 管理进程 – 任务分配(记分板) – 进程回收 工作进程 – 处理用户请求 – 进程数与并发用户数1:1的关系 流量大,超过10亿/天 机器多,超过100台apache服务器
概要
? ? ? ? ?
背景 节省网络带宽 apache优化 临时端口不足的问题 改善用户体验 Future work
节省网络带宽
? ? ? ?
背景 动态广告压缩(zlib) 静态文件预压缩(pregzip) mod_expires 利用客户端缓存(etag&last modified time)
背景 – 压缩
GET / HTTP/1.1 Accept:*/* Accept-Encoding:gzip, deflate Host:https://www.sodocs.net/doc/ae684569.html, Connection:Keep-Alive
HTTP/1.1 200 OK Date:Tue, 15 Jan 2008 15:07:54 GMT Server:BWS/1.0 Content-Length:1559 Content-Type:text/html Cache-Control:private Expires:Tue, 15 Jan 2008 15:07:54 GMT Content-Encoding:gzip
背景 – 304 not modified
GET / HTTP/1.1 Accept:*/* Accept-Encoding:gzip, deflate If-Modified-Since:Wed, 02 Jan 2008 09:52:05 GMT If-None-Match:"5db-477b5ec5" Host:https://www.sodocs.net/doc/ae684569.html, Connection:Keep-Alive
(Status-Line)

:HTTP/1.1 304 Not Modified Date:Tue, 15 Jan 2008 15:11:08 GMT Server:cws 1.1.1.3 Connection:close ETag:"5db-477b5ec5" Expires:Fri, 12 Jan 2018 15:11:08 GMT Cache-Control:max-age=315360000
动态的广告压缩 - zlib
? ? ?
– –
在apache中使用zlib库 和文本内容有关,平均压缩率55% 支持压缩的请求85% 没有请求压缩的流量

? ? ?
绝大部分是非正常流量 http/1.0
我们可以丢弃这些流量
Spider (compatible; MSIE 5.5; Windows 95; Alexa Toolbar) Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt) JO=ar-jo;IQ=ar-iq
动态的广告压缩 – mod_gzip
? ? ? ?
现成的开源apache模块 通用,灵活 Gzip on the fly and precompressed 通用,灵活是以牺牲性能为代价的 存在大量的磁盘读写操作
Mod_gzip在2.4内核上的内存问题
Mod_gzip在2.4内核上的内存问题
? ? ? ? ?
2.4内核的机器,启用了mod_gzip后,系统缓存的使用 不断增加,积累到一定阶段后会有一个突降 内存突降通常在30秒钟内完成,突降的过程中系统负载 突增,严重影响了正常的服务,导致报警。 缓存使用上的变化是由于mod_gzip模块大量的文件读写 造成的。 缓存使用的突然下降是因为系统在大量回收slab缓存导 致的。 基于2.4内核是无法控制这种回收过程中造成的对应用程 序的影响的。 Slab缓存是系统内核的一种cache,在2.4内核算法中, 即使系统的空闲内存很多,也会回收slab缓存,而在2.6 内核算法中,只要系统有足够的剩余内存,系统就不回 收slab缓存。
Mod_gzip和zlib的性能对比
? ? ?
?
使用zlib后,apache进程数减少了将近1/3 系统负载减小45% Cpu使用率减低接近50% Mod_gzip存在大量磁盘读写 (主要原因)
mod_gzip作为一个通用的模块,配置非常灵活,其通用性,灵活性 是以牺牲了性能为代价的。 对比没有使用压缩,压缩过程需要使用到cpu,但文件变小了,减 少了io,使用zlib后机器的吞吐量反而变大了
静态文件预压缩
if( ((p=(char*)ap_table_get(r->headers_in, "Accept-Encoding")) != 0) && (strstr(p, "gzip") != 0) ) { new_name = ap_pstrcat(r->pool, r->filename, ".gz", NULL); if (stat(new_name, &statbuf) == 0) { new_name = ap_pstrcat(r->pool, r->uri, ".gz", NULL); if ( r->args != NULL ) new_uri = ap_pstrcat(r->pool, new_name, "?", r->args, NULL); else new_uri = ap_pstrcat(r->pool, new_name, NULL ); ap_internal_redirect( new_uri, r ); return OK; } }
使用ap_internal_redirect的问题
? ? ? ? ?
https://www.sodocs.net/doc/ae684569.html,/index.html/ 陷入无限的间接递归调用,stack的使用不 断上涨 一个小时内达到4G,apache进程被杀死 系统内存出现问题,内存使用报警 同机器的appui受到影响,super重启报警 导致了一次回滚
使用ap_internal_redirect的问题
1. 2. 3.

4. 5.
客户端请求index.html/文件 mod_pregzip模块判断存在index.html并且存在 index.html.gz mod_pregzip使用r->uri + .gz得出新的文件名: index.html/.gz,重定向到index.html/.gz文件 Apache重新解析,得出的结果是r->filename = index.html 运行2到5,反复进行
解决方案: 1. Mod_pregzip第一次运行的时候设置一个标志位,第二 次运行到mod_pregzip模块的时候检查该标识,简单的 无限循环检测 2. 使用mod_mime模块+内容协商实现预压缩功能
利用客户端缓存
? ? ? ? ?
对同一文件的多次请求落到不同机器上 文件的Etag不一致以及文件最后修改时间不一致 从etag中去掉inode信息 使用scp –p统一上传所有静态文件 保持不同服务器上的同一文件etag,最后修改时 间的一致性 客户端的缓存利用率大幅度上升,从2.2%上升 到49.5%
应用
几个优化策略在节省cpro带宽方面的贡献
各策略流量节省比较
4.70% 8.20%
0.50% 动态广告压缩 Etag以及Mtime一致性优化 静态文件预压缩 mod_expires 37.40%
概要
? ? ? ? ?
背景 节省网络带宽 apache优化 临时端口不足的问题 改善用户体验 Future work
apache优化
?
配置优化 去掉多余的模块
配置优化
? ? ? ?
– – – – –
HostnameLookups off
1.3.27中默认on 消除多余的符号链接验证 去掉对.htaccess的支持 减少每次请求多出的两次gettimeofday调用 隐藏服务器信息(版本,模块及其版本)
Options FollowSymLinks AllowOverride None
ExtendedStatus Off (mod_status) ServerSignature Off, ServerTokens Prod
去掉多余的模块
Apache把请求处理分解成一系列步骤: ? URI -> Filename 转换 ? 验证检查身份 [用户是否是他自称是的那位?] ? 检查访问授权 [该用户是否有权访问这里?] ? 除授权机制以外的其他访问检查 ? 决定被请求对象的MIME类型 ? 修正不是这些类型中的任何一种 ? 实际发送响应回客户端 ? 记录该请求
去掉多余的模块
根据实际应用情况,只保留 http_core,mod_log_config,mod_mime, mod_dir,mod_expires 去掉了多余的模块: mod_imap, mod_include, mod_info, mod_userdir, mod_status, mod_cgi, mod_autoindex ……
概要
? ? ? ? ?
背景 节省网络带宽 apache优化 临时端口不足的问题 改善用户体验 Future work
临时端口不足的问题
? ? ?
– – – – – –
cannot assign requested address 短连接 & time_wait apache和ui之间的极限压力
默认情况下,可用端口数28232,TIMEWAIT时间60s 28232/60 = 470 超过极限压力,系统崩溃 使用长连接(cpro的做法) 修改内核参数 端口复用
解决临时端口不足的问题
将短连接改为长连接
? ? ? ? ? ?
每个apache进程维护和后端ui的长连

接 进程建立的时候建立初始连接 连接是否可用的检测 进程销毁的时候句柄自动释放 Apache最多进程数限制为1024,连接数与进程 数成正比 压力1400的时候,系统保持稳定

整个机群的极限压力取决于后端的处理速度
节省一半的apache服务器
概要
? ? ? ? ?
背景 节省网络带宽 apache优化 临时端口不足的问题 改善用户体验 Future work
改善用户体验
? ?
与apache无关 ? 减少rtt个数 优化ui.js文件
概要
? ? ? ? ?
背景 节省网络带宽 apache优化 临时端口不足的问题 改善用户体验 Future work
Future work
? ? ?
apache的问题 Transmit 使用apache 2.x? 在前端部署tcpflow
apache的问题
? ? ?
Keepalive off使得客户端需要重新连接 apache是多进程模型,并发进程数不能太 高,不能为每个用户hold一个长连续 用户提交数据过程可能比较慢,apache的 进程是在建立连接后就分配,容易被ddos 攻击 prison通过扫描日志的方法,属于事后行 为
使用transmit
? ?
keepalive – 与用户保持长连接,与apache开短连接 慢连接 – 接收完所有请求后再建立与apache的连接 – 减少占用apache进程的时间,解放了apache进程,提高利用率 防攻击功能 – 使用字典记录ip/cookie/connect,实时封禁
使用apache2.x
Apache在space的测试数据
nach(每秒请求数) 7000 6000 响应次数/秒 秒 5000 4000 3000 2000 1000 0 1 2 3 4 5 6 7 1.3 2.0prefork 2.0worker
使用apache2.x
CPU Idle
nach(每秒请求数) 7000 1.3 2.0prefork 2.0worker
1.3
2.0prefork
2.0worker
80 70 60 cpu idle 50 40 30 20 10 0 1
6000 响应次数/秒 秒 1 2 5000 4000 3000 2000 1000 0 2
3
3
4 4 压力次数
5 5
6 6
77
在前端部署tcpflow
? ?
统计RTT、丢包率、传输时间、服务时间 了解用户,也了解自己 及时发现问题,比如之前的教育网速度慢的问题
Q&A
Any question?
https://www.sodocs.net/doc/ae684569.html,/本文由mgbdzsw贡献
doc文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。
apache2.2 的优化及模块安装
(2010-11-10 13:28:44)
转载
标签:
杂谈
# 解压缩 tar jxvf httpd-2.2.2.tar.bz2 cd httpd-2.2.0 # vi server/mpm/worker/worker.c 找到下面几行,并改成如下的数值,其目的是在源码中修改 apache 可支持的最 大线程数和最大客户端数目。 # define DEFAULT_SERVER_LIMIT 256 # define MAX_SERVER_LIMIT 40000 # define DEFAULT_THREAD_LIMIT 256 # define MAX_THREAD_LIMIT 40000
# 编译和安装 apr 1.2 cd srclib/apr ./configure --prefix=/home/liuchao/local/apr make make install # 编译和安装 apr-util 1.2 cd ../apr-util ./configure --prefix=/home/local/apr-util --with-apr=/home/

local/apr make make install 优化编译选项及配置 apache 可加载的模块 patch -p1 < ../mod_limitipconn-0.22/apachesrc.diff /usr/local/apache2.2 apache2.2.3/bin/apxs -c -i -a mod_limitipconn.c apache2.2 /usr/local/apache2.2 apache2.2/bin/apxs -c -i -a mod_evasive20.c apache2.2 更改 2Glogs export CFLAGS="-O2 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE" 然后编译 cronolog 即可 CHOST="i686-pc-linux-gnu"
CFLAGS="-march=pentium4 -O3 -pipe -fomit-frame-pointer" CXXFLAGS="-march=pentium4 -O3 -pipe -fomit-frame-pointer" ./configure --prefix=/usr/local/apache2.2 --enable-mods-shared=all apache2.2.3 apache2.2 --enable-so --with-mpm=worker --enable-deflate --enable-cache --enable-disk-cache --enable-mem-cache --enable-file-cache --enable-proxy --enable-rewrite --enable-charset-lite --enable-suexec --with-suexec-bin=/usr/sbin/suexec --disable-ipv6 -disable-dav --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util # 编译及安装 gmake && make install 二、优化 apache 配置选项 在主配置文件 httpd.conf 注释下一行, 这样做的目的是把 apache 的功能配置分 成小文件,便于修改和移植 Include conf/Includesusr/bin/find /home/apache/logs/ -name access_log.gz -mtime +3 |xargs -r /bin/rm -f
运行语法检查命令检查语法,出现错误后继续调整。 # ./bin/apachectl -t html 网页跳转 index.html 使 apache 的日志文件里不记录图片文件 找到: LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent 再后面加上图片文件的类型 SetEnvIf Request_URI \.gif$ gif-image SetEnvIf Request_URI \.GIF$ gif-image SetEnvIf Request_URI \.jpg$ gif-image SetEnvIf Request_URI \.JPG$ gif-image SetEnvIf Request_URI \.png$ gif-image SetEnvIf Request_URI \.js$ gif-image SetEnvIf Request_URI \.bmp$ gif-image SetEnvIf Request_URI \.css$ gif-image
SetEnvIf Request_URI \.mid$ gif-image SetEnvIf Request_URI \.swf$ gif-image SetEnvIf Request_URI \.mmf$ gif-image SetEnvIf Request_URI \.wma$ gif-image SetEnvIf Request_URI \.midi$ gif-image 日志 CustomLog /usr/local/apache/logs/access.log combined env=!gif-image 使用两个 ProxyPassReverse / http://%{HTTP_HOST}:8088/ RewriteEngine on RewriteCond %{REQUEST_URI} !.*\.(gif|png|jpg)$ RewriteRule ^/(.*) http://%{HTTP_HOST}:8088/ $1 [P] Linux 下检测 Apache 进程数量并自动重启的脚本 在/etc/crontab 里,定时执行检测脚本,检测系统的 Apache,和 Mysql 进程是否超 出标准,超标的话,自动重启,没有的话,记录进程数据. Crontab 的内容(每 30 分钟执行一次,并将结果记录在/var/log/chksys.log) 0,30 * * * * root /usr/local/chksys.sh >> /var/log/chksys.log /usr/local/chksys.sh 代码: #!/bin/bash #check apache,mysql thread and auto reboot system #Powered by ipaddr(aspbiz) #config MaxApacheThread=300 MaxMy

sqlThread=250 NeedReboot=0 ApacheThread=`ps -A|grep http|wc -l` MysqlThread=`ps -A|grep mysql|wc -l` if [ $ApacheThread -gt $MaxApacheThread ] then NeedReboot=1 fi
if [ $MysqlThread -gt $MaxMysqlThread ] then NeedReboot=1 fi if [ $NeedReboot -eq 1 ] then echo "" echo $(date +"%y-%m-%d %H:%M:%S" echo "" echo "Apache:$ApacheThread;Mysql:$MysqlThread." echo "System is busy,reboot" reboot else echo "" echo $(date +"%y-%m-%d %H:%M:%S" echo "" echo "Apache:$ApacheThread;Mysql:$MysqlThread." echo "System is normal" fi
SVN 服务器搭建完全手册 cvs, 版本控制, 系统维护, Linux, svn 准备,下载所需要文件. 检查已安装的 Apache2 是否已经安装了 mod_dav . 编译 SVN,遇到的问题和解决方法 使用 默认文件系统(fsfs) 保存数据 使用 Berkeley DB 保存数据 配置 Apache 和 SVN,测试. 其它小结 从 Windows 平台上数据转移 配置文件,使用其支持对文件中的 $Id$ 标签每次提交的时候自动更新版本信息. 基于路径的权限控制 常用 SVN 命令 相关资源 准备,下载所需要文件 本文测试环境
Linux MY_SERVER 2.6.9-5.ELsmp #1 SMP Wed Jan 5 19:30:39 EST 2005 i686 i686 i386 GNU/Linux
Apache 2.2.2
最新的版本 Subversion 可以在这里找到 : https://www.sodocs.net/doc/ae684569.html,/project_packages.html 检查已安装的 Apache2 是否已经安装了 mod_dav 如果已经成功安装了 Apache,使用 httpd -M 来查看有没有安装 dav_module, 如果没有的话 必须附加 ‘–enable-dav’ ‘–enable-dav-fs’ 两个参数重 新编译 Apache,否则即使编译通过了 svn,apache 也会启动不起来. 编译 APACHE2.2 APACHE2.2 修改部分源代码 # vi server/mpm/worker/worker.c 找到下面几行,并改成如下的数值,其目的是在源码中修改 apache 可支持的 最 大线程数和最大客户端数目。 # # # # define define define define DEFAULT_SERVER_LIMIT 256 MAX_SERVER_LIMIT 40000 DEFAULT_THREAD_LIMIT 256 MAX_THREAD_LIMIT 40000
编译配置 优化编译选项及配置 apache 可加载的模块 # CFLAGS="-O6 -mpentiumpro -fomit-frame-pointer" CXX=gcc CXXFLAGS="-O6 -mpentiumpro -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" \ > ./configure --prefix=/usr/local/apache2.2 --enable-mods-shared=all \ apache2.2 > --enable-so --with-mpm=worker --enable-deflate \ > --enable-cache --enable-disk-cache --enable-mem-cache --enable-file-cache \ > --enable-proxy --enable-suexec 编译及安装 # gmake && make install 优化 apache 配置选项 修改 MPM(多道处理器)参数 # cd /usr/local/apache2.2 apache2.2 # vi conf/extra/httpd-mpm.conf 找到如下选项,并改成对应的数值
ServerLimit 64 ThreadLimit 128 StartServers 8 MaxClients 8192 MinSpareThreads 50 MaxSpareThreads 256 ThreadsPerChild 128 MaxRequestsPerChild 0 修改 apache2.2 子进程所有者 # vi /usr/local/apache2.2 apache2.2/conf/httpd.conf apache2.2 把 daemon 改为 nobody User nobody Gro

up nobody 编译 SVN,遇到的问题和解决方法 使用默认的文件系统保存数据. 最终完整通过安装和测试的编译参数为: ./configure --with-apxs=/usr/local/apache2/bin/apxs \ --with-apr=/home/src/server/httpd-2.2.2/srclib/apr \ --with-apr-util=/home/src/server/httpd-2.2.2/srclib/apr-util # make # make install 其中 /home/src/server/ 为 httpd-2.2.2 源代码所在文件夹, 根据实际情况调 整一下. 遇到问题 –with-apr 和 –with-apr-util 如果没有加上的话, 即使编译成功了也会出现 Can’t set position pointer in file ‘/home/svn/repos/db/revs/0′: Invalid argument 这样的错误提示. 暂时不能使用 Berkeley DB [* 已解决] svn 保存文件更新数据库的方法有两个,一种是直接使用 fs (filesystem)来保 存,另一种是通过 Oracle 提供支持的开源数据库 Berkeley DB 进行保存。但是 如果加上 –with-berkeley-db=/usr/local/BerkeleyDB.4.4 就会 configure 时就会报错.
configure: error: APR-UTIL was installed independently, it won’t be possible to use the specified Berkeley DB: /usr/local/BerkeleyDB.4.4 我想 apr-unit 暂时不支持吧,我们就用默认的 fs 好了. 在 make 的时候可能会遇到缺少 srclib/apr/https://www.sodocs.net/doc/ae684569.html,, srclib/apr-util/https://www.sodocs.net/doc/ae684569.html, 两个文件,找不到而 make error. 解决办法:/usr/local/apache2/lib/ 中找到,将其复制到源代码文件夹相应的 位置中. UPDATE!!! 使用 BerkeleyDB 保存数据 安装 BerkeleyDB cd /usr/local/src $ wget https://www.sodocs.net/doc/ae684569.html,/db-4.3.29.tar.gz $ tar xzvf db-4.3.29.tar.gz $ cd /usr/local/src/db-4.3.29/build_unix $ ../dist/configure --enable-compat185 $ make $ make install 更新 apr 和 apr-util 源代码 # 清理编译后的.la 文件 $ cd /usr/local/src/httpd-2.2.3 $ make clean $ cd /usr/local/src/subversion-1.3.2 $ rm -rf apr $ rm -rf apr-util $ cp -rf /usr/local/src/httpd-2.2.3/srclib/apr ./ $ cp -rf /usr/local/src/httpd-2.2.3/srclib/apr-util/ ./ 编译安装 # > > # # /configure --with-apxs=/usr/local/apache2/bin/apxs \ --with-berkeley-db=/usr/local/BerkeleyDB.4.3 \ --with-ssl make make install
遇到问题 BerkeleyDB 版本不能大于 4.3.否则同样会出现以下错误. configure: error: APR-UTIL was installed independently, it won’t be possible to use the specified Berkeley DB: /usr/local/BerkeleyDB.4.4 主要是 apr-util 暂时不支持 4.4 的版本.
必须更新 apr,apr-util 源代码. subversion-1.3.2 自带的 apr-util 的版本是 0.9.6 的,必须升级为 1.2.7 虽 然能编译过去。但在 svn checkout 的时候会提示 svn: REPORT request failed on ‘/!svn/vcc/default’ svn: REPORT of ‘/!svn/vcc/default’: Could not read status line: connection was closed by server. 这个问题困扰了我很长时间,Google 和官方论坛都无结果。后来昨天竟然自己 无意中解决了,感动的得哭了:) 配置 Apache 和 SVN,测试 成功编译 svn 后会在 httpd.conf 中自动加上 LoadModu

le dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so 两个模块,没有的话,自行加上或检测是否真的编译成功. 假设我们现在要将一个名为 Lair 的项目导入到 SVN 中 Apache 的配置 在 conf/httpd.conf 或 conf/extra/httpd-vhosts.conf 中加入
DAV svn SVNPath /home/svn/Lair
可以参考以下 apache 的配置,实现数据加密传输,用户身份验证. Listen 443 AddType application/x-x509-ca-cert .crt AddType application/x-pkcs7-crl .crl. SSLPassPhraseDialog exec:/etc/sendsslpwd SSLSessionCache shmcb:/usr/local/apache2/logs/ssl_scache(512000) SSLSessionCacheTimeout 300 SSLMutex file:/usr/local/apache2/logs/ssl_mutex
DocumentRoot /var/SVNRoot ServerName https://www.sodocs.net/doc/ae684569.html,:443 ServerAdmin webmaster@https://www.sodocs.net/doc/ae684569.html,
DAV svn SVNPath /var/SVNRoot AuthzSVNAccessFile /etc/svnserve.conf Satisfy Any AuthType Basic AuthName “yousite SVN Repository” AuthUserFile /etc/httpd-passwords.txt Require valid-user
SSLEngine on SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL SSLCertificateFile /etc/ssl/server.crt SSLCertificateKeyFile /etc/ssl/server.key
更详细的配置说明文档 https://www.sodocs.net/doc/ae684569.html,/nightly/en/svn.ref.mod_dav_svn.conf.html 配置,并且测试 SVN, 创建一个新用户,用了保存仓库. useradd -m svn 创建一个新模块 # su daemon #(apache 是以 daemon 用户运行的,所以要切换身份,否则可能会 报目录访问权限错误) # svnadmin create --fs-type fsfs /home/svn/Lair 导入原来的项目 svn import /var/www/Lair http://localhost/svn/Lair -m ‘Initial import’ 重新建立工作目录 # rm -rf /var/www/Lair ##(注意备份!!) # svn checkout http://localhost/svn/Lair 测试打开 http://localhost/svn/Lair 如能看到一个你项目录列表,说明您成功了。
其它小结 数据转移: 从 Windows 平台 SVN 服务器转移 如果 windows svn 储存的格式也是 dbd 的话,直接将 SVN 的文件夹 copy 过来即 可.然后 执行 svnadmin recover /var/SVNRoot 检查一下数据库是否损坏. 最后注意权限,确保 db 目录下的所有文件可写。 chmod 755 db chmod 666 db/* 否则 checkout 时出现以下错误,多数是因为 文件或者目录权限问题 引起的, 可以尝试用 chown 或者 chmod 命令修改一下权限
Could not open the requested SVN filesystem
Could not open the requested SVN filesystem
另外一种方法没有测试过, 原理大致和 mysqldump 一样, svn 导出为文本文件, 将 然后重新导入,好处是可以避免因为存储格式不同而导致的数据转移困难。 # dump data to file (assuming a repo @ c:\repo): svnadmin dump c:\repo > c:\repo.txt # Copy the file over to linux: mkdir /repo svnadmin create /repo svnadmin load /repo < /repo.txt 设置访问控制 当 httpd.conf 中 设置 AuthzSVNAccessFile 时,可以设置不同用户对不同目 录的访问控制.以下是

一个例子. [groups] root = admin.root web = user1,user2 soft = user3,user4 [/] @root = rw
[/www] @web = rw [/soft] @soft = rw 详细的说明文档: https://www.sodocs.net/doc/ae684569.html,/nightly/en/svn.serverconfig.httpd.html 配置文件, 使用其支持对文件中的 $Id$ 标签每次提交的时候自动更新版本信息 (自动属性). Windows : C:\Documents and Settings\%USERNAME%\Application Data\Subversion\config Linux : ~\.subversion\config [miscellany] enable-auto-props = yes [auto-props] *.php=svn:keywords=Id *.html=svn:keywords=Id 关于自动属性的更高级讨论 几条常用 svn 命令 $ svn update $ svn add “filename” $ svn commit

考 https://www.sodocs.net/doc/ae684569.html,/faq.html [FAQ] https://www.sodocs.net/doc/ae684569.html,/ [文档] https://www.sodocs.net/doc/ae684569.html,/ [论坛] http://d.hatena.ne.jp/cooldaemon/searchdiary?word=*[Subversion] http://artis.imag.fr/~Xavier.Decoret/resources/svn/index.html https://www.sodocs.net/doc/ae684569.html,/~ser/R_n_R/subversion.html#ftn.N45 http://zen.sh.nu/book/zh/index.html

相关主题