0206 | How to install Varnish on CentOS+DA

เขาว่ากันว่า Varnish cache แรงดี เลยเอาวิธีลงมาแป๊ะไว้หน่อย วิธีต่อไปนี้ สำหรับ CentOS ที่ลง DirectAdmin ไว้นะครับ
1.เตรียม dependencies ที่ varnish ต้องการ
[code]
yum -y install automake autoconf libtool ncurses-devel libxslt groff pcre-devel pkgconfig
[/code]

2.download varnish and compile
ก่อนโหลด ให้โหลดเวอร์ชั่นล่าสุด ที่ stable ดูเวอร์ชั่นล่าสุดได้ที่นี่ครับ https://www.varnish-cache.org/releases
[code]
wget http://repo.varnish-cache.org/source/varnish-3.0.0.tar.gz
tar xzf varnish-3.0.0.tar.gz
cd varnish-3.0.0
sh autogen.sh
sh configure
make
make install
ldconfig
[/code]


3.ทดสอบ varnish ที่ port 8080
ถ้ามี Firewall ให้เปิด port 8080 ก่อนครับ และแก้ไขไฟล์ /usr/local/etc/varnish/default.vcl โดยเอาเครื่องหมาย # ที่อยู่ด้านหน้าออก โดยที่ 123.123.123.123 ให้แก้ไขเป็น ip ของ server ของคุณ
[code]
backend default {
.host = "123.123.123.123";
.port = "80";
}
[/code]
start varnish ด้วยคำสั่ง
[code]
varnishd -f /usr/local/etc/varnish/default.vcl -s malloc,512M -T 127.0.0.1:2000 -a 123.123.123.123:8080
[/code]
หากสามารถใช้งานได้เหมือนเปิดเว็บปกติที่ port 80 เช่น https://www.igolf.in.th:8080 ต้องแสดงเหมือนกับ https://www.igolf.in.th แสดงว่าทำงานได้ปกติ

4.stop varnish
หยุดการทำงานของ varnish ก่อนเพื่อที่เราจะทำการสลับ port ของ varnish ให้เป็น 80 และเปลี่ยนของ apache ให้เป็น 8080 ด้วยคำสั่ง
[code]
killall varnishd
[/code]

5.แก้ไขไฟล์ config ต่างๆเพื่อเปลี่ยน port apache ไปใช้งาน 8080
ไฟล์ที่ต้องแก้ไขทั้งหมดคือ
/etc/httpd/conf/httpd.conf
/etc/httpd/conf/extra/httpd-vhosts.conf
/usr/local/directadmin/data/templates/custom/virtual_host2.conf
/usr/local/directadmin/data/templates/custom/virtual_host2_sub.conf
/usr/local/directadmin/data/templates/custom/redirect_virtual_host.conf

แก้ไข /etc/httpd/conf/httpd.conf
จาก
[code]
Listen 80
[/code]
เป็น
[code]
Listen 8080
[/code]

แก้ไขไฟล์ /etc/httpd/conf/extra/httpd-vhosts.conf
จาก
[code]
Include /etc/httpd/conf/ips.conf

#
#
<VirtualHost 123.123.123.123:80>
[/code]
เป็น
[code]
#Include /etc/httpd/conf/ips.conf
LogFormat "%O \"%r\"" homedir
NameVirtualHost 127.0.0.1:8080
NameVirtualHost 123.123.123.123:8080
NameVirtualHost 123.123.123.123:443
#
#
<VirtualHost 127.0.0.1:8080 123.123.123.123:8080>
[/code]
คัดลอกไฟล์ template มาไว้ใน custom เพื่อแก้ไข (ไฟล์ใน custom จะไม่ถูกทับเมื่อ update DirectAdmin)
[code]
cp -p /usr/local/directadmin/data/templates/virtual_host2.conf /usr/local/directadmin/data/templates/custom/virtual_host2.conf
cp -p /usr/local/directadmin/data/templates/virtual_host2_sub.conf /usr/local/directadmin/data/templates/custom/virtual_host2_sub.conf
cp -p /usr/local/directadmin/data/templates/redirect_virtual_host.conf /usr/local/directadmin/data/templates/custom/redirect_virtual_host.conf
[/code]
และแก้ไขไฟล์ต่อไปนี้ ที่เพิ่งคัดลอกไป โดยแก้เหมือนกันทั้ง 3 ไฟล์
/usr/local/directadmin/data/templates/custom/virtual_host2.conf
/usr/local/directadmin/data/templates/custom/virtual_host2_sub.conf
/usr/local/directadmin/data/templates/custom/redirect_virtual_host.conf
จาก
[code]
<VirtualHost |IP|:80 |MULTI_IP|>
[/code]
เป็น
[code]
<VirtualHost 127.0.0.1:8080 |IP|:8080 |MULTI_IP|>
[/code]

6.ติดตั้ง mod_rpaf เพื่อแก้ไข ip ของ remote host จาก 127.0.0.1 ที่เรียกมาจาก varnish ให้เป็น client ip ที่เรียกมาจริง
[code]
wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
tar xzf mod_rpaf-0.6.tar.gz
cd mod_rpaf-0.6
apxs -cia mod_rpaf-2.0.c
[/code]
แก้ไขไฟล์ /etc/httpd/conf/extra/httpd-includes.conf เพิ่มข้อความ
[code]
<IfModule mod_rpaf-2.0.c>
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1
RPAFheader X-Forwarded-For
</IfModule>
[/code]

7.สร้างไฟล์ start/stop varnishd
[code]
nano /etc/init.d/varnishd
[/code]
เพิ่มข้อความด้านล่างนี้
[code]
#!/bin/sh
#
# Startup script for varnishd
#
# chkconfig: 2345 80 20
# description: Varnish Cache is an open source, state of the art web application accelerator. \
# You install it on your web server and it makes your website fly.
# processname: varnishd
# config: /usr/local/etc/varnish/default.vcf
#
# By: Korakot E. <korakot [at] pinkkeyhost.com>
# $Id: varnishd.init.d,v 1.0 2011/07/27 23:23:23 kke $

# Source function library.
. /etc/rc.d/init.d/functions

MALLOC="512M"
BINDADDR="0.0.0.0:80"
TELPORT="2000"
CONFIG="/usr/local/etc/varnish/default.vcl"
OPTIONS="-f $CONFIG -s malloc,$MALLOC -T 127.0.0.1:$TELPORT -a $BINDADDR"

if [ -f /etc/sysconfig/varnishd ]; then
. /etc/sysconfig/varnishd
OPTIONS="-f $CONFIG -s malloc,$MALLOC -T 127.0.0.1:$TELPORT -a $BINDADDR"
fi

PATH="$PATH:/usr/local/sbin"

# See how we were called.
case "$1" in
start)
echo -n "Starting varnishd: "
daemon varnishd $OPTIONS
echo
touch /var/lock/subsys/varnishd
;;
stop)
echo -n "Shutting down varnishd: "
killproc varnishd
echo
rm -f /var/lock/subsys/varnishd
;;
status)
status varnishd
;;
restart)
$0 stop
$0 start
;;
*)
echo -n "Usage: $0 {start|stop|restart|status}"
exit 1
esac

if [ $# -gt 1 ]; then
shift
$0 $*
fi

exit 0
[/code]
แก้ permission และกำหนดให้ varnishd ทำงานเมื่อ boot ระบบ
[code]
chmod 755 /etc/init.d/varnishd
chkconfig –add varnishd
chkconfig varnishd on
[/code]

8.กำหนดค่า config ของ varnishd
แก้ไขไฟล์ /usr/local/etc/varnish/default.vcl
[code]
backend default {
.host = "127.0.0.1";
.port = "8080";
}
[/code]
สร้าง/แก้ไขไฟล์ /etc/sysconfig/varnishd กำหนดค่า MALLOC ตามต้องการ (หรือจะแก้ไปในไฟล์ init.d ตรงๆเลยก็ได้ ก็ไม่ต้องสร้างไฟล์นี้)
[code]
MALLOC="1G"
BINDADDR="127.0.0.1:80,123.123.123.123:80"
TELPORT="2000"
CONFIG="/usr/local/etc/varnish/default.vcl"
[/code]

9.ทำการ rewrite config vhosts ของ apache ใหม่ตามไฟล์ template ที่ได้แก้ไขไป
[code]
echo "action=rewrite&value=httpd" >> /usr/local/directadmin/data/task.queue
[/code]
รอประมาณ 1 นาที ให้ cron ทำงาน
[code]
/etc/init.d/httpd restart
/etc/init.d/varnishd start
[/code]

เป็นอันเสร็จครับ ทดสอบเข้าเว็บ โดยเข้าทาง port 80 ธรรมดา

โดยสามารถไปดูบทความต้นฉบับได้นี่ครับ
Install Varnishd on CentOS+DA
โดยพี่แมน KKE

You may also like...

4 Responses

  1. usuario prueba says:

    you are the best

  2. saosangmo says:

    hi, could you translate this post into English?
    many thanks

Leave a Reply

Your email address will not be published. Required fields are marked *