Post Series: Varnish
  1. 1. Hướng dẫn cài đặt Varnish cho Nginx/Apache trên CentOS/Ubuntu
  2. 2. Varnish Agent – Công cụ quản lý và Theo dõi Varnish
  3. 3. Varnish Dashboard – Theo dõi Varnish trực quan, realtime
  4. 4. Cấu hình Varnish hoạt động với CloudFlare và Nginx
  5. 5. Cấu hình Varnish hoạt động trên 2 port khác nhau
  6. 6. Sử dụng HTTPS với Varnish

Nếu bạn sử dụng HocVPS Script, bên cạnh port 80, mình còn để Nginx listen thêm một port admin nữa, mặc định là 2313. Listen port 80 thì đơn giản rồi, tuy nhiên, làm thế nào để Varnish listen thêm một port khác nữa và connect với backend thì là vấn đề khác.

Nhân dịp có bạn viết comment hỏi về việc để Varnish listen thêm port, mình có mày mò và viết lại bài hướng dẫn này cho các bạn đang cần sử dụng.

Lưu ý: nếu bạn không muốn mày mò mất thời gian, hãy dùng thẳng IP gốc + port là đủ.

Hướng dẫn cấu hình Varnish hoạt động trên nhiều port

Trong bài viết này, mình sẽ hướng dẫn cấu hình để Varnish listen trên 2 port là 802313. Khi có truy cập sẽ kết nối với backend 127.0.0.1 với port 80802313. Lưu ý trường hợp này đặc biệt ở chỗ Varnish và Nginx cùng listen trên port 2313 nhé. Giả sử IP server là 11.22.33.44.

– Đầu tiên bạn cấu hình Varnish listen trên 2 port là 802313 bằng cách mở file cấu hình tham số Varnish

nano /etc/sysconfig/varnish

Kéo xuống dưới cùng, chuyển tham số:

DAEMON_OPTS="-a ${VARNISH_LISTEN_ADDRESS}:${VARNISH_LISTEN_PORT} \

thành

DAEMON_OPTS="-a :80,11.22.33.44:2313 \

Bạn cần add thêm IP server vào port 2313 để phân biệt với Nginx cũng listen port 2313, trên host là 127.0.0.1.

– Tiếp theo, mở file VCL mặc định:

nano /etc/varnish/default.vcl

Thêm đoạn cấu hình port admin bên dưới backend default:

backend default {
    .host = "127.0.0.1";
    .port = "8080";
}

backend admin {
    .host = "127.0.0.1";
    .port = "2313";
}

Sau đó quy định rule khi nào thì sử dụng cấu hình backend default hoặc admin trong sub vcl_recv, ví dụ:

sub vcl_recv {
        # Default backend is set to default
        set req.backend_hint = default;
        if (req.http.host == "example.com:2313") {
                set req.backend_hint = admin;
        }

– Restart Varnish và Nginx

service nginx restart
service varnish restart

Vậy là xong, tận hưởng thành quả thôi.

Chúc bạn thành công.

Comment của bạn

Lưu ý: tất cả comment đều được kiểm duyệt cẩn thận! Nếu có code bạn hãy up lên pastebin.com rồi để lại link trong comment.

11 Comments

  1. Việt Lại 2 comment

    Mình đang cài Nginx để làm proxy cho apache.
    Apache đang listen port 8080
    NGINX listen port 80.
    Vậy nếu muốn cài thêm Varnish cache nữa thì phải làm thế nào nhỉ?

      1. Việt Lại 2 comment

        Thank b. Vậy nếu cài Varnish Cache thì nó sẽ đc apply cho toàn bộ các project trên sv b nhỉ?

        Nếu mình muốn chỉ apply varnish cache cho 1 repo nào đó liệu có được ko?

        1. Việt Phương Moderator

          Mình chưa thử tách biệt như vậy nên không rõ rồi. Bạn thử xem

  2. Mai nam 11 comment

    Hi bạn .
    Mình có vps cài eassyengine, chạy cả magento2 lẫn wp. Bạn chỉ mình cách cấu hình chung cho cả 2 đc ko? Hoặc dùng 2 file cấu hình cho mỗi loại site đc ko? Kiểu như vhosst ấy. Nếu truy cập domain a chạy wp thì dubgf file domainA.vlc, truy cập domainB magento thì dùng file DomainB.vlc.
    Cám ơn bạn.

    Cho mình hỏi thêm là vps chạy nginx php7 zend opcodecache, redis cache. Có nên thêm varnish nữa ko nhỉ? Chạy magento2+wp.

    1. MrDuc 14 comment

      Bạn tạo ra các file config cho từng site dạng thế này nhé

      if (req.http.host == “wp.com”) {
      include “wp-recv.vcl”;
      } else if (req.http.host == “mg.com”) {
      include “mg-recv.vcl”;
      } else {
      include “df-recv.vcl”;
      }
      Làm thử đi được thì báo lại nhé. Vấn đề chung cho multisite

  3. CươngPjh 29 comment

    Anh ơi trong trường hợp mà mình có nhiều site trên cùng 1 VPS muốn cho chúng nó cùng được dùng Varnish thì sao hả anh? Em có làm thử những vẫn lỗi, chạy riêng VPS thì được chứ cứ chung vào là lỗi.

    1. Dinh Le Giang 51 comment

      Cái này áp dụng khi bạn sử dụng nhiều port, ví dụ như bạn dùng nginx làm proxy mà vẫn muốn thông qua varnish cache nữa. Còn nhiều site thì vẫn chỉ áp dụng varnish cơ bản thôi, cấu hình đúng 1 port là 8080 thôi