2011-08-03 51 views
11

公司最近决定开始与清漆HTTP加速器工作。我们为什么选择这个解决方案最重要的是,因为我们是一家专门从事开发Web商店(Magento企业)公司=> Magento的有清漆一起工作的商业插件。设置清漆同一服务器上的Web服务器

的清漆配置已经存在于我们的测试环境,其包含运行的清漆例如,2个Apache服务器和1个存储+ 1个MySQL服务器1(软件)负载平衡器。

但是现在时机已经到了光油添加到我们的开发环境(VirtualBox的与具有数据库,网络服务器,运行的所有在同一台机器上的文件的RAM运行Debian的1GB)

任何人都可以发表默认.vcl配置文件为此设置?

的Apache2在端口上运行提前80

感谢, 肯尼

编辑:我发现贴在下面the solution

+0

+1发布解决方案 – Gerry

回答

4

后我发现更多的搜索解决方案。基本上我们需要确保清漆在8080端口上听取80端口和apache(或其他任何东西!)。

这里我default.vcl文件(位于/etc/varnish/default.vcl):

# default backend definition. Set this to point to your content server. 
backend apache1 { 
    .host = "127.0.0.1"; 
    .port = "8080"; 
} 

director lb round-robin { 
    {.backend=apache1;} 
} 

# add your Magento server IP to allow purges from the backend 
acl purge { 
    "localhost"; 
    "127.0.0.1"; 
} 

# needed for TTL handling 
C{ 
#include <errno.h> 
#include <limits.h> 
}C 


sub vcl_recv { 

    set req.backend=lb; 

    if (req.request != "GET" && 
     req.request != "HEAD" && 
     req.request != "PUT" && 
     req.request != "POST" && 
     req.request != "TRACE" && 
     req.request != "OPTIONS" && 
     req.request != "DELETE" && 
     req.request != "PURGE") { 
     /* Non-RFC2616 or CONNECT which is weird. */ 
     return (pipe); 
    } 

    # purge request 
    if (req.request == "PURGE") { 
     if (!client.ip ~ purge) { 
      error 405 "Not allowed."; 
     } 
     purge("obj.http.X-Purge-Host ~ " req.http.X-Purge-Host " && obj.http.X-Purge-URL ~ " req.http.X-Purge-Regex " && obj.http.Content-Type ~ " req.http.X-Purge-Content-Type); 
     error 200 "Purged."; 
    } 

    # we only deal with GET and HEAD by default  
    if (req.request != "GET" && req.request != "HEAD") { 
     return (pass); 
    } 

    # static files are always cacheable. remove SSL flag and cookie 
    if (req.url ~ "^/(media|js|skin)/.*\.(png|jpg|jpeg|gif|css|js|swf|ico)$") { 
     unset req.http.Https; 
     unset req.http.Cookie; 
    } 

    # not cacheable by default 
    if (req.http.Authorization || req.http.Https) { 
     return (pass); 
    } 

    # do not cache any page from 
    # - index files 
    # - ... 
    if (req.url ~ "^/(index)") { 
     return (pass); 
    } 

    # as soon as we have a NO_CACHE or admin cookie pass request 
    if (req.http.cookie ~ "(NO_CACHE|adminhtml)=") { 
     return (pass); 
    } 

    # normalize Aceept-Encoding header 
    # http://varnish.projects.linpro.no/wiki/FAQ/Compression 
    if (req.http.Accept-Encoding) { 
     if (req.url ~ "\.(jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg|swf|flv)$") { 
      # No point in compressing these 
      remove req.http.Accept-Encoding; 
     } elsif (req.http.Accept-Encoding ~ "gzip") { 
      set req.http.Accept-Encoding = "gzip"; 
     } elsif (req.http.Accept-Encoding ~ "deflate" && req.http.user-agent !~ "MSIE") { 
      set req.http.Accept-Encoding = "deflate"; 
     } else { 
      # unkown algorithm 
      remove req.http.Accept-Encoding; 
     } 
    } 

    # remove Google gclid parameters 
    set req.url = regsuball(req.url,"\?gclid=[^&]+$",""); # strips when QS = "?gclid=AAA" 
    set req.url = regsuball(req.url,"\?gclid=[^&]+&","?"); # strips when QS = "?gclid=AAA&foo=bar" 
    set req.url = regsuball(req.url,"&gclid=[^&]+",""); # strips when QS = "?foo=bar&gclid=AAA" or QS = "?foo=bar&gclid=AAA&bar=baz" 

    # decided to cache. remove cookie 
    #unset req.http.Cookie; 

    return (lookup); 
} 

这里的清漆文件的内容(在/ etc /默认/清漆):

# Configuration file for varnish 
# 
# /etc/init.d/varnish expects the variables $DAEMON_OPTS, $NFILES and $MEMLOCK 
# to be set from this shell script fragment. 
# 

# Should we start varnishd at boot? Set to "yes" to enable. 
START=yes 

# Maximum number of open files (for ulimit -n) 
NFILES=131072 

# Maximum locked memory size (for ulimit -l) 
# Used for locking the shared memory log in memory. If you increase log size, 
# you need to increase this number as well 
MEMLOCK=82000 

# Default varnish instance name is the local nodename. Can be overridden with 
# the -n switch, to have more instances on a single server. 
INSTANCE=$(uname -n) 

# This file contains 4 alternatives, please use only one. 

## Alternative 1, Minimal configuration, no VCL 
# 
# Listen on port 6081, administration on localhost:6082, and forward to 
# content server on localhost:8080. Use a 1GB fixed-size cache file. 
# 
# DAEMON_OPTS="-a :6081 \ 
#    -T localhost:6082 \ 
#  -b localhost:8080 \ 
#  -u varnish -g varnish \ 
#   -S /etc/varnish/secret \ 
#  -s file,/var/lib/varnish/$INSTANCE/varnish_storage.bin,1G" 


## Alternative 2, Configuration with VCL 
# 
# Listen on port 6081, administration on localhost:6082, and forward to 
# one content server selected by the vcl file, based on the request. Use a 1GB 
# fixed-size cache file. 
# 
DAEMON_OPTS="-a :80 \ 
      -T localhost:6082 \ 
      -f /etc/varnish/default.vcl \ 
      -S /etc/varnish/secret \ 
      -s file,/var/lib/varnish/$INSTANCE/varnish_storage.bin,1G" 


## Alternative 3, Advanced configuration 
# 
# See varnishd(1) for more information. 
# 
# # Main configuration file. You probably want to change it :) 
# VARNISH_VCL_CONF=/etc/varnish/default.vcl 
# 
# # Default address and port to bind to 
# # Blank address means all IPv4 and IPv6 interfaces, otherwise specify 
# # a host name, an IPv4 dotted quad, or an IPv6 address in brackets. 
# VARNISH_LISTEN_ADDRESS= 
# VARNISH_LISTEN_PORT=6081 
# 
# # Telnet admin interface listen address and port 
# VARNISH_ADMIN_LISTEN_ADDRESS=127.0.0.1 
# VARNISH_ADMIN_LISTEN_PORT=6082 
# 
# # The minimum number of worker threads to start 
# VARNISH_MIN_THREADS=1 
# 
# # The Maximum number of worker threads to start 
# VARNISH_MAX_THREADS=1000 
# 
# # Idle timeout for worker threads 
# VARNISH_THREAD_TIMEOUT=120 
# 
# # Cache file location 
# VARNISH_STORAGE_FILE=/var/lib/varnish/$INSTANCE/varnish_storage.bin 
# 
# # Cache file size: in bytes, optionally using k/M/G/T suffix, 
# # or in percentage of available disk space using the % suffix. 
# VARNISH_STORAGE_SIZE=1G 
# 
# # File containing administration secret 
# VARNISH_SECRET_FILE=/etc/varnish/secret 
# 
# # Backend storage specification 
# VARNISH_STORAGE="file,${VARNISH_STORAGE_FILE},${VARNISH_STORAGE_SIZE}" 
# 
# # Default TTL used when the backend does not specify one 
# VARNISH_TTL=120 
# 
# # DAEMON_OPTS is used by the init script. If you add or remove options, make 
# # sure you update this section, too. 
# DAEMON_OPTS="-a ${VARNISH_LISTEN_ADDRESS}:${VARNISH_LISTEN_PORT} \ 
#    -f ${VARNISH_VCL_CONF} \ 
#    -T ${VARNISH_ADMIN_LISTEN_ADDRESS}:${VARNISH_ADMIN_LISTEN_PORT} \ 
#    -t ${VARNISH_TTL} \ 
#    -w ${VARNISH_MIN_THREADS},${VARNISH_MAX_THREADS},${VARNISH_THREAD_TIMEOUT} \ 
#   -S ${VARNISH_SECRET_FILE} \ 
#    -s ${VARNISH_STORAGE}" 
# 


## Alternative 4, Do It Yourself 
# 
# DAEMON_OPTS="" 

之后,你可以监视清漆如何通过键入 varnishlog服务内容(从什么来源)| grep URL

10

这个环节对大制作的网站使用光油的一个很好的讨论。特别是,看的/ etc /默认/清漆或/ etc/SYSCONFIG /清漆DAEMON OPTS该放缓存“文件”到内存中,而不是磁盘:

http://www.lullabot.com/articles/varnish-multiple-web-servers-drupal

的片断我说约:

DAEMON_OPTS="-a :80,:443 \ 
      -T localhost:6082 \ 
      -f /etc/varnish/default.vcl \ 
      -u varnish -g varnish \ 
      -S /etc/varnish/secret \ 
      -p thread_pool_add_delay=2 \ 
      -p thread_pools=2 \ 
      -p thread_pool_min=400 \ 
      -p thread_pool_max=4000 \ 
      -p session_linger=50 \ 
      -p sess_workspace=262144 \ 
      -s malloc,3G" 
+1

尽管文章建议将thread_pools参数设置为核心数量,但这与最近Varnish的指导相反(即使对于最繁忙的服务器,也指出2更好)请参阅:https: //www.varnish-software.com/static/book/Tuning.html#threading-model – Andrew