• 小马快跑 - 给kerio webmail加速
    时间:2009-01-08   作者:佚名   出处:互联网

    webmail的用户体验很重要,一个是速度,一个就是方便性,这次和大家分享一下关于webmail提速的经验。

    webmail里包含两部分内容:
    1、静态文件,html页面和图片,还有庞大的js。kerio web mail用了不少ajax技术,里面的js都是200多K一个的。针对这类文件,我们可以使用expire(cache)和压缩技术减少文件下载的数量和流量。

    2、动态PHP程序。针对这类文件,我们可以使用xcache或者ea之类的php加速器加速,但是由于kerio使用的自己封装好的php解释器,上次尝试过修改php.ini的参数,但失败了,暂时先不搞这个。

    这个方案如下:
    1、用lighttpd的proxy模块转发web请求到kerio web server。
    2、lighttpd开启expire和gzip功能,对静态文件进行压缩和cache。

    步骤如下:
    1、设置kerio web server的监听IP和端口为127.0.0.1:81
    2、配置lighttpd,使用他的proxy模块转发web请求到127.0.0.1:81端口
    3、配置lighttpd,启用expire和gzip模块。

    使用1.5版的lighttpd,因为他有deflate模块,压缩文件更爽。
    http://www.lighttpd.net/download/lighttpd-1.5.0-r1992.tar.gz

    编译过程很简单,configure ; make ; make install即可。
    下面给出我lighttpd.conf的配置:



    server.modules              = (
                                    "mod_access",
                                   "mod_proxy_core",
                                   "mod_proxy_backend_http",
                                   "mod_expire",
                                     "mod_deflate",
                                    "mod_accesslog" )
    server.document-root        = "/opt/kerio/mailserver/webmail/"
    server.errorlog             = "/usr/local/lighttpd/logs/error.log"
    index-file.names            = ( "index.php", "index.html",
                                    "index.htm", "default.htm" )
    mimetype.assign             = (
      ".pdf"          =>      "application/pdf",
      ".sig"          =>      "application/pgp-signature",
      ".spl"          =>      "application/futuresplash",
      ".class"        =>      "application/octet-stream",
      ".ps"           =>      "application/postscript",
      ".torrent"      =>      "application/x-bittorrent",
      ".dvi"          =>      "application/x-dvi",
      ".gz"           =>      "application/x-gzip",
      ".pac"          =>      "application/x-ns-proxy-autoconfig",
      ".swf"          =>      "application/x-shockwave-flash",
      ".tar.gz"       =>      "application/x-tgz",
      ".tgz"          =>      "application/x-tgz",
      ".tar"          =>      "application/x-tar",
      ".zip"          =>      "application/zip",
      ".mp3"          =>      "audio/mpeg",
      ".m3u"          =>      "audio/x-mpegurl",
      ".wma"          =>      "audio/x-ms-wma",
      ".wax"          =>      "audio/x-ms-wax",
      ".ogg"          =>      "application/ogg",
      ".wav"          =>      "audio/x-wav",
      ".gif"          =>      "image/gif",
      ".jpg"          =>      "image/jpeg",
      ".jpeg"         =>      "image/jpeg",
      ".png"          =>      "image/png",
      ".xbm"          =>      "image/x-xbitmap",
      ".xpm"          =>      "image/x-xpixmap",
      ".xwd"          =>      "image/x-xwindowdump",
      ".css"          =>      "text/css",
      ".html"         =>      "text/html",
      ".htm"          =>      "text/html",
      ".js"           =>      "text/javascript",
      ".asc"          =>      "text/plain",
      ".c"            =>      "text/plain",
      ".cpp"          =>      "text/plain",
      ".log"          =>      "text/plain",
      ".conf"         =>      "text/plain",
      ".text"         =>      "text/plain",
      ".txt"          =>      "text/plain",
      ".dtd"          =>      "text/xml",
      ".xml"          =>      "text/xml",
      ".mpeg"         =>      "video/mpeg",
      ".mpg"          =>      "video/mpeg",
      ".mov"          =>      "video/quicktime",
      ".qt"           =>      "video/quicktime",
      ".avi"          =>      "video/x-msvideo",
      ".asf"          =>      "video/x-ms-asf",
      ".asx"          =>      "video/x-ms-asf",
      ".wmv"          =>      "video/x-ms-wmv",
      ".bz2"          =>      "application/x-bzip",
      ".tbz"          =>      "application/x-bzip-compressed-tar",
      ".tar.bz2"      =>      "application/x-bzip-compressed-tar"
    )
    server.tag                 = "Apache"
    accesslog.filename          = "/usr/local/lighttpd/logs/access.log"
    url.access-deny             = ( "~", ".inc" )
    static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
    server.pid-file            = "/usr/local/lighttpd/logs/lighttpd.pid"
    dir-listing.activate       = "disable"
    server.username            = "nobody"
    server.groupname           = "nobody"
    #压缩模块,压缩静态文件,减少文件下载流量
    deflate.enabled = "enable"
    deflate.compression-level = 5
    deflate.mem-level = 5    
    deflate.window-size = 15 
    deflate.allowed_encodings = ( "gzip", "deflate" )
    deflate.min-compress-size = 200
    deflate.work-block-size = 512
    deflate.mimetypes = ("text/html", "text/plain", "text/css", "image/gif", "image/jpeg", "text/javascript")

    #反向代理,转发数据到kerio web server
    $HTTP["host"] == "mail.xxx.com" {
    $HTTP["url"] =~ "^/" {
        proxy-core.protocol = "http"
        proxy-core.balancer = "static"
        proxy-core.backends = (
            "127.0.0.1:81"
        )
        proxy-core.max-pool-size = 16
    }

    #expire模块减少下载文件数量
    $HTTP["url"] =~ "\.(html|htm|jpg|gif|png|css|js)$" { expire.url = ( "" => "access 7 days" ) }
    }
    修改配置文件里的mail.xxx.com为你的域名。
    启动lighttpd
    lighttpd -f lighttpd.conf

    然后就可以正常访问你的webmail了,看下,速度是不是快了N多。(第一次访问不会快,刷新一下页面就知道快很多了)
    我机器没装PHOTOSHOP,我就不抓效果图上来了。

    过段时间研究一下他的php看能否自己DIY一个,给动态程序加速,同时还可以提高安全性。

    网友留言/评论

    我要留言/评论