Apache是个好东西,多研究一下
这个是属于apache的设置,虽然我已经基本上没有用apache了,可发现此说明,还是记录一下,以后备用,很多知识还是通用的,碰到问题可以参考。
以下是整理过的原文:
.htaccess可以做大量范围的事情,包括:文件夹密码保护、用户自动重新指向、自定义错误页面、变更你的文件扩展名、屏蔽特定的用户IP地址、只允许特定的IP地址、停止目录表以及使用其他文件作为index文件,等等......
1. Introduction 介绍
文件名 .htaccess 属性 644 (RW-R–R–)
htaccess会影响它所在目录下的所有子目录
注意大多数内容都要求保持在一行之内,不要换行,否则会引起错误
2. Error Documents 错误文档
Official document: ErrorDocument Directive
ErrorDocument code document
例子
ErrorDocument 400 /errors/badrequest.html
ErrorDocument 404 http://yoursite/errors/notfound.html
ErrorDocument 401 “Authorization Required”
(注意之后内容如果出现的双引号需要转义为 \”)
以下是整理过的原文:
.htaccess可以做大量范围的事情,包括:文件夹密码保护、用户自动重新指向、自定义错误页面、变更你的文件扩展名、屏蔽特定的用户IP地址、只允许特定的IP地址、停止目录表以及使用其他文件作为index文件,等等......
1. Introduction 介绍
文件名 .htaccess 属性 644 (RW-R–R–)
htaccess会影响它所在目录下的所有子目录
注意大多数内容都要求保持在一行之内,不要换行,否则会引起错误
2. Error Documents 错误文档
Official document: ErrorDocument Directive
ErrorDocument code document
例子
ErrorDocument 400 /errors/badrequest.html
ErrorDocument 404 http://yoursite/errors/notfound.html
ErrorDocument 401 “Authorization Required”
(注意之后内容如果出现的双引号需要转义为 \”)

几天前阿权和陕兄调整服务器,陕兄和我一样头晕,他居然把一个机器的ssh远程登录服务去掉,然后重启了,结果直接叫机房帮忙开服务了。而我却忘记把apache的mpm模式的注释打开了,但我们找问题找了快一个小时,我还以为是服务器硬盘很有问题,差点去找另外一个服务器做尝试,陕兄也差点希望把原先的环境复制一份过来,后来发现了mpm没打开。
看看apache手册的说明:
引用
Apache HTTP服务器被设计为一个强大的、灵活的能够在多种平台以及不同环境下工作的服务器。不同的平台和不同的环境经常产生不同的需求,或是为了达到同样的最佳效果而采用不同的方法。Apache凭借它的模块化设计很好的适应了大量不同的环境。这一设计使得网站管理员能够在编译时和运行时凭借载入不同的模块来决定服务器的不同附加功能。
Apache2.0将这种模块化的设计延伸到了web服务器的基础功能上。这个版本带有多路处理模块(MPM)的选择以处理网络端口绑定、接受请求并指派子进程来处理这些请求。
将模块化设计延伸到这一层次主要有以下两大好处:
Apache可以更简洁、更有效地支持各种操作系统。尤其是在mpm_winnt中使用本地网络特性代替Apache1.3中使用的POSIX模拟层后,Windows版本的Apache现在具有更好的性能。这个优势借助特定的MPM同样延伸到了其他各种操作系统。
服务器可以为某些特定的站点进行定制。比如,需要更好伸缩性的站点可以选择象worker或event这样线程化的MPM,而需要更好的稳定性和兼容性以适应一些旧的软件的站点可以用prefork 。
从用户角度来看,MPM更像其他的Apache模块。主要的不同在于:不论何时,必须有且仅有一个MPM被载入到服务器中。现有的MPM列表可以在模块索引中找到。
Apache2.0将这种模块化的设计延伸到了web服务器的基础功能上。这个版本带有多路处理模块(MPM)的选择以处理网络端口绑定、接受请求并指派子进程来处理这些请求。
将模块化设计延伸到这一层次主要有以下两大好处:
Apache可以更简洁、更有效地支持各种操作系统。尤其是在mpm_winnt中使用本地网络特性代替Apache1.3中使用的POSIX模拟层后,Windows版本的Apache现在具有更好的性能。这个优势借助特定的MPM同样延伸到了其他各种操作系统。
服务器可以为某些特定的站点进行定制。比如,需要更好伸缩性的站点可以选择象worker或event这样线程化的MPM,而需要更好的稳定性和兼容性以适应一些旧的软件的站点可以用prefork 。
从用户角度来看,MPM更像其他的Apache模块。主要的不同在于:不论何时,必须有且仅有一个MPM被载入到服务器中。现有的MPM列表可以在模块索引中找到。
linux下默认安装是 prefork 模式:
引用
这个多路处理模块(MPM)实现了一个非线程型的、预派生的web服务器,它的工作方式类似于Apache 1.3。它适合于没有线程安全库,需要避免线程兼容性问题的系统。它是要求将每个请求相互独立的情况下最好的MPM,这样若一个请求出现问题就不会影响到其他请求。
这个MPM具有很强的自我调节能力,只需要很少的配置指令调整。最重要的是将MaxClients设置为一个足够大的数值以处理潜在的请求高峰,同时又不能太大,以致需要使用的内存超出物理内存的大小。
这个MPM具有很强的自我调节能力,只需要很少的配置指令调整。最重要的是将MaxClients设置为一个足够大的数值以处理潜在的请求高峰,同时又不能太大,以致需要使用的内存超出物理内存的大小。
如果没有打开,默认的连接数量是很小的,所以一般不能满足正常的服务器需求。可以看到第一个图片的变化,连接数一定的情况下,包含了图片的访问,所以带宽占用比后段要多,把图片访问转移,则余下网页,带宽变小,但连接数还没变化,所以持续在一定的带宽占用而无法上涨。后来打开了mpm的设置,设置好StartServers, MinSpareServers, MaxSpareServers, MaxClients就正常了,代码也是从别的地方参考的,自行调节:
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 4000
MaxClients 4000
MaxRequestsPerChild 0
</IfModule>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 4000
MaxClients 4000
MaxRequestsPerChild 0
</IfModule>
最近做apache优化,希望跟大家分享一下阿权的心得。

1 apache可以用redirect方式,把图片定义到别的服务器
如上图第一个红色框所示,流量变化就是图片切换的结果
图片交给另外的服务器处理会更加好,不用redirect更好,直接就引用
2 apache的deflate选项需要打开
以上其实是apache手册的代码,大家可以参考第一个图片的第二个红色框,可以减少大概四分之一的流量,虽然会对服务器cpu有一点提高,但是还是值得的。
3 apache的expire要打开
详情参考 《最近的Apache安装参数》
4 apache的防盗链的重要性

如果你不是做相册服务公司,比如flickr或者yupoo之类的,那一般还是得做防盗链,如上图所示,机器都跑到100M带宽,把服务器带宽都用完了,很是可恶,特别是哪些所谓的网盟,一下子就可以带来巨大的访问量,自己可就亏了。

1 apache可以用redirect方式,把图片定义到别的服务器
RedirectMatch /aslibra_pic/(.*) http://1.2.3.4/www.aslibra.com/pic/$1
#request http://www.aslibra.com/aslibra_pic/abc.jpg
#send to http://1.2.3.4/www.aslibra.com/pic/abc.jpg
#request http://www.aslibra.com/aslibra_pic/abc.jpg
#send to http://1.2.3.4/www.aslibra.com/pic/abc.jpg
如上图第一个红色框所示,流量变化就是图片切换的结果
图片交给另外的服务器处理会更加好,不用redirect更好,直接就引用
2 apache的deflate选项需要打开
############# gzip ############
<Location />
SetOutputFilter DEFLATE
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|swf|exe|ico)$ no-gzip dont-vary
Header append Vary User-Agent env=!dont-vary
</Location>
## www.aslibra.com ##
<Location />
SetOutputFilter DEFLATE
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|swf|exe|ico)$ no-gzip dont-vary
Header append Vary User-Agent env=!dont-vary
</Location>
## www.aslibra.com ##
以上其实是apache手册的代码,大家可以参考第一个图片的第二个红色框,可以减少大概四分之一的流量,虽然会对服务器cpu有一点提高,但是还是值得的。
3 apache的expire要打开
详情参考 《最近的Apache安装参数》
4 apache的防盗链的重要性

如果你不是做相册服务公司,比如flickr或者yupoo之类的,那一般还是得做防盗链,如上图所示,机器都跑到100M带宽,把服务器带宽都用完了,很是可恶,特别是哪些所谓的网盟,一下子就可以带来巨大的访问量,自己可就亏了。
<VirtualHost *:80>
DocumentRoot /Data/webapps/www.aslibra.com
ServerName www.aslibra.com
#可以记录日志查看哪些来源使用了图片,这里可能还记录了网页
#CustomLog "|/Data/apps/cronolog/sbin/cronolog /Data/logs/%Y/%m/%d/show.%m%d%H" combined env=!local_referal
SetEnvIf Referer "^http://(.*).aslibra.com/" local_referal
SetEnvIf Referer "^$" local_referal
<Directory /Data/webapps/www.aslibra.com/pic>
Order Deny,Allow
Deny from all
Allow from env=local_referal
</Directory>
</VirtualHost>
DocumentRoot /Data/webapps/www.aslibra.com
ServerName www.aslibra.com
#可以记录日志查看哪些来源使用了图片,这里可能还记录了网页
#CustomLog "|/Data/apps/cronolog/sbin/cronolog /Data/logs/%Y/%m/%d/show.%m%d%H" combined env=!local_referal
SetEnvIf Referer "^http://(.*).aslibra.com/" local_referal
SetEnvIf Referer "^$" local_referal
<Directory /Data/webapps/www.aslibra.com/pic>
Order Deny,Allow
Deny from all
Allow from env=local_referal
</Directory>
</VirtualHost>
最近阿权细看了一下apache的编译选项,特觉得这个就比较合适:
尝试这样的代码的过程可以小说明一下,文章后有相应的配置参考
1 默认安装,仅指定prefix
然后查看一下已经加载的模块
2 其实安装一般都是对模块的选择会有所需求,上面的命令可以知道已经安装了默认的模块,还需要哪些模块呢?也许得先摘抄一下apache手册的说明:
默认不选择模块,那就会安装好基本的模块,一般都需要的,如果是选择most,则包含基本模块和扩展模块,如果选择all,则真的是全部 ^_^
选择DSO方式到时候会有一堆的loadmodule,自己不需要的就可以注释掉
那其实我们一般都是选择安装哪些扩展模块就好了,哪些有用呢?
--enable-expires \
(可以添加文件过期的限制,有效减轻服务器压力,缓存在用户端,有效期内不会再次访问服务器,除非按f5刷新,但也导致文件更新不及时)
--enable-proxy \
(代理功能有必要,因为可以处理跨域问题以及可以分离一些其它的请求处理)
--enable-deflate \
(压缩功能,网页可以达到40%的压缩,节省带宽成本,但会对cpu压力有一点提高)
--enable-rewrite \
(可以做重新,比较实用,文件有变化时很好)
--enable-headers \
(文件头信息改写,压缩功能需要)
其它的扩展功能就可以参考手册了,这里不一一描述,仅描述阿权觉得比较实用的几个扩展模块,下面是摘录的配置方法(仅供参考):
./configure \
--prefix=/Data/apps/apache \
--enable-expires \
--enable-proxy \
--enable-deflate \
--enable-rewrite \
--enable-headers \
&& make && make install
--prefix=/Data/apps/apache \
--enable-expires \
--enable-proxy \
--enable-deflate \
--enable-rewrite \
--enable-headers \
&& make && make install
尝试这样的代码的过程可以小说明一下,文章后有相应的配置参考
1 默认安装,仅指定prefix
然后查看一下已经加载的模块
/Data/apps/apache/bin/apachectl -t -D DUMP_MODULES
2 其实安装一般都是对模块的选择会有所需求,上面的命令可以知道已经安装了默认的模块,还需要哪些模块呢?也许得先摘抄一下apache手册的说明:
引用
模块选项
有两种使用模块的方法:一是静态连接进核心,二是作为DSO模块动态加载;如果编译中包含任何DSO模块,则mod_so会被自动包含进核心。如果希望核心能够装载DSO,但不实际编译任何DSO模块,则需明确指定"--enable-so=static"。
一般语法
一般情况下你可以使用如下语法启用或者禁用某个模块:
--disable-MODULE
禁用MODULE模块(仅用于基本模块)
--enable-MODULE=shared
将MODULE编译为DSO(可用于所有模块)
--enable-MODULE=static
将MODULE静态连接进核心(仅用于扩展和实验模块)
--enable-mods-shared=MODULE-LIST
将MODULE-LIST中的所有模块都编译成DSO(可用于所有模块)
--enable-modules=MODULE-LIST
将MODULE-LIST静态连接进核心(可用于所有模块)
上述 MODULE-LIST 可以是:
(1)用引号界定并且用空格分隔的模块名列表
--enable-mods-shared='headers rewrite dav'
(2)"most"(大多数模块) (3)"all"(所有模块)
--enable-mods-shared=most
有两种使用模块的方法:一是静态连接进核心,二是作为DSO模块动态加载;如果编译中包含任何DSO模块,则mod_so会被自动包含进核心。如果希望核心能够装载DSO,但不实际编译任何DSO模块,则需明确指定"--enable-so=static"。
一般语法
一般情况下你可以使用如下语法启用或者禁用某个模块:
--disable-MODULE
禁用MODULE模块(仅用于基本模块)
--enable-MODULE=shared
将MODULE编译为DSO(可用于所有模块)
--enable-MODULE=static
将MODULE静态连接进核心(仅用于扩展和实验模块)
--enable-mods-shared=MODULE-LIST
将MODULE-LIST中的所有模块都编译成DSO(可用于所有模块)
--enable-modules=MODULE-LIST
将MODULE-LIST静态连接进核心(可用于所有模块)
上述 MODULE-LIST 可以是:
(1)用引号界定并且用空格分隔的模块名列表
--enable-mods-shared='headers rewrite dav'
(2)"most"(大多数模块) (3)"all"(所有模块)
--enable-mods-shared=most
引用
模块列表
基本(B)模块默认包含,必须明确禁用;扩展(E)/实验(X)模块默认不包含,必须明确启用。
(省略模块列表)
基本(B)模块默认包含,必须明确禁用;扩展(E)/实验(X)模块默认不包含,必须明确启用。
(省略模块列表)
默认不选择模块,那就会安装好基本的模块,一般都需要的,如果是选择most,则包含基本模块和扩展模块,如果选择all,则真的是全部 ^_^
选择DSO方式到时候会有一堆的loadmodule,自己不需要的就可以注释掉
那其实我们一般都是选择安装哪些扩展模块就好了,哪些有用呢?
--enable-expires \
(可以添加文件过期的限制,有效减轻服务器压力,缓存在用户端,有效期内不会再次访问服务器,除非按f5刷新,但也导致文件更新不及时)
--enable-proxy \
(代理功能有必要,因为可以处理跨域问题以及可以分离一些其它的请求处理)
--enable-deflate \
(压缩功能,网页可以达到40%的压缩,节省带宽成本,但会对cpu压力有一点提高)
--enable-rewrite \
(可以做重新,比较实用,文件有变化时很好)
--enable-headers \
(文件头信息改写,压缩功能需要)
其它的扩展功能就可以参考手册了,这里不一一描述,仅描述阿权觉得比较实用的几个扩展模块,下面是摘录的配置方法(仅供参考):
## www.aslibra.com
## code by hqlulu
############# gzip ############
<Location />
SetOutputFilter DEFLATE
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|swf|exe|ico)$ no-gzip dont-vary
Header append Vary User-Agent env=!dont-vary
</Location>
############# expire ############
<IfModule expires_module>
ExpiresActive On
ExpiresDefault "access plus 1 day"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType text/html "access plus 12 hours"
ExpiresByType text/css "access plus 12 hours"
ExpiresByType text/javascript "access plus 12 hours"
</IfModule>
############ proxy
#ProxyPass /aslibra http://aslibra.com/blog
#ProxyPassReverse /aslibra http://aslibra.com/blog
############ rewrite
RewriteEngine On
RewriteRule ^/blog/test[0-9]{1,}\.htm$ /blog/index.php
## code by hqlulu
############# gzip ############
<Location />
SetOutputFilter DEFLATE
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|swf|exe|ico)$ no-gzip dont-vary
Header append Vary User-Agent env=!dont-vary
</Location>
############# expire ############
<IfModule expires_module>
ExpiresActive On
ExpiresDefault "access plus 1 day"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType text/html "access plus 12 hours"
ExpiresByType text/css "access plus 12 hours"
ExpiresByType text/javascript "access plus 12 hours"
</IfModule>
############ proxy
#ProxyPass /aslibra http://aslibra.com/blog
#ProxyPassReverse /aslibra http://aslibra.com/blog
############ rewrite
RewriteEngine On
RewriteRule ^/blog/test[0-9]{1,}\.htm$ /blog/index.php
最近一直在发现自己的很多知识盲点 ^_^ ,其中之一就是cvs或者svn的知识。这个是多人工作的有效方式,曾经一次是处理后台程序的时候,两个人都不知道是什么情况下修改的,所以,如果有一个版本控制的软件,那其实非常棒,也知道每次修改是出于什么原因。
先解读一下基础知识然后再继续笔记内容:
1 什么是版本控制?
参考一下《Subversion 简介》:
2 版本控制流程是怎么样的?
版本控制一般是本机客户端从服务器上更新得到最新的一份文件,然后修改具体的文件,再更新到服务器,服务器管理好每个更新。如果文件同时分配到两个客户端,两个客户端提交更改,那只有一个可以更新,另外一个只能从新的版本修改提交更新,或者返回两个版本的文件,给你参考。
Subversion 可以使用基于http协议的WebDAV/DeltaV协议进行网络通讯,并由Apache服务器提供源码仓库方的网络浏览服务。这为 Subversion提供了比CVS更好的协同工作能力,并提供了各式各样的自由的关键特性:授权,基于路径的授权,线性压缩,以及基本源码仓库浏览。
3 如何重新编译软件?
首先是apache的配置,如果现有apache了,那就可以考虑更新了,但是问题来了,不能影响现有服务怎么办?我以前一头雾水,担心操作失误。那其实要添加模块文件的编译方法已经实践过了,见《如何向已经安装好的apache添加一个模块》
还有一个方法给已经编译的软件做修改,configure程序的参数是会被记录起来,放置到同目录的config.nice文件中,我是从apache的文档里面发现的:
所以,直接从文件里面就可以知道上次的参数,这样就不用担心重新编译会把某些功能丢失了,但至少你保留了源文件的情况哦。
4 如何配置apache和subversion?
人都是学习知道的,我参考了一下别人的方法,发现这篇文章不错:《SVN服务器搭建完全手册》,这个是看了很多文章知道的,因为我按照别的安装过程碰到问题在这里似乎都想到了。
阿权的服务器没有什么特别的,所以简单来讲,需要两个内容:
1 apache需要支持so,同时加载相应的svn模块
2 安装subversion时才会生成该模块,同时自动添加到apache的配置里,需要声明apr等的路径,否则不正常
apache的配置:
./configure --enable-dav --enable-so --enable-maintainer-mode
这个是subversion的INSTALL文件说明的参数,这个是跟subversion有关的,dav是验证模块,另外一个可以参考apache的手册,自行选择了:
上面是dav产生的两个模块,其实如果已经有这两个模块加载了,就不用重新编译apache,怎么看呢?phpinfo也可以简单的知道,有一个栏目是“apache2handler”,显示 Loaded Modules ,有这些模块就可以免得重新编译了。
subversion的安装:
./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
这个是一个参考的参数,后面两个要添加,是指向apache源文件的目录的相关文件,如果没有指定,就会出现这样的错误:
阿权也碰到这样的问题,所以大家可以放心的这样做了。
5 如何开始简单的使用?
简单的使用可以参考更多的教程了,不细说了。
1 服务器上创建新项目
# su daemon #(apache是以daemon用户运行的,所以要切换身份,否则可能会报目录访问权限错误)
# svnadmin create --fs-type fsfs /home/svn/Lair
(如果用别的用户创建的项目,懒人可以把文件都改777 ^_^ )
2 给apache添加应用
3 新建和修改授权文件
htpasswd -c /etc/svn-auth-file aslibra
输入密码就可以了,另外,root创建的这个文件,默认组和其他都无法读取的,所以需要修改权限哦
4 重启apache后就可以访问了
http://www.aslibra.com/svn/Lair
简单就介绍到这里,本笔记也算至少可以把环境处理完毕,剩下是怎么利用好svn的问题了,以后再说。
先解读一下基础知识然后再继续笔记内容:
1 什么是版本控制?
参考一下《Subversion 简介》:
引用
版本控制之于程序员,就好比安全网之于高空秋千表演者。知道安全网就在那里,万一自己摔落它能够提供保护,高空秋千表演者才能放心大胆地在空中飞跃。同样,版本控制使您有能力去冒以往想都不敢想的风险。如果哪儿出了错,您总是可以使自己的代码回复到一个已知的、工作正常的版本。您可以在不触及主干的分支中进行试验,而不会影响到其他小组成员。在已经发布的产品的较老版本中发现 bug 时,您可以轻松检出特定版本,以确认、修订,并生成该 bug 的修补程序。如果没有版本控制,您必须极为慎之又慎,缓慢地推进,总而言之,生产力会更低。
Subversion 是一种开放源码的全新版本控制系统,支持可在本地访问或通过网络访问的数据库和文件系统存储库。不但提供了常见的比较、修补、标记、提交、回复和分支功能性,Subversion 还增加了追踪移动和删除的能力。此外,它支持非 ASCII 文本和二进制数据,所有这一切都使 Subversion 不仅对传统的编程任务非常有用,同时也适于 Web 开发、图书创作和其他在传统方式下未采纳版本控制功能的领域。
Subversion 是一种开放源码的全新版本控制系统,支持可在本地访问或通过网络访问的数据库和文件系统存储库。不但提供了常见的比较、修补、标记、提交、回复和分支功能性,Subversion 还增加了追踪移动和删除的能力。此外,它支持非 ASCII 文本和二进制数据,所有这一切都使 Subversion 不仅对传统的编程任务非常有用,同时也适于 Web 开发、图书创作和其他在传统方式下未采纳版本控制功能的领域。
2 版本控制流程是怎么样的?
版本控制一般是本机客户端从服务器上更新得到最新的一份文件,然后修改具体的文件,再更新到服务器,服务器管理好每个更新。如果文件同时分配到两个客户端,两个客户端提交更改,那只有一个可以更新,另外一个只能从新的版本修改提交更新,或者返回两个版本的文件,给你参考。
Subversion 可以使用基于http协议的WebDAV/DeltaV协议进行网络通讯,并由Apache服务器提供源码仓库方的网络浏览服务。这为 Subversion提供了比CVS更好的协同工作能力,并提供了各式各样的自由的关键特性:授权,基于路径的授权,线性压缩,以及基本源码仓库浏览。
3 如何重新编译软件?
首先是apache的配置,如果现有apache了,那就可以考虑更新了,但是问题来了,不能影响现有服务怎么办?我以前一头雾水,担心操作失误。那其实要添加模块文件的编译方法已经实践过了,见《如何向已经安装好的apache添加一个模块》
还有一个方法给已经编译的软件做修改,configure程序的参数是会被记录起来,放置到同目录的config.nice文件中,我是从apache的文档里面发现的:
引用
小幅度的版本升级(例如:2.2.55→2.2.57)很容易。make install 的过程不会改写任何已经存在的文档、日志、配置文件。此外,开发者也会尽量兼容上一版本的configure选项、运行时配置、模块API 。大多数情况下,你将能够使用与上一版本完全相同的configure命令行和运行时配置,而你原来的所有模块也将正常工作。
如果你保存了上一次安装后build子目录中的config.nice文件,升级将更加平滑。这个文件精确地保存了所有对目录树进行配置的configure命令行。你只需要将config.nice文件复制到新的源代码目录树的根文件夹并进行你希望的修改后。。。。。
如果你保存了上一次安装后build子目录中的config.nice文件,升级将更加平滑。这个文件精确地保存了所有对目录树进行配置的configure命令行。你只需要将config.nice文件复制到新的源代码目录树的根文件夹并进行你希望的修改后。。。。。
所以,直接从文件里面就可以知道上次的参数,这样就不用担心重新编译会把某些功能丢失了,但至少你保留了源文件的情况哦。
4 如何配置apache和subversion?
人都是学习知道的,我参考了一下别人的方法,发现这篇文章不错:《SVN服务器搭建完全手册》,这个是看了很多文章知道的,因为我按照别的安装过程碰到问题在这里似乎都想到了。
阿权的服务器没有什么特别的,所以简单来讲,需要两个内容:
1 apache需要支持so,同时加载相应的svn模块
2 安装subversion时才会生成该模块,同时自动添加到apache的配置里,需要声明apr等的路径,否则不正常
apache的配置:
./configure --enable-dav --enable-so --enable-maintainer-mode
这个是subversion的INSTALL文件说明的参数,这个是跟subversion有关的,dav是验证模块,另外一个可以参考apache的手册,自行选择了:
引用
--enable-maintainer-mode
使用所有警告和调试符号编译源代码,请勿用于正式服务器,它会影响性能。
使用所有警告和调试符号编译源代码,请勿用于正式服务器,它会影响性能。
LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule dav_fs_module modules/mod_dav_fs.so
上面是dav产生的两个模块,其实如果已经有这两个模块加载了,就不用重新编译apache,怎么看呢?phpinfo也可以简单的知道,有一个栏目是“apache2handler”,显示 Loaded Modules ,有这些模块就可以免得重新编译了。
subversion的安装:
./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
这个是一个参考的参数,后面两个要添加,是指向apache源文件的目录的相关文件,如果没有指定,就会出现这样的错误:
引用
–with-apr 和 –with-apr-util 如果没有加上的话,即使编译成功了也会出现
Can’t set position pointer in file ‘/home/svn/repos/db/revs/0′: Invalid argument
Can’t set position pointer in file ‘/home/svn/repos/db/revs/0′: Invalid argument
阿权也碰到这样的问题,所以大家可以放心的这样做了。
5 如何开始简单的使用?
简单的使用可以参考更多的教程了,不细说了。
1 服务器上创建新项目
# su daemon #(apache是以daemon用户运行的,所以要切换身份,否则可能会报目录访问权限错误)
# svnadmin create --fs-type fsfs /home/svn/Lair
(如果用别的用户创建的项目,懒人可以把文件都改777 ^_^ )
2 给apache添加应用
<VirtualHost *:80>
DocumentRoot "/Data/webapps/default"
ServerName www.aslibra.com
<Location /svn/Lair>
DAV svn
SVNPath /svn/Lair
AuthType Basic
AuthName "Subversion repository"
AuthUserFile /etc/svn-auth-file
Require valid-user
</Location>
</VirtualHost>
DocumentRoot "/Data/webapps/default"
ServerName www.aslibra.com
<Location /svn/Lair>
DAV svn
SVNPath /svn/Lair
AuthType Basic
AuthName "Subversion repository"
AuthUserFile /etc/svn-auth-file
Require valid-user
</Location>
</VirtualHost>
3 新建和修改授权文件
htpasswd -c /etc/svn-auth-file aslibra
输入密码就可以了,另外,root创建的这个文件,默认组和其他都无法读取的,所以需要修改权限哦
4 重启apache后就可以访问了
http://www.aslibra.com/svn/Lair
简单就介绍到这里,本笔记也算至少可以把环境处理完毕,剩下是怎么利用好svn的问题了,以后再说。
以前一直有这样的需求,是说apache缺少我需要的模块,可是如何在不影响现有程序的基础上,直接添加一个loadModule呢,但是模块文件从哪里来?从另外一个系统复制一份过来是否可行?虽然只是一个 foo.so 文件,放到module文件夹就可以了,但我还是查了一下资料,找到合适的方法,并且尝试过了。
这个是原文:
过程其实很容易理解:
1 在httpd的源文件里面找到 foo.c
2 运行程序编译出 foo.so
3 在httpd.conf添加进来
这里面要注意的两点:
1 foo.c是按功能放置在modules目录的,自己找到相应目录
2 loadModule命令默认是注释的,要去掉后还要改一下名称
下面是尝试expires功能的添加:
cd modules/metadata/
(expires属于metadata功能部分的)
/Data/apps/apache/bin/apxs -c mod_expires.c
gcc -shared -o mod_expires.so mod_expires.o -lgdbm
/Data/apps/apache/bin/apxs -i -A -n mod_expires mod_expires.so
编辑httpd.conf文件
LoadModule expires_module modules/mod_expires.so
然后测试一下:
[root@localhost apache]# ./bin/apachectl -t
Syntax OK
[root@localhost apache]# ./bin/apachectl graceful
这个模块很实用,可以给你带来带宽的节省
比如如下配置:
启用expires,默认缓存6小时,但不缓存 text/html
也就是访问阿权的网页
http://www.aslibra.com/blog/read.php?132 不会缓存网页
http://www.aslibra.com/blog/up/1158240093.jpg 缓存图片和脚本等
意思就是这样了
这个是原文:
引用
apache 添加 mod_rewrite 模块
我使用的是httpd 2.0.55 注意配置httpd.conf 时 是 rewrite_module 而不是 mod_rewrite
1、Apache安装rewrite模块的时候需要DBM支持,否则无法编译。使用rpm -qa gdbm 查询,如果没有,需要先下载并安装gdbm:
下载地址:ftp://ftp.gnu.org/gnu/gdbm/
安装步骤:
./configure
make
make install
make install-compat (如果不执行此步,无法编译出ndbm.h头文件)
2、安装
#cd /root/src/httpd-2.0.55/modules/mappers
#/usr/local/apache/bin/apxs -c mod_rewrite.c
#gcc -shared -o mod_rewrite.so mod_rewrite.o -lgdbm
#/usr/local/apache/bin/apxs -i -A -n mod_rewrite mod_rewrite.so
/usr/local/apache/bin/ 是我正在使用的apahce的目录
3、配置httpd.conf
加入 LoadModule rewrite_module modules/mod_rewrite.so
注意是 rewrite_module 而不是 mod_rewrite
我使用的是httpd 2.0.55 注意配置httpd.conf 时 是 rewrite_module 而不是 mod_rewrite
1、Apache安装rewrite模块的时候需要DBM支持,否则无法编译。使用rpm -qa gdbm 查询,如果没有,需要先下载并安装gdbm:
下载地址:ftp://ftp.gnu.org/gnu/gdbm/
安装步骤:
./configure
make
make install
make install-compat (如果不执行此步,无法编译出ndbm.h头文件)
2、安装
#cd /root/src/httpd-2.0.55/modules/mappers
#/usr/local/apache/bin/apxs -c mod_rewrite.c
#gcc -shared -o mod_rewrite.so mod_rewrite.o -lgdbm
#/usr/local/apache/bin/apxs -i -A -n mod_rewrite mod_rewrite.so
/usr/local/apache/bin/ 是我正在使用的apahce的目录
3、配置httpd.conf
加入 LoadModule rewrite_module modules/mod_rewrite.so
注意是 rewrite_module 而不是 mod_rewrite
过程其实很容易理解:
1 在httpd的源文件里面找到 foo.c
2 运行程序编译出 foo.so
3 在httpd.conf添加进来
这里面要注意的两点:
1 foo.c是按功能放置在modules目录的,自己找到相应目录
2 loadModule命令默认是注释的,要去掉后还要改一下名称
下面是尝试expires功能的添加:
cd modules/metadata/
(expires属于metadata功能部分的)
/Data/apps/apache/bin/apxs -c mod_expires.c
gcc -shared -o mod_expires.so mod_expires.o -lgdbm
/Data/apps/apache/bin/apxs -i -A -n mod_expires mod_expires.so
编辑httpd.conf文件
LoadModule expires_module modules/mod_expires.so
然后测试一下:
引用
[root@localhost apache]# ./bin/apachectl -t
Syntax OK
[root@localhost apache]# ./bin/apachectl graceful
这个模块很实用,可以给你带来带宽的节省
比如如下配置:
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 6 hours"
ExpiresByType text/html "access plus 0 hours"
</IfModule>
ExpiresActive On
ExpiresDefault "access plus 6 hours"
ExpiresByType text/html "access plus 0 hours"
</IfModule>
启用expires,默认缓存6小时,但不缓存 text/html
也就是访问阿权的网页
http://www.aslibra.com/blog/read.php?132 不会缓存网页
http://www.aslibra.com/blog/up/1158240093.jpg 缓存图片和脚本等
意思就是这样了





