- 1. Hướng dẫn cài đặt Varnish cho Nginx/Apache trên CentOS/Ubuntu
- 2. Varnish Agent – Công cụ quản lý và Theo dõi Varnish
- 3. Varnish Dashboard – Theo dõi Varnish trực quan, realtime
- 4. Cấu hình Varnish hoạt động với CloudFlare và Nginx
- 5. Cấu hình Varnish hoạt động trên 2 port khác nhau
- 6. Sử dụng HTTPS với Varnish
Trong bài viết này mình sẽ hướng dẫn bạn cách cài đặt và sử dụng Varnish làm front-end cho Nginx hoặc Apache để cache các request HTTP nhanh hơn mà không cần phải nhờ đến webserver xử lý.
Varnish là một hệ thống cache được dùng để tăng tốc server, đặc biệt là với những hệ thống lớn, có trafic nhiều. Varnish hoạt động bằng cách cache nội dung page lên bộ nhớ RAM và ngay lập tức trả lại cho người dùng khi có yêu cầu mà không phải thông qua PHP hay MySQL xử lý.
Do sử dụng Memory để cache nên tốc độ truy xuất sẽ nhanh hơn rất nhiều so với Disk truyền thống, kể cả SSD. Bạn thử tưởng tượng với những website có lượng lớn dữ liệu, phương pháp cache thông thường sẽ tạo ra hàng vạn file .html trên ổ cứng, lúc đó PHP hoặc Nginx xử lý sẽ cực kỳ vất vả, tốn tài nguyên.
Varnish hoạt động rất tốt với những website có dữ liệu lớn, một số website lớn trên thế giới đang áp dụng Varnish như Wikipedia, The New York Times, The Guardian, Facebook, Twitter, Vimeo, Canh Me…
Một số nhà cung cấp shared hosting cũng hỗ trợ sẵn Varnish như StableHost, SiteGround (chỉ những gói cao cấp). Nếu không muốn cài đặt vất vả, bạn có thể sử dụng luôn hosting ở đây.
Quá trình cài đặt và cấu hình Varnish Cache khá phức tạp, tuy nhiên điều này rất đáng để thử vì sau khi hoàn thành, website của bạn chắc chắn load vù vù cho coi.
Nội dung bài viết
I. Cài đặt Varnish
Bạn cần cài đặt trước LEMP hoặc LAMP server trước khi tiến hành cài đặt Varnish. Nếu chưa cài đặt, hãy tham khảo HocVPS Script, LEMP hoặc LAMP.
Với Ubuntu
aptitude update && aptitude install varnish
Với CentOS 6
yum install epel-release rpm --nosignature -i https://repo.varnish-cache.org/redhat/varnish-4.0.el6.rpm yum install varnish
Với CentOS 7
yum install epel-release yum install varnish
Sau khi cài đặt thành công, tùy thuộc vào OS mà bạn đang sử dụng mà Varnish có phiên bản khác nhau:
- Ubuntu: 3.0.2-1
- CentOS: v4.0.3
Việc xác định phiên bản Varnish rất quan trọng, vì Varnish 3.0 có cách cấu hình, tham số khác hoàn toàn Varnish 4.0. Bạn có thể kiểm tra phiên bản sau khi cài đặt xong bằng lệnh varnishd -V
varnishd (varnish-4.0.3 revision b8c4a34) Copyright (c) 2006 Verdens Gang AS Copyright (c) 2006-2014 Varnish Software AS
Xem thêm hướng dẫn cài đặt trên CentOS/Redhat tại đây.
[Errno 14] PYCURL ERROR 22 - "The requested URL returned error: 404 Not Found"
, các bạn chuyển sang x64 nhé.Kích hoạt Varnish tự động chạy
Với Ubuntu, CentOS 6.x
chkconfig --add varnish chkconfig varnish on
Với CentOS 7.x
systemctl status varnish systemctl enable varnish
II. Cấu hình Varnish
Có 2 file cấu hình bạn cần biết trước khi làm việc với Varnish:
1. File cấu hình tham số để Varnish hoạt động được
/etc/sysconfig/varnish
trên CentOS 6.x hoặc/etc/default/varnish
trên Ubuntu hoặc/etc/varnish/varnish.params
trên CentOS 7.
2. File cấu hình VCL (Varnish Configuration Language) chứa các rule caching, /etc/varnish/default.vcl
Quy trình tiến hành cấu hình Varnish như sau:
- Thay đổi port để Varnish listen thành 80
- Thay đổi port để Web server listen thành 8080, hoặc port bất kỳ bạn muốn
- Varnish tự động kết nối đến web server khi có request
1. Cấu hình Varnish
Phiên bản | Hệ điều hành | Đường dẫn file | Cấu hình tham khảo |
Varnish 3 | Ubuntu | /etc/default/varnish |
VARNISH_VCL_CONF=/etc/varnish/default.vcl VARNISH_LISTEN_ADDRESS= VARNISH_LISTEN_PORT=80 VARNISH_MIN_THREADS=100 VARNISH_MAX_THREADS=5000 VARNISH_THREAD_TIMEOUT=120 VARNISH_STORAGE_SIZE=256M VARNISH_STORAGE="malloc,${VARNISH_STORAGE_SIZE}" VARNISH_SECRET_FILE=/etc/varnish/secret VARNISH_TTL=120 |
Varnish 4 | CentOS 6.x | /etc/sysconfig/varnish | |
Varnish 4 | CentOS 7 | /etc/varnish/varnish.params |
VARNISH_STORAGE="malloc,512M" |
Bạn có thể thay đổi một số tham số mình thấy tối ưu nhất cho Varnish như sau:
- thread_pool_min (VARNISH_MIN_THREADS) mặc định là 100, thay bằng 800/(số CPU Core). Ví dụ mình có 4 Core -> VARNISH_MIN_THREADS=200
- thread_pool_max (VARNISH_MAX_THREADS) mặc định 5000, tuyệt đối không cấu hình quá 5000
VARNISH_STORAGE có 2 loại là malloc và file. malloc lưu cache trên Memory, có tốc độ xử lý cao hơn nhiều so với file lưu trên ổ cứng.
Xem thêm Varnish Tuning.
Cấu hình file VCL cho Varnish 4 để hoạt động được với WordPress
Do mình sử dụng WordPress và CentOS nhiều nên có chuẩn bị được file cấu hình VLC tối ưu này, các bạn có thể tham khảo sử dụng.
nano /etc/varnish/default.vcl
Thay thế toàn bộ bằng nội dung sau:
vcl 4.0; backend default { .host = "127.0.0.1"; .port = "8080"; .first_byte_timeout = 300s; } acl purge { "127.0.0.1"; } sub vcl_recv { if (req.method == "PURGE") { if (!client.ip ~ purge) { return(synth(405,"Not allowed.")); } if (req.http.X-Purge-Method == "regex") { ban("req.url ~ " + req.url + " && req.http.host ~ " + req.http.host); return (synth(200, "Banned.")); } else { return (purge); } } ### Do not Authorized requests. if (req.http.Authorization) { return(pass); // DO NOT CACHE } ### Pass any requests with the "If-None-Match" header directly. if (req.http.If-None-Match) { return(pass); // DO NOT CACHE } ### Do not cache AJAX requests. if (req.http.X-Requested-With == "XMLHttpRequest") { return(pass); // DO NOT CACHE } ### Only cache GET or HEAD requests. This makes sure the POST (and OPTIONS) requests are always passed. if (req.method != "GET" && req.method != "HEAD") { return (pass); // DO NOT CACHE } ### Static files: Do not cache PDF, XML, ... files (=static & huge and no use caching them - in all Vary: variations!) if (req.url ~ "\.(doc|mp3|pdf|tif|tiff|xml)(\?.*|)$") { return(pass); // DO NOT CACHE } # Unset the header for static files if (req.url ~ "\.(gif|jpg|jpeg|swf|ttf|css|js|flv|mp3|mp4|pdf|ico|png)(\?.*|)$") { unset req.http.cookie; set req.url = regsub(req.url, "\?.*$", ""); } if (req.url ~ "\?(utm_(campaign|medium|source|term)|adParams|client|cx|eid|fbid|feed|ref(id|src)?|v(er|iew))=") { set req.url = regsub(req.url, "\?.*$", ""); } if (req.url ~ "wp-(login|admin)" || req.url ~ "preview=true" || req.url ~ "xmlrpc.php") { return (pass); } if (req.http.cookie) { # Google Analytics set req.http.Cookie = regsuball( req.http.Cookie, "(^|;\s*)(__utm[a-z]+)=([^;]*)", ""); set req.http.Cookie = regsuball( req.http.Cookie, "(^|;\s*)(_ga)=([^;]*)", ""); # Quant Capital set req.http.Cookie = regsuball( req.http.Cookie, "(^|;\s*)(__qc[a-z]+)=([^;]*)", ""); # __gad __gads set req.http.Cookie = regsuball( req.http.Cookie, "(^|;\s*)(__gad[a-z]+)=([^;]*)", ""); # Google Cookie consent (client javascript cookie) set req.http.Cookie = regsuball( req.http.Cookie, "(^|;\s*)(displayCookieConsent)=([^;]*)", ""); # Other known Cookies: remove them (if found). set req.http.Cookie = regsuball( req.http.Cookie, "(^|;\s*)(__CT_Data)=([^;]*)", ""); set req.http.Cookie = regsuball( req.http.Cookie, "(^|;\s*)(WRIgnore|WRUID)=([^;]*)", ""); # PostAction: Remove (once and if found) a ";" prefix followed by 0..n whitespaces. # INFO \s* = 0..n whitespace characters set req.http.Cookie = regsub( req.http.Cookie, "^;\s*", "" ); # PostAction: Unset the header if it is empty or 0..n whitespaces. if ( req.http.cookie ~ "^\s*$" ) { unset req.http.Cookie; } } } sub vcl_backend_response { if ( (!(bereq.url ~ "(wp-(login|admin)|login)")) || (bereq.method == "GET") ) { //unset beresp.http.set-cookie; set beresp.ttl = 1h; } # Remove some headers we never want to see unset beresp.http.Server; unset beresp.http.X-Powered-By; if (bereq.url ~ "\.(gif|jpg|jpeg|swf|ttf|css|js|flv|mp3|mp4|pdf|ico|png)(\?.*|)$") { unset beresp.http.cookie; set beresp.ttl = 365d; } set beresp.ttl = 10s; set beresp.grace = 1h; } sub vcl_deliver { if (obj.hits > 0) { set resp.http.X-Cache = "HIT"; } else { set resp.http.X-Cache = "MISS"; } set resp.http.Access-Control-Allow-Origin = "*"; set resp.http.Server = "HocVPS Script"; }
Bạn có thể test cấu hình VCL với lệnh bên dưới, nếu không xuất hiện lỗi gì là ok. Thoát varnishd bằng cách nhấn Ctrl+C
varnishd -F -f /etc/varnish/default.vcl
Khi update file cấu hình default.vcl
, các bạn có thể reload Varnish vẫn giữ nguyên cache sử dụng init.d scripts:
/etc/init.d/varnish reload
hoặc thông qua Varnish Reload VCL script
varnish_reload_vcl
2. Cấu hình Web server
– Tiếp theo hãy chỉnh sửa file cấu hình của Web server để thay đổi port listen từ 80 thành 8080
Web Server | Hệ điều hành | File cấu hình | Nội dung thay đổi |
Apache | Ubuntu | /etc/apache2/ports.conf | NameVirtualHost 127.0.0.1:8080 Listen 8080 |
/etc/apache2/sites-available/default | |||
CentOS | /etc/httpd/conf/httpd.conf | Listen 8080 | |
Nginx | Ubuntu | /etc/nginx/sites-enabled/default | listen 127.0.0.1:8080 trong block server. |
CentOS | /etc/nginx/nginx.conf |
Nếu dùng HocVPS Script thì bạn cấu hình lại toàn bộ tên miền ở folder /etc/nginx/conf.d/
chuyển listen 80;
thành listen 127.0.0.1:8080;
– Điều chỉnh để hiển thị IP thật của visitor trong log file, thay vì 127.0.0.1.
Bạn hãy mở file cấu hình nginx:
nano /etc/nginx/nginx.conf
Thay đoạn log_format
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
bằng đoạn sau:
set_real_ip_from 127.0.0.1; real_ip_header X-Forwarded-For; log_format main '$remote_addr - $remote_user [$time_local] $status ' '"$request" $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
Cuối cùng hãy restart Varnish và Web server.
Giờ bạn có thể truy cập vào IP để check xem hệ thống đã hoạt động chưa rồi đó.
Nếu sử dụng WordPress bạn hãy cài đặt thêm plugin Varnish HTTP Purge để tự động xóa cache khi publish hoặc update bài viết.
Để kiểm tra các service nào đang listen port, ví dụ 80, bạn có thể sử dụng lệnh: netstat -lntp | grep 80
.
III. Testing Varnish
Để biết được Varnish có đang hoạt động hay không bạn sử dụng lệnh bên dưới:
curl -I domain.com
Lần đầu tiên chạy, để ý dòng X-Varnish bạn sẽ thấy một số, ví dụ:
X-Varnish: 1482416538
hoặc X-Cache: MISS
Sử dụng lệnh bên trên lần thứ 2, nếu thấy xuất hiện 2 số tức là Varnish đã hoạt động rồi đó, ví dụ:
X-Varnish: 1482416539 1482416538
hoặc X-Cache: HIT
Ngoài ra, bạn cũng có thể sử dụng 2 công cụ:
- varnishlog: xem Varnish logsreal time
- varnishstat: hiển thị tình trạng cache Varnish
Chúc bạn thành công!
Vậy có cần phải xoá Memcached khi đã cái varnish hay vẫn có thể chạy song song. Bạn có thể giải thích cho mình với. Cảm ơn
Chạy song song ok nhé bạn, Varnish cache fullpage, Memcache cache Object, database
MÌnh cài ở bước đầu tiên nó bị lỗi này nè ad ui 🙁
https://repo.varnish-cache.org/redhat/varnish-4.0/el6/i386/repodata/repomd.xml: [Errno 14] PYCURL ERROR 22 – “The requested URL returned error: 404 Not Found”
Trying other mirror.
To address this issue please refer to the below knowledge base article
https://access.redhat.com/articles/1320623
If above article doesn’t help to resolve this issue please open a ticket with Red Hat Support.
Error: Cannot retrieve repository metadata (repomd.xml) for repository: varnish-4.0. Please verify its path and try again
Bạn dùng VPS ở đâu bị báo lỗi này thế? OS gì vậy?
Mình sử dụng VPS của Dedi :
2CPU / 2GB RAM
CentOS release 6.8 (Final)
2.6.32-642.1.1.el6.i686 #1 SMP Tue May 31 20:41:01 UTC 2016 i686 i686 i386 GNU
Hocvps Scripts
Gửi mình thông tin root được không, mình mới test lại với Vultr cài đặt bình thường luôn.
Mình gởi vô mail rồi đó ad
Check mail nha.
Hi pác Luân,
VPS mình chạy hocvps, đã cài memcache, giờ muốn cài Varnish thì có cần reset vps cài os lại. Sau đó cài lại hết từ đâu không ?
Nếu không thì làm cách nào để gỡ Memcache ra pác nhỉ ?
Cảm ơn pác ^^
Varnish thì cứ thế cài thẳng vào thôi, không cần reset VPS nhé.
Gỡ Memcached trong bài này có nói rồi đó: https://hocvps.com/huong-dan-cai-dat-memcached-day-du-tren-centos/
Mình tìm /etc/sysconfig/varnish mà không có trên vps ad ơi ??
Mình tìm ra rồi nhưng trong file nhiều value quá ad ơi. Có thể cho mình xin nội dung file của ad dc ko ?? /etc/sysconfig/varnish
thanks
Bạn cần edit cái gì. Trong file có vài value thôi mà, đâu có nhiều lắm 😀
root@SVR002:~# netstat -lntp | grep 80
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 21406/apache2
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 21123/varnishd
tcp6 0 0 :::80 :::* LISTEN 21123/varnishd
————————-
root@SVR002:~# varnishd -F -f /etc/varnish/default.vcl
Error: Cannot open socket: :80: Address already in use
root@SVR002:~# varnishd -F -f /etc/varnish/default.vcl
Error: Cannot open socket: :80: Address already in use
————
root@SVR002:~# curl -I domain.com
HTTP/1.1 200 OK
Date: Thu, 18 Aug 2016 17:35:22 GMT
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Vary: Accept-Encoding
Content-Type: text/html; charset=UTF-8
Pragma: no-cache
Expires: -1
Cache-Control: no-store, no-cache, must-revalidate, max-age=0
Accept-Ranges: bytes
Connection: keep-alive
—————————————–
Nhu vay thi Varnish co chay chua a Luan ?
Vậy chưa được rồi, output lệnh
curl
phải có thông tin Varnish mới được.Ý mình là vậy đó, bạn có thể hướng dẫn thêm 1 port nữa không?
Có ngay bài viết dành riêng cho bạn nhé: https://hocvps.com/varnish-hoat-dong-tren-2-port/
Cảm ơn bác, đang ngâm cứu, em xài Sentora cấu hình port truy cập panel lại nên sẽ hơi khác nginx của bác. Nhưng với gợi ý này chắc sẽ làm được
IP gốc thì ok,
Còn ip trung gian thì thua
domain.com:port
Tất nhiên rồi. Nếu muốn dùng IP trung gian nữa thì bạn phải cấu hình cho Varnish listen trên port đó và forward về IP gốc.
Bác ơi. Em muốn làm 1 VPS trung gian chạy varnish cache như canhme.com vậy.
Cái phần web thì OK rồi, nhưng em xài sentora và đã cấu hình panel truy cập bằng port dạng IP:port.
Giờ muốn cấu hình qua varnish cache nữa thì làm thế nào, vì domain mình trỏ qua IP của VPS trung gian
Bạn dùng IP để đăng nhập Sentora được không?
Hi Luân,
Vừa cài memcached vừa cài varnish có được không ?
Có cần xóa memcached khi cài varnish không ?
Được nhé bạn. Cái này bác Thạch vừa tư vấn. Cái memcache làm backend, còn varnish cache làm frontend
Lỗi rồi Luân ơi
[root@vpsbk home]# curl -I demo.trongtri.com
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 10 Aug 2016 04:35:35 GMT
Content-Type: text/html
Content-Length: 613
Last-Modified: Thu, 26 Feb 2015 09:01:55 GMT
Connection: keep-alive
Vary: Accept-Encoding
ETag: “54eee103-265”
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
Accept-Ranges: bytes
Cái này Varnish khoog chạy rồi.
Hi Luân,
Cài HOCVPS Script rồi, thì cài cái này cũng theo các bước này luôn hay bỏ qua step nào ko Luân?
Không bỏ qua bước nào hết nhé bạn. Tuy nhiên cài Varnish khá phức tạp nên bạn thử trên server test trước nha.
nó báo thế này là sao cậu
http://prntscr.com/c0f8oh
Not found
Available: varnish-4.0.2-1.el6.x86_64 (varnish-4.0)
Not found
Installing: varnish-4.0.3-1.el6.x86_64 (varnish-4.0)
Not found
Available: varnish-libs-4.0.1-1.el6.x86_64 (varnish-4.0)
Not found
Available: varnish-libs-4.0.2-1.el6.x86_64 (varnish-4.0)
Not found
Installing: varnish-libs-4.0.3-1.el6.x86_64 (varnish-4.0)
Not found
You could try using –skip-broken to work around the problem
You could try running: rpm -Va –nofiles –nodigest
[root@zone5s home]# varnishd -V
-bash: varnishd: command not found
Có vấn đề với repo rồi. Bạn dùng VPS ở đâu thế?
gói 3 của vultr , vps nào mình cũng bị hết
Mình cài ngon mà nhỉ, lạ ghê.
mình không biết nữa mình tạo mới vps cài vẫn bị vậy chả hiểu nữa
Thử
yum install varnish
coi thế nào bạn?“Nếu dùng HocVPS Script thì bạn cấu hình lại toàn bộ tên miền ở folder /etc/nginx/conf.d/ chuyển listen 80; thành listen 127.0.0.1:8080;”
Mình không hiểu lắm đoạn này. giờ website không vào được lun anh ơi.
server {
listen 127.0.0.1:8080;
server_name http://www.aloshop.net;
rewrite ^(.*) http://aloshop.net$1 permanent;
}
server {
listen 80 default_server;
access_log off;
# access_log /home/aloshop.net/logs/access.log;
error_log off;
# error_log /home/aloshop.net/logs/error.log;
root /home/aloshop.net/public_html;
index index.php index.html index.htm;
server_name aloshop.net;
location / {
try_files $uri $uri/ /index.php?$args;
}
Bạn chưa đổi port cái này nè:
VPS mình 2GB ram đã cài OP và Memcached thì có cần cài Varnish nữa không ad, nếu cần thì làm sao để tháo cái Memcached ra ?
Mình chạy khoảng 5 site trên dùng 1 vps. Lượt view chỉ khoảng 1-2k/ngày.
Tks ad
Xóa memcached thì bạn coi cuối bài này: https://hocvps.com/huong-dan-cai-dat-memcached-day-du-tren-centos/
Nếu cài được Varnish thì quá ngon nhé, quan trọng là cài đặt thành công hay không thôi. Varnish cấu hình khá khó. Lượt view của bạn chưa cần phải dùng Varnish đâu 😉
Mình chạy lệnh này thì báo lỗi như sau:( Ubuntu 14, Varnish 4, Nginx)
root@SV002:~# varnishd -F -f /etc/varnish/default.vcl
bind(): Address already in use
bind(): Address already in use
Error: Failed to open (any) accept sockets
Vậy là cú pháp file .VCL chuẩn rồi đó bạn, lỗi đó do Varnish đang chạy nên ko test được mà thôi.
Hi Luân,
Mình sử dụng nhiều domain trên cùng 1 VPS
Trước khi mình cài đặt varnish mình có cấu hình nginx để những tên miền khác chuyển hướng về cùng 1 tên miền.
* mình chuyển hướng bằng cách sử file domain1.com.conf
server_name domain1.com;
server_name http://www.domain1.com;
rewrite ^(.*)$ http://domain.com$1 redirect;
—————
Sau đó mình làm theo hướng dẫn ở Bài này, đến đoạn
“Nếu dùng HocVPS Script thì bạn cấu hình lại TOÀN BỘ TÊN MIỀN ở folder /etc/nginx/conf.d/ chuyển listen 80; thành listen 127.0.0.1:8080;”
Mình có cấu hình lại toàn bộ các tên miền thành listen 127.0.0.1:8080;
Sau đó restart nginx và mình test tên miền domain1.com không còn chuyển hướng đến domain.com nữa
Có cách nào khắc phục không ạ ?
Bạn lưu ý cấu hình domain1.com.conf cũng phải add port vào nhé, nếu không Nginx sẽ dùng port 80. Ví dụ:
Đúng rồi, mình có add port listen 127.0.0.1:8080; cho domain1.com.conf, nhưng sau đó restart nginx và mình truy cập vào tên miền domain1.com thì KHÔNG còn chuyển hướng đến domain.com nữa
Nó chỉ hiện ra trang index của Nginx
Bạn kiểm tra xem domain đang nhận block server {} nào rồi update lại tương ứng coi.
Luân ơi, mình tạo VPS 8Gb- centOS 6.8×64 trên DigitalOcean, mình làm theo hướng dẫn của Luân, có 2 chỗ mình làm không được.
1. “thread_pools mặc định 2, thay bằng số CPU Core” mình tìm ko ra chỗ này. Ví dụ: thread_pool_max bạn có ghi là “VARNISH_MAX_THREADS” nên mình tìm ra được
2. Mình chạy lệnh dể biết được Varnish có đang hoạt động hay không:
[root@centos-8gb-nyc3-01 home]# curl -I domain.com
Hiện ra ntn:
HTTP/1.1 301 Moved Permanently
Date: Sun, 24 Jul 2016 18:24:01 GMT
Server: Apache
Location: http://www.domain.com/index.mas
Cache-Control: max-age=14400
Expires: Sun, 24 Jul 2016 22:24:01 GMT
Vary: Accept-Encoding
Content-Type: text/html; charset=iso-8859-1
Khắc phục ntn vậy Luân, Luân chỉ mình với
à, dòng thứ 2 mình đọc phía trên xử lý đc rồi, còn “thread_pools mặc định 2, thay bằng số CPU Core” mình vẫn chưa tìm ko ra chỗ này. Luân chỉ mình chỗ này với
Với mình tính tạo VPS 8GB này để chứa nhiều website. Trước kia mình dùng Memcache, giờ tạo VPS mới chuyển tất cả website qua VPS cài Varnish liệu có sao không Luân
Chứa nhiều site thì cấu hình vất vả hơn một chút thôi, không sao nhé. Chạy Varnish thì nhanh bá đạo rồi.
Mình ko biết về code nên chỉ nhìn theo bạn hướng dẫn và làm như cái máy, hi.
Cấu hình vất hả hơn 1 chút là phải làm khác hay làm thêm chỗ nào vậy Luân, Luân hướng dẫn giúp mình với, mình search trên google rồi mà tìm ko thấy
Vất vả thêm khoản chỉnh sửa cấu hình cho từng site thôi. Nếu làm ngon 1 site rồi thì thoải mái
Bạn phải test bằng domain của bạn chứ sao lại lấy domain.com kia.
thread_pools mình thấy phải setup dùng Varnish Agent mới được, chưa hiểu sao lại bị giấu kĩ thế?
Lạ thật, làm xong restart VPS, chạy lệnh test curl -I domain.com thì varnish hoạt động bình thường
sau khi restart VPS lần nữa thì varnish k hoạt động ???
Mình có thử chạy lệnh service varnish restart nhưng vẫn không được ??
Đang bị lỗi gì bạn nhỉ?
chạy lệnh curl -I domain.com thì ra như vầy https://i.imgur.com/3T9Iizp.png
còn chạy lệnh varnishd -F -f /etc/varnish/default.vcl thì ra như vầy https://i.imgur.com/1aDObyn.png
P/s : lúc đầu chạy 2 lệnh đó, varnish hoàn toàn bình thường, nhưng sau khi restart VPS lại lần nữa thì như vậy
Ơ kìa, bạn phải thay domain.com bằng domain của bạn chứ 🙁
như vầy đã hoạt động chưa ạ ?
trước khi cấu hình Varnish hoạt động với CloudFlare https://i.imgur.com/j76hO2S.png
sau khi cấu hình Varnish hoạt động với CloudFlare https://i.imgur.com/qy0Ju2o.png
Mình không thấy thông tin varnish trong header rồi, bạn check lại thử coi.
thì đúng rồi,
như lúc đầu mình nói đó,
“làm xong restart VPS, chạy lệnh test curl -I domain.com thì varnish hoạt động bình thường
sau khi restart VPS lần nữa thì varnish k hoạt động ???”
Làm theo cách của Luân không được rồi
Mình dùng :
yum install epel-release
yum install varnish
thì ok :* vì thiếu jemalloc
Đã chạy lệnh curl -I http://localhost, nó xuất hiện cái này thì có hoạt động không a Luân:
[root@SVR003 public_html]# curl -I http://localhost
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Thu, 21 Jul 2016 12:02:59 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Location: http://mydomain.net/
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
Link này redirect rồi, bạn phải check đến link cuối cùng cơ. Thử lại với
curl -I domain.com
xem thế nào?như vầy đã hoạt động chưa ạ ?
https://i.imgur.com/UkmFZfd.png
Chưa nha bạn. Không thấy dòng nào có thông tin Varnish cả.
mình cài xong đến bước này.
mở theo đường dẫn : nano /etc/varnish/varnish.params
Thay đổi port để Varnish listen thành 80 ( không biết dòng nào trong varnish.params)
Thay đổi port để Web server listen thành 8080, hoặc port bất kỳ bạn muốn ( không thấy trong varnish.params)
Sau đó thêm dòng code này vào (VARNISH_STORAGE=”malloc,512M”) và save lại hay sao nhỉ? và tiếp tục làm .
thanks ad
Phiên bản Varnish của bạn hiện tại là gì, cài trên OS nào thế? Mỗi cái nó có đường dẫn khác nhau đó.
Mình bị lỗi y như bạn này , mình dùng CENTOS7 và Varnich 4 , file varnish.params của mình ko có đoạn để thay port , thấy nó sai sai so với hướng dẫn của anh Luân . anh check giúp mình với nhé
================================
# Varnish environment configuration description. This was derived from
# the old style sysconfig/defaults settings
# Set this to 1 to make systemd reload try to switch vcl without restart.
RELOAD_VCL=1
# 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=192.168.1.5
VARNISH_LISTEN_PORT=6081
# Admin interface listen address and port
VARNISH_ADMIN_LISTEN_ADDRESS=127.0.0.1
VARNISH_ADMIN_LISTEN_PORT=6082
# Shared secret file for admin interface
VARNISH_SECRET_FILE=/etc/varnish/secret
# Backend storage specification, see Storage Types in the varnishd(5)
# man page for details.
#VARNISH_STORAGE=”file,/var/lib/varnish/varnish_storage.bin,1G” ( đoạn này mình thay như hướng dẫn của anh Luân bằng đoạn dưới)
VARNISH_STORAGE=”malloc,512M”
# Default TTL used when the backend does not specify one
VARNISH_TTL=120
# User and group for the varnishd worker processes
VARNISH_USER=varnish
VARNISH_GROUP=varnish
# Other options, see the man page varnishd(1)
#DAEMON_OPTS=”-p thread_pool_min=200 -p thread_pool_max=5000 -p thread_pool_timeout=300″
Bạn hỏi port à, nó là dòng này đó:
VARNISH_LISTEN_PORT=6081
Luân cho hỏi với. mình cài trên os7. khi chạy lệnh
systemctl start varnish
thì báo lỗi Failed to start varnish.service: Unit varnish.service failed to load: No such file or directory.
Thanks.
Quá trình cài đặt Varnish của bạn ok chứ, đang ở bước nào rồi?
Mình làm tới varnishd -F -f /etc/varnish/default.vcl
thì báo lỗi này bạn ơi
Message from VCC-compiler:
Symbol not found: ‘req.method’ (expected type BOOL):
(‘input’ Line 18 Pos 13)
if (req.method == “PURGE”) {
————##########————–
Running VCC-compiler failed, exit 1
VCL compilation failed
Mình thực hiện đúng theo hướng dẫn và test curl -I http://localhost cũng báo ok hết rồi. Nhưng khi truy cập vào tên miền thì không được, hình như lỗi 302 hay 502 gì đó. Đổi Web server listen về lại 80 thì truy cập được. vps mình dùng hocvps script. Không biết bị lỗi gì nhỉ ?
Bạn check lại port backend của varnish đã chuẩn chưa, service running chưa?
Mình gõ lệnh netstat -ntlup thì ra như ảnh này: http://i.imgur.com/fVWfRdV.jpg
Ở file varnish thì mình để: VARNISH_LISTEN_PORT=80
Còn default.vcl thì:
backend default {
.host = “127.0.0.1”;
.port = “8080”;
}
Còn ở /etc/nginx/conf.d thì mình có mỗi file hello.com.conf đã sửa: listen 8080 rồi.
Hình như là do cái nginx nó vẫn listen ở cổng 80. Nhưng mà mình không kiếm ở đâu thấy nữa ngoài cái file conf của tên miền kia. VPS mình mới setup rồi cài hocvps script với varnish luôn.
À chạy lệnh: varnishd -F -f /etc/varnish/default.vcl
Thì nó ra thế này:
WARNING: Taking over SHMFILE marked as owned by running process (pid=2055)
bind(): Address already in use
bind(): Address already in use
Child start failed: could not open sockets
Bạn cần stop Nginx đi, rồi run Varnish để nó lấy quyền dùng port 80. Nginx đang chạy nên nó lấy port 80 rồi.
Hi Luân !
Mình stop Nginx rồi run Varnish thì đúng là varnish đã lấy được quyền dùng port 80. Nhưng start nginx thì lại không được, lỗi như hình này: http://i.imgur.com/wi1pnNa.jpg
Mình vừa tạo vps mới và cài hocvps script với varnish. Lúc cài hocvps script mình gõ tên miền là hello.com và chưa thêm 1 tên miền nào khác nên trong /etc/nginx/conf.d chỉ có mỗi file hello.com.conf đã sửa “listen 8080 default_server;” . Không hiếu sao nginx nó vẫn cứ đòi nghe qua cổng 80 nữa ?
Hi, mình tìm ra lỗi rồi. Lúc đầu file config thế này:
server {
server_name http://www.hello.com;
rewrite ^(.*) http://hello.com$1 permanent;
}
server {
listen 8080 default_server;
….
}
Cái khối server {} ở trên không ghi listen nên mặc định nó vẫn đòi dùng cổng 80 😀
Cám ơn Luân nhiều nhé !
Bắt bệnh quá chuẩn rồi bạn 😀
cái Varnish này tương thích với sentora không Luân ơi. Vì đang sử dụng sentora thấy nó rất tốt, ổn định và có email server kèm theo.
Được đấy, có hướng dẫn ở đây nè bạn: http://forums.sentora.org/showthread.php?tid=764&pid=5036#pid5036
Bài này mình mới đọc qua. Luân cho mình hỏi cái là. Mình đã cài sentora rồi. Giờ cài thêm cái này nữa thì có sao không Luân? Hay phải reset lại vps cài lại từ đâu?
Nếu dùng Sentora thì bạn cài theo comment trước mình trả lời ấy, không dùng cách như ở bài này.
Ý là mình làm theo comment này http://forums.sentora.org/showthread.php?tid=764&pid=5036#pid5036. Nhưng mình hỏi Luân là mình đã cài sentora rồi giờ cài theo bài viết này nữa đc không? Hay là minh phải reset lại vps mới cài.
VD:
Cài sentora -> cài varnish
Cài varnish -> sentora.
Ý là vậy đó Luân.
Cảm ơn Luân.
Link comment hướng dẫn kia dành cho Zpanel nhưng Sentora cũng tương tự kiểu thế. Tất nhiên là bạn phải cài Sentora rồi mới làm theo hướng dẫn đó được.
cảm ơn Luân nhiều
Đã làm và đã thất bại. Làm đủ kiểu cũng không được.
Luân ơi. Rãnh làm thử 1 phát rồi cho AE bài hướng dẫn đi Luân ơi. Thấy forum mình cũng nhiều người sử dụng sentora lắm.
Giờ phải nhờ bên vps họ restore lại dữ liệu 😀
@luan: cảm ơn bạn vì bài viết này, nó đã giúp tôi cài đặt thành công varnish trên ngnix.( tôi đã cài varnish trên vps riêng, hiệu suất thật tuyệt, ram có 768 mà chạy còn nhanh hơn vps 1G ở VN.
tôi có chút ý kiến :
1. bạn nên sữa tiêu đề bài viết lại. Thêm 64Bit vào tiêu đề ==> theo cách trên sẽ không cấu hình được file /etc/varnish/default.vcl ===> vì nó không hỗ trợ hàm req.method trên ubuntu 32Bit.
Okie cảm ơn bạn, mình toàn dùng 64bit nên không nắm rõ được phần hỗ trợ hàm req.method 😀
@luan: nếu mình muốn cấu hình cho Varnish chạy trên 1 vps riêng, thì làm sao,
bạn có thể làm bài hướng dẫn cụ thể không.
mình thấy hay đó.
Cài đặt bình thường nhé, Chia Sẻ Coupon đang làm như vậy. Phần backend bạn cấu hình trỏ đến IP server chạy webserver thay vì IP localhost 127.0.0.1 là được.
@luân: chia sẽ này là ok, những chưa đủ, vì với 1 người mới như tôi thì botay, nhưng cuối cùng ,cũng xong .cảm ơn bạn nhìu.
@ALL: nhớ mỡ ip nội mạng trên cả 2 vps nhé ( tôi phãi tìm hết tài liệu nước ngoài,mới hiểu được có mỗi đoạn đó)
cái này do bác luân nghĩ ,mọi người đã có kiến thức cơ bản nên không nhắc đến .
@ALL: mở ip NỘI MẠNG Ở 2 VPS =)))))
“rpm –nosignature -i https://repo.varnish-cache.org/redhat/varnish-4.0.el6.rpm
yum update && yum –disablerepo=epel* –enablerepo=varnish* install varnish”
Lênh Yum trên bị lỗi 404:
https://repo.varnish-cache.org/redhat/varnish-4.0/el6/i386/repodata/repomd.xml: [Errno 14] PYCURL ERROR 22 – “The requested URL returned error: 404 Not Found”
Trying other mirror.
Error: Cannot retrieve repository metadata (repomd.xml) for repository: varnish-4.0. Please verify its path and try again
Mình check lại thấy ok đó, bạn kiểm tra lại VPS có làm sao ko nhé.
VPS mình cài hocvps
Mình check link https://repo.varnish-cache.org/redhat/varnish-4.0/el6/i386/repodata/repomd.xml trên trình duyệt cũng 404 mà
Mình dùng CentOS 6, cài HocVPS Script rồi cài Varnish theo đúng hướng dẫn trong bài đều ok.
Không biết bạn dùng VPS có gì khác không?
Mình cài script hocvps và sử dụng centos 6.7 32bis
Khi chạy đến lệnh trên thì lỗi 🙁
Ừ mình thử thấy lỗi thật, do Varnish rồi. Bạn dùng bản 64bit nhé, không bị lỗi thế này đâu.
Hiện tại mình đang có web trên vps rồi, giờ muốn up centos từ 32bit lên 64bit có bị mất dữ liệu ko. Mình dùng Digitalocean
Có cách nào ko hướng dẫn giúp mình
Bạn backup lại toàn bộ web, tải xuống rồi Reinstall VPS. Vì cài lại sẽ mất hết dữ liệu.
Bac luân cho mình hỏi tí nhé, mình thấy trong W3 Total Cache có Varnish servers
như vậy là mình có trể cài varnish trên 1 server rồi điền IP của server đó vào w3 tc, như vậy có đúng ko nhỉ,
và cho mình hỏi thêm, mình có thể dùng 1 server varnish cho nhiều website đc ko
Hi bac luân, cho mình hỏi vấn đề này tí, mình đã cài hocvps và tối ưu theo cách dùng memcached và W3 Total Cache
Vậy thì khi cài thêm varnish thì có cần phải cài thêm Varnish HTTP Purge ko?
có cần stop memcached và w3 ko?
Cảm ơn bác nhiều
Cài memcached mình thấy khá là ok rồi, bạn xem có cần thiết phải dùng thêm Varnish nữa ko?
Mình cài thì báo lỗi như sau
“The requested URL returned error: 404 Not Found”
Trying other mirror.
Error: Cannot retrieve repository metadata (repomd.xml) for repository: varnish-4.0. Please verify its path and try again
Mình thử thì thấy ok, có vẻ VPS của bạn có vấn đề rồi, thử ping sang site khác xem được ko?
nhưng khi post bài thì bị lỗi 502
Vậy bạn điều chỉnh lại cấu hình backend như sau xem ok ko:
Điều chỉnh thế nào nhỉ?
mặc định lúc cái nó như thế rồi mà ad
nó vẫn thế này
# varnishd -F -f /etc/varnish/default.vcl
bind(): Address already in use
bind(): Address already in use
Error: Failed to open (any) accept sockets.
Bạn chạy
service varnish restart
ấychạy lệnh thì bị lỗi như này:
# varnishd -F -f /etc/varnish/default.vcl
bind(): Address already in use
bind(): Address already in use
Error: Failed to open (any) accept sockets.
Bạn thử lệnh
service varnish restart
thử xem sao.Bạn cho mình hỏi với, mình sài plugin WP WP Redirect Link trên vps sử dụng script của bạn lúc đầu bên host cũ thì nó vẫn chuyển link dạng http://domain.com/dtmp.php?link=http://domain.com nhưng bây giờ không chuyển được toàn báo lỗi
No input file specified. chỉ mình cách khắc phục với
Bạn thử chạy menu “hocvps”, chọn chức năng số 14, Phân quyền webserver nhé
vẫn lỗi vậy.
Thêm một điều nữa là site mình truy cập ở ngoài thì bình thường ( có cache) trong khi phần post bài lài liên tục lỗi 502. đã sửa theo cách trên blog này mà vẫn ko được.
thế nên cài thêm cái này xem thế nào mà lại cũng bị lỗi 🙁
Nếu không có Varnish cache thì site bạn hoạt động bình thường chứ?
vẫn bình thường bạn
mình cài plugin list fushion.
Nó tạo ra file những người đăng ký nhận bản tin ở đường dẫn: http://domain.vn/blog/wp-content/plugins/list-fusion/csv/Nhan-tin-giam-can.csv
Khi mình click vào link đó hiện lỗi 404, nên mình chỉ có cách vào sftp tải nó về
Bạn thử chạy menu “hocvps” rồi chọn chức năng 14) Phan quyen webserver xem có ok không?
Mình thử nhiều lần rồi không dc bạn ạ. mình dùng hocvps bản 1.1
Mình hết dự đoán được rồi, nếu được bạn gửi mình thông tin login các thứ qua mail để mình check nhé,
Luân ơi cho mình hỏi khi sử dụng hocvps cài đặt thế nào để có thể download file trong thư mục public_html
Mình thấy các file backup dc để trong private_html khi download phải thêm port mysql nữa.
Bạn sử dụng chức năng nào vậy nhỉ?
Khi mình cài plug-in nó tạo ra file .csv lưu vào trong thư mục của plugin. mình bấm tải về toàn báo lỗi 404, hoặc khi muốn cho khách xem website download 1 tài liệu gì đó cũng k biết để vào đâu
Mình vẫn chưa hiểu cụ thể trường hợp sử dụng của bạn như thế nào để đưa ra phương án giải quyết. Bạn có thể chụp ảnh rồi gửi lại cho mình vào mail admin@hocvps để xem được chứ?
Chào Luân,
Cho mình hỏi chút.
Khi mình setup server dùng LEMP hay LAMP thì khi đăng nhập sftp bằng tài khoản root thì nó đưa thẳng vào thư mục root. mình phải quay tra và vào lại var/www/html chẳng hạn, rất mất time có các nào mà mình đăng nhập = root là vào thẳng html ko cậu ngoài tại shortcut…
Mấy cái hosting hay dùng đó cậu.
Thanks!
Đơn giản thôi, sau khi đăng nhập SSH với tài khoản root, bạn chạy lệnh sau để edit file
nano .bashrc
rồi chèn đoạn code sau xuống dưới cùng để nó tự di chuyển đến folder /home:cd /home
Thử login lại xem kết quả nhé.
Thank cậu, mình làm được rồi, phải lưu cái này vào note mới đc 🙂
Luân ơi, chỗ này
backend default {
.host = “127.0.0.1”;
.port = “8080”;
}
Mình đổi IP 127.0.0.1 thành 1 ip khác, ip đó là của 1 vps khác có được không Luân, tức mình chạy varnish trên 1 vps và chạy server trên 1 vps khác ấy. Dĩ nhiên server kia cũng listen ở port 8080.
Được nhé, nhưng tốt nhất nên sử dụng private IP thì sẽ cho kết nối nhanh hơn, đỡ bị x2 băng thông
Nếu vậy thì phải đặt chung một location rồi Luân nhỉ. Cám ơn Luân nhé 😀
Đúng rồi bạn, phải đặt chung 1 location rồi dùng private IP ấy
Ah còn nữa Luân ơi, việc trỏ domain subdomain từ hocjvps khi truy xuất qua thằng nãy vẫn ok chứ Luân 😀
Vẫn ok nhé, tuy nhiên lúc này cần chỉnh sửa rule cho Varnish pass cái subdomain cho backend: http://stackoverflow.com/questions/24185924/how-to-disable-varnish-cache-for-wildcard-subdomains
Ok, cám ơn Luân, để mình thử 😀
Trước mình vẫn dùng cái này nhưng dạo này cài SSL nên không biết cấu hình thế nào cho nó chạy với port 443, Luân hướng dẫn thêm được không 😀
Varnish nó không hỗ trợ SSL nhé 😀
Mình đọc trên Community của DO nó có nói dùng SSL Termination nhưng khó hiểu quá, Luân xem giải thích giúp mình cái 😀
Có link không gửi mình coi xem thế nào?
Đây luân: https://www.digitalocean.com/community/tutorials/how-to-configure-varnish-cache-4-0-with-ssl-termination-on-ubuntu-14-04
Ok, lúc nào rảnh mình sẽ nghiên cứu chi tiết hơn.
Repo EPEL sẽ cài đặt Varnish 2.1.5
Nếu bạn muốn cài đặt Varnish 4 trên CentOS thì hãy thực hiện như sau:
rpm –nosignature -i https://repo.varnish-cache.org/redhat/varnish-4.0.el6.rpm
yum –disablerepo=epel* –enablerepo=varnish* install varnish