需求一: 提高apache2.2.4 的访问速度,开启gzip压缩模块
解决办法:
参考地址1:http://blog.penner.cn/2007/04/04/apache2-mod_deflate.html
参考地址2:http://bbs.51cto.com/thread-499764-1.html
监测是否支持gizp 压缩 http://gzip.zzbaike.com/
Apache启用deflate压缩在 apache 1.3 版本,大家常用 mod_gzip 对输出内容进行压缩,现在主流的浏览器都支持 gzip 解压缩。
在 apache2 下,这个模块换名为 mod_deflate,对应的模块文件名是 mod_deflate.so。下面描述一下在 Apache 2 下如何启用并配置 mod_deflate 模块。默认安装的 Apache 不管是 Windows 还是 Linux/Unix,都是不启用该模块的, Linux/Unix 下甚至不带该模块,你需要手工编译这个模块。
下面我们分别介绍在 Windows 和 Linux 操作系统下如何启用并配置 mod_deflate 模块。在 Windows 下采用安装程序安装的 Apache 服务器已经带有 deflate 所需要的模块 mod_deflate.so 和 mod_headers.so,我们只需要在 httpd.conf 配置文件中启用并进行相关的配置即可,配置如下:
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
# Insert filter SetOutputFilter DEFLATE
# Netscape 4.x has some problems...
BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE masquerades as Netscape, but it is fine
# BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48
# the above regex won't work. You can use the following
# workaround to get the desired effect:
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
# Don't compress images
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
# Make sure proxies don't deliver the wrong content
eader append Vary User-Agent env=!dont-vary
而如果是 Linux/Unix 操作系统,如果你没有在编译安装的过程中将所需要的两个模块 mod_deflate 和 mod_headers 编译进去的话,那就稍微有点麻烦,首先我们先看如何在编译安装 Apache 过程中也同时编译这两个模块,请在执行 configure 程序时增加两个参数分别是: # ./configure --enable-deflate --enable-headers 这样在编译完 Apache 后就可以直接在 httpd.conf 中启用并配置 deflate 模块了,配置的方法跟 Windows 平台下是相同的。如果说您的 Apache 已经在运行了,不想再重新编译一次,那也可以选择只编译 deflate 模块所需的文件 mod_deflate.c 和 mod_headers.c。
这两个文件位于 {apache-src}/modules/filters/ 目录下(其中 {apache-src} 为 apache 源文件所在的目录)。使用如下命令来单独编译这两个源文件。
# {apache-bin}/apxs -i -a -c {apache-src}/modules/filters/mod_deflate.c
# {apache-bin}/apxs –i –a –c {apache-src}/modules/filters/mod_headers.c
When install the header module the src directory is {apache-src}/modules/metadata/mod_headers.c So we need change the command as follows:{apache-bin}/apxs -i -a -c {apache-src}/modules/metadata/mod_headers.c 其中 {apache-bin} 为 Apache 安装目录下的 bin 目录,接下来在 httpd.conf 直接配置该模块即可。
很多时候你在单独编译 deflate 模块的时候可能会碰到编译错误,提示是: Cannot load /opt/apache/modules/mod_deflate.so into server: /opt/apache/modules/mod_deflate.so: undefined symbol: deflate 解决的方法如下:编辑 /usr/local/apache2/bin/apr-config 文件修改其中的 LDFLAGS 值为 "-lz"然后再重新编译 mod_deflate 模块,apxs -ica mod_deflate.c 即可。为了省却不必要的麻烦,请尽量在编译安装时直接加上 --enable-deflate --enable-headers 参数。
需求二: apache2.2.4 支持中文目录
参考地址:http://blog.freebug.org/?p=212
解决办法:
Apache自身并不支持中文目录,但是目前日本的webdev提供了mod_encoding插件来支持多字节目录。
在AS5和Everest0.5pre2版本上测试通过,记录如下:
1)首先确定安装了httpd-devel包。如果没有安装之
2)从官方分别下载基本包和补丁包
#wget http://webdav.todo.gr.jp/download/mod_encoding-20021209.tar.gz
#wget http://webdav.todo.gr.jp/download/experimental/mod_encoding.c.apache2.20040616
或者可以下载文末提供的已经打好补丁的压缩包
3)解压基本包,并用mod_encoding.c.apache2.20040616替代基本包里的mod_encoding.c
#tar -xzf mod_encoding-20021209.tar.gz
#cd mod_encoding-20021209
#cp -f ../mod_encoding.c.apache2.20040616 mod_encoding.c
4)编译安装iconv_look库
# cd mod_encoding-20021209/lib/
# ./configure && make && make install
#echo “/usr/local/lib” >>/etc/ld.so.conf.d/local.conf
#ldconfig
5)编译安装mod_encoding模块
#cd mod_encoding-20021209
#./configure –with-apxs=/usr/sbin/apxs –with-iconv-hook=/usr/local/include
#make
注:如果5)步骤出现下面的报错
mod_encoding.c:235: error: ‘regex_t’ undeclared (first use in this function)
请在mod_encoding.c文件中加上regex.h头,也就是加入
#include <regex.h>
一行。然后再编译。
6)安装动态库
如果前面步骤都没有错误,则应该在当前目录能看到mod_encoding.o文件,接下来该目标文件做成共享的动态库
# gcc -shared -o mod_encoding.so mod_encoding.o -Wc,-Wall -L/usr/local/lib -Llib -liconv_hook
将生成的mod_encoding.so文件拷贝到Apache的动态模块库目录中去
cp mod_encoding.so /usr/local/httpd/modules/
我们采用创建新的conf文件来加载该so文件
#cat >/etc/httpd/conf.d/cndir.conf
LoadModule encoding_module modules/mod_encoding.so
<IfModule mod_headers.c>
Header add MS-Author-Via “DAV”
</IfModule>
<IfModule mod_encoding.c>
EncodingEngine on
NormalizeUsername on
SetServerEncoding GBK
DefaultClientEncoding UTF-8 GBK GB2312
AddClientEncoding “(Microsoft .* DAV $)” UTF-8 GBK GB2312
AddClientEncoding “Microsoft .* DAV” UTF-8 GBK GB2312
AddClientEncoding “Microsoft-WebDAV*” UTF-8 GBK GB2312
</IfModule>
<CTRL+D>
当然SetServerEncoding UTF-8这样可以设置成你希望的默认编码,比如GBK,比如GB2312.
重启Apache。现在测试中文目录,看看效果。