2011-08-03 159 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