Apache + SSL + SVN 版本控制系统配置文档

星期二, 十二月 15th, 2009

本文在CentOS 5.3平台通过测试;最后修改于2009-12-15
源码下载

Subversion简介
Subversion(SVN)被称为是CVS的下一代版本管理器,在版本管理的特性上有着许多独特的优势。不仅可以管理程序源代码,而且也可用于文档或其他相关资料的管理。我们建议,在团队今后的项目当中尽量使用SVN进行软件版本管理。此文档将简要的叙述如何使用SVN客户端和配置SVN服务器。

SVN是一系列的库,它与一个命令行的客户端相互配合工作。有两类不同的SVN服务器进程,包括一个svnserve进程,这是一个类似CVS的pserver进程的独立运行程序,svnserve进程可以说是一个常用协议,配置相对简单;另一个是使用mod_dav_svn模块的Apache 2.0,而mod_dav_svn进程使用了WebDAV作为它的网络协议。本文选择用 Apache + SSL + SVN,可以通过标准的 http/https来提供服务。

SVN可以使用两种数据存储方式: Berkeley DB 和 FSFS。 Berkeley DB 的优势在于其成熟性,但需要更多的日常管理和维护,并且是平台依赖的。所以我选择更简便的 FSFS。

安装 zlib

tar zxvf zlib-1.2.3.tar.gz
cd zlib-1.2.3
./configure --prefix=/usr/local/zlib
make
make install

安装 openssl

tar zxvf openssl-0.9.8l.tar.gz
cd openssl-0.9.8l
./config shared zlib
make
make test
make install
 
创建连接
mv /usr/bin/openssl /usr/bin/openssl.OFF
mv /usr/include/openssl /usr/include/openssl.OFF
rm -rf /usr/lib/libssl.so
ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/ssl/include/openssl /usr/include/openssl
ln -sv /usr/local/ssl/lib/libssl.so.0.9.8 /usr/lib/libssl.so
 
配置库文件搜索路径
echo "/usr/local/ssl/lib" >> /etc/ld.so.conf
ldconfig -v
 
检测安装结果
openssl version

安装 apr

tar xzvf apr-1.3.9.tar.gz
cd apr-1.3.9
./configure --prefix=/usr/local/apr
make
make install
cd ..

安装 apr-util

tar xzvf apr-util-1.3.9.tar.gz
cd apr-util-1.3.9
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
make
make install
cd ..

安装 apache

tar zxvf httpd-2.2.14.tar.gz
cd httpd-2.2.14
./configure --prefix=/usr/local/apache --enable-so --enable-mods-shared=all --enable-track-vars \
--enable-rewrite --enable-cgi --with-zlib --enable-suexec --enable-cache --enable-disk-cache \
--enable-mem-cache --with-mpm=prefork --enable-ssl --with-ssl=/usr/local/ssl --with-expat=builtin \
--with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-dav --enable-dav-fs \
--with-included-apr --enable-maintainer-mode
make
make install
cd ..

安装 neon

tar zxvf neon-0.29.0.tar.gz
cd neon-0.29.0
./configure --prefix=/usr/local/neon
make
make install
cd ..

安装 sqlite
CentOS5.3系统自带sqlite版本为sqlite-3.3.6;而subversion-1.6.6至少需要sqlite-3.4.0(官方推荐3.6.13;这里我们选择最新的3.6.21)版本以上。
有2种办法可以解决:
第一种方法:下载 sqlite-amalgamation-3.6.21.tar.gz;解压后命名为sqlite-amalgamation,移动subversion源码目录下即可。
第二种方法:下载 sqlite-3.6.21.tar.gz 编译安装,本文使用此方法。

tar zxvf sqlite-3.6.21.tar.gz
cd sqlite-3.6.21
./configure --prefix=/usr/local/sqlite
make
make install
cd ..

安装 subversion

export LC_ALL=en_US
tar zxvf subversion-1.6.6.tar.gz
cd subversion-1.6.6
./configure --prefix=/usr/local/subversion --with-apxs=/usr/local/apache/bin/apxs --with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr-util --with-ssl=/usr/local/ssl --with-zlib=/usr/local/zlib \
--with-neon=/usr/local/neon --with-sqlite=/usr/local/sqlite  --enable-maintainer-mode
make
make install
cd ..

如果make过程中报如下错误:
/usr/bin/ld: /usr/local/zlib/lib/libz.a(deflate.o): relocation R_X86_64_32S against `a local symbol' can not be
used when making a shared object; recompile with -fPIC
/usr/local/zlib/lib/libz.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
make: *** [subversion/libsvn_subr/libsvn_subr-1.la] error 1
请参照: 解决安装软件时的/usr/local/lib/libz.a(compress.o)错误
配置 SVN

待续。。。

PHP5+Apache2 worker MPM问题

星期四, 三月 19th, 2009

搭建SVN服务器的时候需要重新编译apache,重新编译之后 启动Apache 就报错了:Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe. You need to recompile PHP. Pre-configuration failed!

据说PHP5不建议和Apache的 worker MPM 搭配使用,但之前就是拿 PHP 5.2.6 + Apache 2.2.8 worker MPM 来跑服务,效果貌似挺好。网上通常说的使用 --with-experimental-zts 参数以及 --enable-maintainer-zts 参数统统试了一遍,结果编 PHP 的时候就通不过了。只有改成使用 prefork MPM。

困扰了N久,最后才发现是因为重编 PHP 的时候加了 --with-openssl 把openssl 模块加进去了的缘故,去掉这个模块就又可以正常与 worker MPM 搭配了。

启动APACHE出现“error while loading shared libraries: libiconv.so.2”

星期四, 三月 5th, 2009

安装好apache后无法启动,出现如下错误:
error while loading shared libraries: libiconv.so.2: cannot open shared object file: No such file or directory

# ldd /usr/local/apache/bin/httpd
会看到这么一行
libiconv.so.2 => Not found

以前编译运行是可以的,可能是不久前升级了iconv库影响。在/usr/local/lib下可以找到libiconv.so.2,把/usr/local/lib加到路径中也不行。
在/etc/ld.so.conf中加一行/usr/local/lib,运行ldconfig。再运行apache,OK。
ld.so.conf和ldconfig是维护系统动态链接库的。真不明白为什么iconv库安装时不把这一步也做了

Apache服务器实现用户验证

星期二, 十二月 23rd, 2008

apache服务器已经内置用户验证机制,大家只要适当的加以设置,便可以控制网站的某些部分要用户验证。大家只要跟着我一步步做下来就应该能轻松实现用户验证。

第1步:

我们在/var/www/html(apache的主页根目录)下建立一个test目录

mkdir /var/www/html/test

第2步

然后我们编辑httpd.conf

添加
Alias /test"/var/www/html/test"

Options Indexes MultiViews
AllowOverride AuthConfig #表示进行身份验证
Order allow,deny
Allow from all


#AllowOverride AuthConfig 表示进行身份验证 这是关键的设置

第3步

在/var/www/html/test创建.htaccess文件
vi /var/www/html/test/.htaccess

AuthName "ai77.org"
AuthType Basic
AuthUserFile /var/www/html/test/.htpasswd
require valid-user

#AuthName 描述,随便写
#AuthUserFile /var/www/html/test/.htpasswd
#require valid-user 或者 require user username 限制是所有合法用户还是指定用户

#密码文件推荐使用.htpasswd,因为apache默认系统对“.ht”开头的文件默认不允许外部读取,安全系数会高一点哦。

第4步

就是创建apache的验证用户

htpasswd -c /var/www/html/test/.htpasswd seven

#第一次创建用户要用到-c 参数 第2次添加用户,就不用-c参数

如果你们想修改密码,可以如下

htpasswd -m .htpasswd seven

第5步:

ok,重启apache服务,然后访问 http://你的网站地址/test 如果顺利的话,应该能看到一个用户验证的弹出窗口,只要填入第4步创建的用户名和密码就行

后话,为了服务器的性能,一般不推荐使用AllowOverride AuthConfig或者AllowOverride ALL,因为这会使服务器会不断的去寻找.htaccess,从而影响服务器的效能,一般我们把一些后台管理界面或者其他特殊目录可能需要加验证这个需求。

Apache无法启动:mod_unique_id: unable to find IPv4 address

星期一, 十二月 15th, 2008

Redhat  Linux 服务器,在重启后发现Apache启动失败,在Apache的日志文件中有如下的错误信息:

[Thu Aug 27 04:20:44 2008] [alert] (22002)Name or service not known: mod_unique_id: unable to find IPv4 address of "S80" Configuration Failed!

查了一些资料后,发现在/etc/hosts中添加一行

127.0.0.1    S80 localhost

就可以正常启动Apache了。

另在httpd.conf 中注释掉mod_unique_id也可以启动,但是不知道有什么影响。

原因:前几天修改过hostname,机器没有重启过,可能新的主机名还没写到/etc/hosts中。所以/etc/hosts中那一行没有新主机名,而是原来旧主机名;所以apache无法启动。看来以后修改主机名不但要修改/etc/sysconfig/network文件,hosts文件也要同时修改,这样避免出问题了