- 浏览: 584929 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (365)
- Tomcat调优 (2)
- Apache Http (20)
- Webserver安装 (5)
- Linux安装 (28)
- Linux常用命令 (17)
- C语言及网络编程 (10)
- 文件系统 (0)
- Lucene (12)
- Hadoop (9)
- FastDFS (8)
- 报表 (0)
- 性能测试 (1)
- JAVA (18)
- CSharp (3)
- C++ (38)
- BI (0)
- 数据挖掘 (0)
- 数据采集 (0)
- 网址收集整理 (3)
- Resin (0)
- JBoss (0)
- nginx (0)
- 数据结构 (1)
- 随记 (5)
- Katta (1)
- Shell (6)
- webservice (0)
- JBPM (2)
- JQuery (6)
- Flex (41)
- SSH (0)
- javascript (7)
- php (13)
- 数据库 (6)
- 搜索引擎排序 (2)
- LVS (3)
- solr (2)
- windows (1)
- mysql (3)
- 营销软件 (1)
- tfs (1)
- memcache (5)
- 分布式搜索 (3)
- 关注的博客 (1)
- Android (2)
- clucene (11)
- 综合 (1)
- c c++ 多线程 (6)
- Linux (1)
- 注册码 (1)
- 文件类型转换 (3)
- Linux 与 asp.net (2)
- perl (5)
- coreseek (1)
- 阅读器 (2)
- SEO (1)
- 励志 (1)
- 在线性能测试工具 (1)
- yii (7)
- 服务器监控 (1)
- 广告 (1)
- 代理服务 (5)
- zookeeper (8)
- 广告联盟 (0)
- 常用软件下载 (1)
- 架设自已的站点心得 (0)
最新评论
-
terry07:
java 7 用这个就可以了 Desktop desktop ...
关于java Runtime.getRunTime.exec(String command)的使用 -
HSINKING:
怎么设置打开的dos 窗口是指定的路径下
关于java调用bat文件,不打开窗口 -
liubang201010:
hyperic hq更多参考资料,请访问:http://www ...
hyperic-hq -
^=^:
STDIN_FILENO是unistd.h中定义的一个numb ...
深入理解dup和dup2的用法 -
antor:
留个记号,学习了
[转]用java流方式判断文件类型
2011年02月17日 星期四 23:31转载自 macaque1101最终编辑 macaque1101# 解压缩
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.3/bin/apxs -c -i -a mod_limitipconn.c
/usr/local/apache2.2/bin/apxs -c -i -a mod_evasive20.c
更改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.3 --enable-mods-shared=all --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/Includes/*.conf
修改MPM(多道处理器)参数
# cd /usr/local/apache2.2
# vi conf/extra/httpd-mpm.conf
找到如下选项,并改成对应的数值
<IfModule mpm_worker_module>
ServerLimit 64
ThreadLimit 128
StartServers 8
MaxClients 8192
MinSpareThreads 64
MaxSpareThreads 256
ThreadsPerChild 128
MaxRequestsPerChild 0
</IfModule>
ServerLimit 64
ThreadLimit 64
StartServers 8
MaxClients 4096
MinSpareThreads 64
MaxSpareThreads 256
ThreadsPerChild 64
MaxRequestsPerChild 500
测试过的配置:<IfModule mpm_worker_module>
ServerLimit 32
ThreadLimit 64
StartServers 8
MaxClients 2048
MinSpareThreads 64
MaxSpareThreads 256
ThreadsPerChild 64
MaxRequestsPerChild 0
</IfModule>
修改apache2.2子进程所有者
# vi /usr/local/apache2.2/conf/httpd.conf
把daemon改为nobody
User nobody
Group nobody
一般说来,可以不需要的模块包括:
#LoadModule env_module libexec/mod_env.so
#LoadModule negotiation_module libexec/mod_negotiation.so
#LoadModule status_module libexec/mod_status.so
#server side include已经过时了
#LoadModule includes_module libexec/mod_include.so
#不需要将没有缺省index文件的目录下所有文件列出
#LoadModule autoindex_module libexec/mod_autoindex.so
#尽量不使用CGI:一直是Apache安全问题最多的地方
#LoadModule cgi_module libexec/mod_cgi.so
#LoadModule asis_module libexec/mod_asis.so
#LoadModule imap_module libexec/mod_imap.so
#LoadModule action_module libexec/mod_actions.so
#不使用安全认证可以大大提高访问速度
#LoadModule access_module libexec/mod_access.so
#LoadModule auth_module libexec/mod_auth.so
#LoadModule setenvif_module libexec/mod_setenvif.so
最好保留的有:
#用于定制log格式
LoadModule config_log_module libexec/mod_log_config.so
#用于增加文件应用的关联
LoadModule mime_module libexec/mod_mime.so
#用于缺省index文件:index.php等
LoadModule dir_module libexec/mod_dir.so
可用可不用的有:
#比如:需要在~/username/下调试php可以将
LoadModule userdir_module libexec/mod_userdir.so
#比如:需要将以前的URL进行转向或者需要使用CGI scrīpt-alias
LoadModule alias_module libexec/mod_alias.so
三、配置模块
1.配置静态页面压缩输出模块deflate
使用mod_deflate模块
在httpd.conf中加入以下设置:
SetOutputFilter DEFLATE
DeflateFilterNote ratio
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary
或者
DeflateFilterNote ratio
AddOutputFilterByType DEFLATE text/*
AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscrīpt
两种配置方法的作用差不多,其目的主要是把一些不必要压缩的文件禁止压缩。
2.配置mod_cache模块
# cd /usr/local/apache2.2/conf/Includes
# vi mod_cache.conf
在配置文件里添加如下语句
<IfModule mod_cache>
LoadModule disk_cache_module modules/mod_disk_cache.so
<IfModule mod_disk_cache>
CacheRoot /
CacheSize 256
CacheEnable disk /
CacheDirLevels 5
CacheDirLength 3
</IfModule>
LoadModule mem_cache_module modules/mod_mem_cache.so
<IfModule mod_mem_cache>
CacheEnable mem /
MCacheSize 4096
MCacheMaxObjectCount 100
MCacheMinObjectSize 1
MCacheMaxObjectSize 2048
</IfModule>
</IfModule>
vi /usr/local/apache2/conf/httpd.conf
在末尾添加上:
CacheForceCompletion 100
CacheDefaultExpire 3600
CacheMaxExpire 86400
CacheLastModifiedFactor 0.1
设置虚拟目录
然后保存退出。启动apache
参数的解释:
mod_cache:
CacheEnable: 启动 mod_cache,其后接两个参数。第一个参数指定快取的种类,应设为 mem (记忆体快取) 或 disk (磁碟快取) 之其一;第二个参数指定使用快取的 URI 路径,如果对整个网站 (或虚拟主机) 进行快取,简单指定为根目录(/) 即可。
CacheForceCompletion: 这个值指定当 HTTP request 被取消时,内容的产生动作要完成的百分比;预设是 60(%)。
CacheDefaultExpire: 指定快取的预设过期秒数;预设值是一小时 (3600)。
CacheMaxExpire: 指定快取最大的过期秒数;预设值是一天 (86400)。
CacheLastModifiedFactor: 用来从回应里 Last Modified 资讯算出 expire date。
计算方式是:
expire period (过期时距) = 最后更新后至今的时间间距 * CacheLastModifiedFactor
而
expire date = 目前时间 + expire period
不过无论如何,过期时间不能超过 CacheMaxExpire 的设定值。
现在。如果用squid对该服务器进行反向代理的话,就可以通过cache 实现web的加速了
3.配置mod_expires模块
mod_expires可以减少10%左右的重复请求,让重复的用户对指定的页面请求结果都CACHE在本地,根本不向服务器发出请求。
mod_expires的安装配置:
<IfModule mod_expires>
ExpiresActive on
ExpiresByType image/gif "access plus 1 month"
ExpiresByType text/css "now plus 1 month"
ExpiresDefault "now plus 1 day"
</IfModule>
注释:
所有的.gif文件1个月以后过期
所有的文件缺省1天以后过期
4.配置dosevasive模块
/usr/local/apache2.2/bin/apxs -i -a -c mod_dosevasive20.c
编辑httpd.conf,加入以下内容:
LoadModule dosevasive20_module modules/mod_dosevasive20.so
<IfModule mod_dosevasive20>
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10
</IfModule>
5.配置mod_limitipconn模块
mod_limitipconn.c是一个非官方的apache防止多线程下载模块,可以用来作为WEB文件的下载限制,但是它是使用ExtendedStatus On形式,工作在应用层。当同一个IP的连接到达限制的时候,apache对get请求发送:
HTTP/1.1 503 Service Temporarily Unavailable
从而使用户不能下载,但并不能阻止这种攻击,仍旧允许连接的。
# /usr/local/apache2.2/bin/apxs -c -i -a mod_limitipconn.c
修改apache配置文件:
# vi /usr/local/apache/conf/httpd.conf
同时需要设置以下参数在 httpd.conf 中 , 也可以在单个虚拟服务器中。
ExtendedStatus On
修改配置文件:
1 全局控制:
在httpd.conf加上以下几行:
<IfModule mod_limitipconn>
<Location /> # 所有虚拟主机的/目录
MaxConnPerIP 3 # 每IP只允许3个并发连接
NoIPLimit image/* # 对图片不做IP限制
</Location>
<Location /mp3> # 所有主机的/mp3目录
MaxConnPerIP 1 # 每IP只允许一个连接请求
OnlyIPLimit audio/mpeg video # 该限制只对视频和音频格式的文件
</Location >
</IfModule>
2 局部限制,你也可以在虚拟主机的配置文件里设置IP限制,方法是完全一样:
< VirtualHost xx.xxx.xx.xx >
ServerAdmin chenlf@chinalinuxpub.com
ServerName server.domain.com
ServerAlias *.domain.com
UseCanonicalName OFF
VirtualDocumentRoot /htdoc/domain/%1
< IfModule mod_limitipconn.c >
< Location / > # 所有虚拟主机的/目录
MaxConnPerIP 5 # 每IP只允许3个并发连接
NoIPLimit image/* # 对图片不做IP限制
< /Location >
< Location /mp3 > # 所有主机的/mp3目录
MaxConnPerIP 2 # 每IP只允许一个连接请求
OnlyIPLimit audio/mpeg video # 该限制只对视频和音频格式的文件
< /Location >
< /IfModule >
ErrorLog /home/my/logs/error_log
CustomLog /home/my/logs/access_log common
< /VirtualHost >
重启apache,用多线程的下载工具下载时,大于3个线程,其余的将得到信息:
HTTP/1.1 503 Service Temporarily Unavailable
或者根据User_Agent判断,把已知的多线程工具都给deny 掉
in httpd.conf
.....
BrowserMatch "NetAnt" badguy
BrowserMatch "GetRight" badguy
BrowserMatch "JetCar" badguy
BrowserMatch "Mass Downloader" badguy
BrowserMatch "ReGet" badguy
BrowserMatch "DLExpert" badguy
BrowserMatch "FlashGet" badguy
BrowserMatch "Offline Explorer" badguy
BrowserMatch "Teleport" badguy
...........
order deny,allow
deny from env=badguy
allow from all
注意httpd里面应该有 mod_setenvif模块。
在你的apache的conf文件里面加入
LoadModule limitipconn_module lib/apache/mod_limitipconn.so
ExtendedStatus On
6.安装modsecurity(mod_security 可以加强apache的安全性,特别是在防sql 注入上有很好的效果。)
下载站点:http://www.modsecurity.org/download/
# /usr/local/httpd220/bin/apxs -cia mod_security.c
打开httpd.conf查看是否有如下文字加入
在httpd.conf中添加下列一段mod_security的配置文件
LoadModule security_module modules/mod_security.so
<IfModule mod_security>
SecFilterEngine On
SecFilterCheckURLEncoding On
SecFilterDefaultAction "deny,log,status:500"
#SecFilterForceByteRange 32 126
#SecFilterScanPOST On
SecAuditLog logs/audit_log
###
SecFilter "\.\./"
#####
SecFilter /etc/*passwd
SecFilter /bin/*sh
#for css attack
SecFilter "<( | *scrīpt"
SecFilter "<(.| +>"
#for sql attack
SecFilter "delete[ ]+from"
SecFilter "insert[ ]+into"
SecFilter "select.+from"
SecFilter "union[ ]+from"
SecFilter "drop[ ]"
</IfModule>
四、滚卷log
编译前设置export CFLAGS="-O2 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE"
使其支持2G以上文件。
ErrorLog "|/usr/local/sbin/cronolog /usr/local/apache2.2/logs/error_%Y%m%d.log"
CustomLog "|/usr/local/sbin/cronolog /usr/local/apache2.2/logs/access_%Y%m%d.log" combined
用gzip压缩每天的日志:
30 4 * * * /usr/bin/gzip -f /home/apache/logs/`date -d yesterday +%w`/access_log
日志的定期删除:
30 5 * * */usr/bin/find /home/apache/logs/ -name access_log.gz -mtime +3 |xargs -r /bin/rm -f
运行语法检查命令检查语法,出现错误后继续调整。
# ./bin/apachectl -t
html网页跳转
<title>index.html</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta http-equiv="refresh" content="0;url=http://210.51.8.179:81">
使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
MaxMysqlThread=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 可以在这里找到 :http://subversion.tigris.org/project_packages.html
检查已安装的 Apache2 是否已经安装了 mod_dav
如果已经成功安装了Apache,使用 httpd -M 来查看有没有安装 dav_module,如果没有的话 必须附加 ‘–enable-dav’ ‘–enable-dav-fs’ 两个参数重新编译 Apache,否则即使编译通过了svn,apache也会启动不起来.
编译APACHE2.2
修改部分源代码
# 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
编译配置
优化编译选项及配置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 \
> --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
# 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/conf/httpd.conf
把daemon改为nobody
User nobody
Group 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/libapr-1.la,srclib/apr-util/libaprutil-1.la 两个文件,找不到而make error.
解决办法:/usr/local/apache2/lib/ 中找到,将其复制到源代码文件夹相应的位置中.
UPDATE!!!
使用 BerkeleyDB 保存数据
安装 BerkeleyDB
cd /usr/local/src
$ wget http://downloads.sleepycat.com/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 中自动加上
LoadModule 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 svn.yousite.com:443
ServerAdmin webmaster@yousite.com
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
更详细的配置说明文档 http://svnbook.red-bean.com/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
详细的说明文档:http://svnbook.red-bean.com/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
参考
http://subversion.tigris.org/faq.html [FAQ]
http://svnbook.red-bean.com/ [文档]
http://www.svnforum.org/ [论坛]
http://d.hatena.ne.jp/cooldaemon/searchdiary?word=%2a%5bSubversion%5d
http://artis.imag.fr/~Xavier.Decoret/resources/svn/index.html
http://www.germane-software.com/~ser/R_n_R/subversion.html#ftn.N45
http://zen.sh.nu/book/zh/index.html
http://www.idouye.com 爱豆叶资料分享
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.3/bin/apxs -c -i -a mod_limitipconn.c
/usr/local/apache2.2/bin/apxs -c -i -a mod_evasive20.c
更改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.3 --enable-mods-shared=all --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/Includes/*.conf
修改MPM(多道处理器)参数
# cd /usr/local/apache2.2
# vi conf/extra/httpd-mpm.conf
找到如下选项,并改成对应的数值
<IfModule mpm_worker_module>
ServerLimit 64
ThreadLimit 128
StartServers 8
MaxClients 8192
MinSpareThreads 64
MaxSpareThreads 256
ThreadsPerChild 128
MaxRequestsPerChild 0
</IfModule>
ServerLimit 64
ThreadLimit 64
StartServers 8
MaxClients 4096
MinSpareThreads 64
MaxSpareThreads 256
ThreadsPerChild 64
MaxRequestsPerChild 500
测试过的配置:<IfModule mpm_worker_module>
ServerLimit 32
ThreadLimit 64
StartServers 8
MaxClients 2048
MinSpareThreads 64
MaxSpareThreads 256
ThreadsPerChild 64
MaxRequestsPerChild 0
</IfModule>
修改apache2.2子进程所有者
# vi /usr/local/apache2.2/conf/httpd.conf
把daemon改为nobody
User nobody
Group nobody
一般说来,可以不需要的模块包括:
#LoadModule env_module libexec/mod_env.so
#LoadModule negotiation_module libexec/mod_negotiation.so
#LoadModule status_module libexec/mod_status.so
#server side include已经过时了
#LoadModule includes_module libexec/mod_include.so
#不需要将没有缺省index文件的目录下所有文件列出
#LoadModule autoindex_module libexec/mod_autoindex.so
#尽量不使用CGI:一直是Apache安全问题最多的地方
#LoadModule cgi_module libexec/mod_cgi.so
#LoadModule asis_module libexec/mod_asis.so
#LoadModule imap_module libexec/mod_imap.so
#LoadModule action_module libexec/mod_actions.so
#不使用安全认证可以大大提高访问速度
#LoadModule access_module libexec/mod_access.so
#LoadModule auth_module libexec/mod_auth.so
#LoadModule setenvif_module libexec/mod_setenvif.so
最好保留的有:
#用于定制log格式
LoadModule config_log_module libexec/mod_log_config.so
#用于增加文件应用的关联
LoadModule mime_module libexec/mod_mime.so
#用于缺省index文件:index.php等
LoadModule dir_module libexec/mod_dir.so
可用可不用的有:
#比如:需要在~/username/下调试php可以将
LoadModule userdir_module libexec/mod_userdir.so
#比如:需要将以前的URL进行转向或者需要使用CGI scrīpt-alias
LoadModule alias_module libexec/mod_alias.so
三、配置模块
1.配置静态页面压缩输出模块deflate
使用mod_deflate模块
在httpd.conf中加入以下设置:
SetOutputFilter DEFLATE
DeflateFilterNote ratio
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary
或者
DeflateFilterNote ratio
AddOutputFilterByType DEFLATE text/*
AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscrīpt
两种配置方法的作用差不多,其目的主要是把一些不必要压缩的文件禁止压缩。
2.配置mod_cache模块
# cd /usr/local/apache2.2/conf/Includes
# vi mod_cache.conf
在配置文件里添加如下语句
<IfModule mod_cache>
LoadModule disk_cache_module modules/mod_disk_cache.so
<IfModule mod_disk_cache>
CacheRoot /
CacheSize 256
CacheEnable disk /
CacheDirLevels 5
CacheDirLength 3
</IfModule>
LoadModule mem_cache_module modules/mod_mem_cache.so
<IfModule mod_mem_cache>
CacheEnable mem /
MCacheSize 4096
MCacheMaxObjectCount 100
MCacheMinObjectSize 1
MCacheMaxObjectSize 2048
</IfModule>
</IfModule>
vi /usr/local/apache2/conf/httpd.conf
在末尾添加上:
CacheForceCompletion 100
CacheDefaultExpire 3600
CacheMaxExpire 86400
CacheLastModifiedFactor 0.1
设置虚拟目录
然后保存退出。启动apache
参数的解释:
mod_cache:
CacheEnable: 启动 mod_cache,其后接两个参数。第一个参数指定快取的种类,应设为 mem (记忆体快取) 或 disk (磁碟快取) 之其一;第二个参数指定使用快取的 URI 路径,如果对整个网站 (或虚拟主机) 进行快取,简单指定为根目录(/) 即可。
CacheForceCompletion: 这个值指定当 HTTP request 被取消时,内容的产生动作要完成的百分比;预设是 60(%)。
CacheDefaultExpire: 指定快取的预设过期秒数;预设值是一小时 (3600)。
CacheMaxExpire: 指定快取最大的过期秒数;预设值是一天 (86400)。
CacheLastModifiedFactor: 用来从回应里 Last Modified 资讯算出 expire date。
计算方式是:
expire period (过期时距) = 最后更新后至今的时间间距 * CacheLastModifiedFactor
而
expire date = 目前时间 + expire period
不过无论如何,过期时间不能超过 CacheMaxExpire 的设定值。
现在。如果用squid对该服务器进行反向代理的话,就可以通过cache 实现web的加速了
3.配置mod_expires模块
mod_expires可以减少10%左右的重复请求,让重复的用户对指定的页面请求结果都CACHE在本地,根本不向服务器发出请求。
mod_expires的安装配置:
<IfModule mod_expires>
ExpiresActive on
ExpiresByType image/gif "access plus 1 month"
ExpiresByType text/css "now plus 1 month"
ExpiresDefault "now plus 1 day"
</IfModule>
注释:
所有的.gif文件1个月以后过期
所有的文件缺省1天以后过期
4.配置dosevasive模块
/usr/local/apache2.2/bin/apxs -i -a -c mod_dosevasive20.c
编辑httpd.conf,加入以下内容:
LoadModule dosevasive20_module modules/mod_dosevasive20.so
<IfModule mod_dosevasive20>
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10
</IfModule>
5.配置mod_limitipconn模块
mod_limitipconn.c是一个非官方的apache防止多线程下载模块,可以用来作为WEB文件的下载限制,但是它是使用ExtendedStatus On形式,工作在应用层。当同一个IP的连接到达限制的时候,apache对get请求发送:
HTTP/1.1 503 Service Temporarily Unavailable
从而使用户不能下载,但并不能阻止这种攻击,仍旧允许连接的。
# /usr/local/apache2.2/bin/apxs -c -i -a mod_limitipconn.c
修改apache配置文件:
# vi /usr/local/apache/conf/httpd.conf
同时需要设置以下参数在 httpd.conf 中 , 也可以在单个虚拟服务器中。
ExtendedStatus On
修改配置文件:
1 全局控制:
在httpd.conf加上以下几行:
<IfModule mod_limitipconn>
<Location /> # 所有虚拟主机的/目录
MaxConnPerIP 3 # 每IP只允许3个并发连接
NoIPLimit image/* # 对图片不做IP限制
</Location>
<Location /mp3> # 所有主机的/mp3目录
MaxConnPerIP 1 # 每IP只允许一个连接请求
OnlyIPLimit audio/mpeg video # 该限制只对视频和音频格式的文件
</Location >
</IfModule>
2 局部限制,你也可以在虚拟主机的配置文件里设置IP限制,方法是完全一样:
< VirtualHost xx.xxx.xx.xx >
ServerAdmin chenlf@chinalinuxpub.com
ServerName server.domain.com
ServerAlias *.domain.com
UseCanonicalName OFF
VirtualDocumentRoot /htdoc/domain/%1
< IfModule mod_limitipconn.c >
< Location / > # 所有虚拟主机的/目录
MaxConnPerIP 5 # 每IP只允许3个并发连接
NoIPLimit image/* # 对图片不做IP限制
< /Location >
< Location /mp3 > # 所有主机的/mp3目录
MaxConnPerIP 2 # 每IP只允许一个连接请求
OnlyIPLimit audio/mpeg video # 该限制只对视频和音频格式的文件
< /Location >
< /IfModule >
ErrorLog /home/my/logs/error_log
CustomLog /home/my/logs/access_log common
< /VirtualHost >
重启apache,用多线程的下载工具下载时,大于3个线程,其余的将得到信息:
HTTP/1.1 503 Service Temporarily Unavailable
或者根据User_Agent判断,把已知的多线程工具都给deny 掉
in httpd.conf
.....
BrowserMatch "NetAnt" badguy
BrowserMatch "GetRight" badguy
BrowserMatch "JetCar" badguy
BrowserMatch "Mass Downloader" badguy
BrowserMatch "ReGet" badguy
BrowserMatch "DLExpert" badguy
BrowserMatch "FlashGet" badguy
BrowserMatch "Offline Explorer" badguy
BrowserMatch "Teleport" badguy
...........
order deny,allow
deny from env=badguy
allow from all
注意httpd里面应该有 mod_setenvif模块。
在你的apache的conf文件里面加入
LoadModule limitipconn_module lib/apache/mod_limitipconn.so
ExtendedStatus On
6.安装modsecurity(mod_security 可以加强apache的安全性,特别是在防sql 注入上有很好的效果。)
下载站点:http://www.modsecurity.org/download/
# /usr/local/httpd220/bin/apxs -cia mod_security.c
打开httpd.conf查看是否有如下文字加入
在httpd.conf中添加下列一段mod_security的配置文件
LoadModule security_module modules/mod_security.so
<IfModule mod_security>
SecFilterEngine On
SecFilterCheckURLEncoding On
SecFilterDefaultAction "deny,log,status:500"
#SecFilterForceByteRange 32 126
#SecFilterScanPOST On
SecAuditLog logs/audit_log
###
SecFilter "\.\./"
#####
SecFilter /etc/*passwd
SecFilter /bin/*sh
#for css attack
SecFilter "<( | *scrīpt"
SecFilter "<(.| +>"
#for sql attack
SecFilter "delete[ ]+from"
SecFilter "insert[ ]+into"
SecFilter "select.+from"
SecFilter "union[ ]+from"
SecFilter "drop[ ]"
</IfModule>
四、滚卷log
编译前设置export CFLAGS="-O2 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE"
使其支持2G以上文件。
ErrorLog "|/usr/local/sbin/cronolog /usr/local/apache2.2/logs/error_%Y%m%d.log"
CustomLog "|/usr/local/sbin/cronolog /usr/local/apache2.2/logs/access_%Y%m%d.log" combined
用gzip压缩每天的日志:
30 4 * * * /usr/bin/gzip -f /home/apache/logs/`date -d yesterday +%w`/access_log
日志的定期删除:
30 5 * * */usr/bin/find /home/apache/logs/ -name access_log.gz -mtime +3 |xargs -r /bin/rm -f
运行语法检查命令检查语法,出现错误后继续调整。
# ./bin/apachectl -t
html网页跳转
<title>index.html</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta http-equiv="refresh" content="0;url=http://210.51.8.179:81">
使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
MaxMysqlThread=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 可以在这里找到 :http://subversion.tigris.org/project_packages.html
检查已安装的 Apache2 是否已经安装了 mod_dav
如果已经成功安装了Apache,使用 httpd -M 来查看有没有安装 dav_module,如果没有的话 必须附加 ‘–enable-dav’ ‘–enable-dav-fs’ 两个参数重新编译 Apache,否则即使编译通过了svn,apache也会启动不起来.
编译APACHE2.2
修改部分源代码
# 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
编译配置
优化编译选项及配置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 \
> --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
# 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/conf/httpd.conf
把daemon改为nobody
User nobody
Group 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/libapr-1.la,srclib/apr-util/libaprutil-1.la 两个文件,找不到而make error.
解决办法:/usr/local/apache2/lib/ 中找到,将其复制到源代码文件夹相应的位置中.
UPDATE!!!
使用 BerkeleyDB 保存数据
安装 BerkeleyDB
cd /usr/local/src
$ wget http://downloads.sleepycat.com/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 中自动加上
LoadModule 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 svn.yousite.com:443
ServerAdmin webmaster@yousite.com
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
更详细的配置说明文档 http://svnbook.red-bean.com/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
详细的说明文档:http://svnbook.red-bean.com/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
参考
http://subversion.tigris.org/faq.html [FAQ]
http://svnbook.red-bean.com/ [文档]
http://www.svnforum.org/ [论坛]
http://d.hatena.ne.jp/cooldaemon/searchdiary?word=%2a%5bSubversion%5d
http://artis.imag.fr/~Xavier.Decoret/resources/svn/index.html
http://www.germane-software.com/~ser/R_n_R/subversion.html#ftn.N45
http://zen.sh.nu/book/zh/index.html
http://www.idouye.com 爱豆叶资料分享
发表评论
-
CentOS 下管理自定义 PHP 计划任务代码的守护进程脚本
2012-02-17 15:32 2116from http://micate.me/centos-ph ... -
CentOS 6 架設 apache + php + mysql
2012-02-17 15:29 14561.Download Centos 6 Minimail CD ... -
新_CentOS 6下搭建Apache+MySQL+PHP+SSL
2012-02-17 15:22 1223CentOS 6下搭建Apache+MySQL+PHP+SSL ... -
CentOS 5.5+Apache+PHP+MySQL 5部署笔记(更新)
2012-02-17 14:54 1673[日期:2011-05-06] 来源:Linux社区 作者: ... -
定制Apache的防盗链模块 Mod_perl<1>
2011-05-28 12:20 1427from http://bbs.chinaunix.net/v ... -
详细解析用Squid实现反向代理的方法
2011-05-06 18:04 1003from http://tech.ccidnet.com/a ... -
apache与Tomcat整合配置文档[windows].txt
2011-04-06 11:20 12871\下载的软件(可以从此网址下载得到http://www.a ... -
apache 防盗链
2011-03-27 23:11 18372010-09-25 22:09apche有rewrite_m ... -
apache modperl防盗链
2011-03-27 23:02 11652010-09-25 21:41定制Apache的 ... -
很好的一个运维博客
2011-01-26 17:05 1036陈子的学前班笔记(很值得一看) http://blog.si ... -
apache防盗链(mod_perl试用二)
2011-01-26 17:03 949引用(2010-05-27 00:07:01) 转 ... -
apache 防盗链,限带宽和连接数
2011-01-26 16:59 1135防盗链原理: http标准协议中有专门的字段记录referer ... -
Apache 防盗链(Apache Anti-Leech)技术的简单实现
2011-01-26 16:49 1052引用. 使用 rewrite 技术实现 Apache 防盗链 ... -
Linux上Apache反向代理之ProxyPass IIS网站总结
2010-08-19 13:53 2227Linux上Apache反向代理之ProxyPass IIS网 ... -
Apache的ProxyPass指令详解
2010-08-19 13:33 2147文章分类:JavaEye 关键字: ... -
Windows下安装多个Apache服务
2010-08-18 09:59 1310安装好Apache以后,可以 ... -
apachemod_proxy 集群
2010-07-06 10:58 816下面以在apachemod_proxy下做的反向代理负载均衡为 ... -
Apache RewriteRule的标志一览
2010-06-30 11:38 1122也可请参考下面网址 http://res.phpchina.c ... -
apache2.2 tomcat6.0 负载均衡集群整理配置
2010-06-28 15:24 2055worker.list=controller,tomcat1, ...
相关推荐
"WLSPlugin12.2.1.4.0-Apache2.2-Apache2.4-Linux_x86_64-12.2.1.4.0.zip" 是一个包含WebLogic Plugin的压缩包,适用于Apache 2.2和2.4版本,且专为Linux x86_64架构设计。 **WebLogic Plugin**: WebLogic Plugin...
本篇文章详细介绍了在 Linux 操作系统下安装和配置 Apache2.2.x、MySql5.x 和 PHP5.x 的步骤,使用的操作系统为 Redhat AS5,内核版本为 Linux 2.6.18-8.el5,但其他 Linux 版本也可以参考。 知识点一:下载所需...
4. 更好的性能:通过优化内存管理和请求处理流程,Apache 2.2在处理高并发请求时表现更佳。 5. 错误日志改进:允许更精确地控制错误日志的记录级别和位置,便于故障排查。 三、Apache 2.2中文手册 1. 安装指南:...
Apache2.2是其一个重要的版本,提供了许多增强的功能和优化。在Linux环境下安装Apache2.2的步骤如下: 1. **获取安装包**:首先,你需要下载Apache2.2的源码安装包,例如Apache2.2.19的源码包`apache_2.2.19.tar.gz...
4. **性能优化**:Apache 2.2提供了多种性能优化策略,如MPM(多进程模块)的选择,预读取(Prefork)、线程化(Worker)或者事件驱动(Event)模式,以及缓存机制和GZIP压缩等。 5. **错误处理与调试**:手册会...
2. 性能优化:启用缓存模块(如mod_expires和mod_deflate),调整KeepAlive选项,限制并发连接数,优化日志记录级别以减少磁盘I/O。 总结,Apache 2.2作为Web服务器为PHP应用程序提供了稳定的基础。正确安装、配置...
描述中的 "线程安全"(ZTS)意味着这个扩展在多线程环境下可以正常工作,这意味着它已经处理了可能出现的并发问题,确保了不同线程之间的数据同步和一致性。在 PHP 的上下文中,ZTS 版本是为了在 Apache 的多线程 ...
这个中文使用手册提供了关于如何安装、配置、管理和优化Apache2.2的详细指南,对于开发者和系统管理员来说是宝贵的资源。以下是手册中可能包含的一些关键知识点: 1. **安装Apache2.2**: - Windows、Linux、Mac ...
1. 安装过程:在不同的操作系统上(如Linux、Windows、Mac OS)安装Apache 2.2的步骤有所不同。通常涉及下载源码或预编译二进制包,然后按照官方文档进行编译或直接安装。 2. 配置文件:Apache的主要配置文件是`...
这个版本的Apache HTTPD是高度优化且稳定,提供了一个高效、安全的平台来托管网页内容和服务。 Apache HTTPD 2.4系列是Apache服务器的一个主要分支,引入了许多新特性和改进。其中一些关键特性包括: 1. **模块化...
在Linux 64位系统上安装Apache 2.2是一个常见的任务,对于系统管理员和开发者来说,理解这个过程是至关重要的。Apache HTTP Server是世界上最流行的Web服务器软件,它提供了稳定、安全和高效的网页托管环境。以下是...
3. **性能优化**:Apache 2.2引入了更好的多线程支持和连接处理策略,如预读取和Keep-Alive连接,提高了服务器处理高并发请求的能力。 4. **配置改进**:配置文件的语法有所优化,更易理解和管理。例如,可以使用...
标题中的“64位win7环境下apache2.2”指的是在Windows 7 64位操作系统上安装和配置Apache HTTP服务器的2.2版本。Apache HTTP Server是世界上最流行的开源Web服务器,它提供了一个稳定、安全且可扩展的平台来托管网站...
Apache HTTP Server 2.2是Apache软件基金会的一个开源Web服务器项目,它在互联网上广泛部署,为各种网站和应用程序...对于开发者和管理员来说,深入了解Apache 2.2的配置和管理,对于提升网站性能和服务质量至关重要。
Apache2.2是Apache HTTP Server的一个重要版本,提供了丰富的功能和优化,是互联网上许多网站的基础。 Apache HTTP Server是开源的、跨平台的Web服务器,它支持多种操作系统,包括Windows、Linux、Unix等。Apache...
这个名为“Apache2.2中文手册”的压缩包提供了一份详细的中文指南,旨在帮助用户更好地理解和操作Apache 2.2版本。Apache 2.2是Apache服务器的一个稳定版本,发布于2006年,它包含了许多改进和新特性,旨在提升性能...
4. **性能优化**:Apache2.2手册还涵盖性能调整策略,如使用预加载(mod_prefork)或线程化模型(mod_mpmt),以及如何通过调整MaxClients、KeepAliveTimeout等参数来提高服务器响应速度和处理能力。 5. **日志和...
本备忘录主要关注如何在Windows上配置Apache2.2与Tomcat5.5,同时利用Apr(Apache Portable Runtime)库提升性能。 Apache2.2是世界上最流行的开源HTTP服务器,它处理静态文件非常高效。而Tomcat5.5则是一个开源的...
1. **安装与配置**:包括如何在不同操作系统(如Windows、Linux、Unix等)上安装Apache2.2,以及如何进行基本的配置,如设置服务器监听端口、修改默认的DocumentRoot(文档根目录)等。 2. **配置文件结构**:...