[U]
[B]How-to Install Varnishd on CentOS+DA (by KKE)[/B][/U]
หลังจากได้ทดลองติดตั้งใช้งานเป็นที่น่าพอใจ จึงนำวิธีการติดตั้งมาเผยแพร่ครับ
หมายเหตุ: อันนี้ติดตั้งเฉพาะ http ที่ port 80 นะครับ สำหรับ https ที่ port 443 จะเข้าตรงที่ apache ไม่ผ่าน varnish
หมายเหตุ: เครื่องที่มีมากกว่า 1 ip อาจจะมีปัญหากับ virtual host template นะครับ เพราะไม่ได้ทดสอบ แต่น่าจะใช้งานได้ และต้องเพิ่ม bind ip ให้ varnish ด้วย
[COLOR=#ff00ff][B]Varnish Cache[/B] is an open source, state of the art web application accelerator. You install it on your web server and it makes your website fly.
https://www.varnish-cache.org/
[/COLOR]
วิธีการติดตั้งนั้นจะใช้วิธี compile จาก source เอานะครับ ไม่ลงผ่าน yum หรือ apt
[COLOR=#0000ff][B]ขั้นตอนที่ 1[/B] ติดตั้งและทดสอบการทำงานของ varnish ก่อนใช้งานจริง[/COLOR]
[B]1.1: เตรียม dependencies ที่ varnish ต้องการ
[/B]สำหรับ OS อื่นๆ ดูได้ที่ https://www.varnish-…rce-or-packages
สำหรับ CentOS
#yum -y install automake autoconf libtool ncurses-devel libxslt groff pcre-devel pkgconfig
[B]1.2: download varnish and compile
[/B]
#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
[B]1.3: ทดสอบ varnish ที่ port 8080
[/B]หากมี firewall ให้ทำการเปิด port tcp 8080 ก่อน
แก้ไขไฟล์ /usr/local/etc/varnish/default.vcl (เอา #remark 4 บรรทัดนี้ออก แล้วแก้ไขโดยที่ 123.123.123.123 เป็น ip จริงของ server)
backend default {
.host = "123.123.123.123";
.port = "80";
}
start varnish ด้วยคำสั่ง
#varnishd -f /usr/local/etc/varnish/default.vcl -s malloc,512M -T 127.0.0.1:2000 -a 123.123.123.123:8080
ลองเรียกเว็บผ่าน port 8080 ดู ถ้าเข้าได้ตามปกติแปลว่า varnish ทำงานได้ถูกต้อง เช่น
hxxp://www.domain.com:8080/index.php
ทุก url ควรจะได้ผลลัพธ์เหมือนกับเรียกตามปกติที่ไม่ใส่ :8080 ทุกประการ
[B]1.4: stop varnish
[/B]
#killall varnishd
[COLOR=#006400]มาถึงตรงนี้เราก็พร้อมที่จะทำการสลับเอา varnish มาไว้ที่ port 80 และเอา apache ไปไว้ที่ port 8080 เพื่อใช้งานจริงกันแล้ว[/COLOR]
[COLOR=#0000ff]
[B]ขั้นตอนที่ 2 [/B]สลับ Apache ไปใช้งาน port 8080[/COLOR]
[B]2.1: แก้ไขไฟล์ config ต่างๆเพื่อเปลี่ยน port apache ไปใช้งาน 8080
[/B]ไฟล์ที่ต้องแก้ไขทั้งหมด
/etc/httpd/conf/httpd.conf
/etc/httpd/conf/ips.conf (ไฟล์ถูก DA เขียนทับเมื่อเพิ่ม domain)
/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
จาก
Listen 80
เป็น
Listen 8080
[s]/etc/httpd/conf/ips.conf
จาก
[/s]
LogFormat "%O \"%r\"" homedir
NameVirtualHost 123.123.123.123:80
NameVirtualHost 123.123.123.123:443
เป็น (ให้เพิ่มข้อความต่อไปนี้ที่ต้นไฟล์ /etc/httpd/conf/extra/httpd-vhosts.conf แทน และ remark บรรทัด include ips.conf ออก)
LogFormat "%O \"%r\"" homedir
NameVirtualHost 127.0.0.1:8080
NameVirtualHost 123.123.123.123:8080
NameVirtualHost 123.123.123.123:443
/etc/httpd/conf/extra/httpd-vhosts.conf
จาก
Include /etc/httpd/conf/ips.conf
#
#
<VirtualHost 123.123.123.123:80>
เป็น
###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>
คัดลอกไฟล์ template มาไว้ใน custom เพื่อแก้ไข (ไฟล์ใน custom จะไม่ถูกทับเมื่อ update DirectAdmin)
#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
/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
ทั้ง 3 ไฟล์แก้เหมือนกัน จาก
<VirtualHost |IP|:80 |MULTI_IP|>
เป็น
<VirtualHost 127.0.0.1:8080 |IP|:8080 |MULTI_IP|>
[B]2.2: ติดตั้ง mod_rpaf เพื่อแก้ไข ip ของ remote host จาก 127.0.0.1 ที่เรียกมาจาก varnish ให้เป็น client ip ที่เรียกมาจริง
[/B]
#wget http://www.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
แก้ไขไฟล์ /etc/httpd/conf/extra/httpd-includes.conf เพิ่มข้อความ
<IfModule mod_rpaf-2.0.c>
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1
RPAFheader X-Forwarded-For
</IfModule>
[B]2.3 สร้างไฟล์ start/stop varnishd
[/B]/etc/init.d/varnishd
#!/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
แก้ permission และกำหนดให้ varnishd ทำงานเมื่อ boot ระบบ
#chmod 755 /etc/init.d/varnishd
#chkconfig --add varnishd
#chkconfig varnishd on
[B]2.4: กำหนดค่า config ของ varnishd
[/B]แก้ไขไฟล์ /usr/local/etc/varnish/default.vcl
backend default {
.host = "127.0.0.1";
.port = "8080";
}
สร้าง/แก้ไขไฟล์ /etc/sysconfig/varnishd กำหนดค่า MALLOC ตามต้องการ (หรือจะแก้ไปในไฟล์ init.d ตรงๆเลยก็ได้ ก็ไม่ต้องสร้างไฟล์นี้)
MALLOC="1G"
BINDADDR="127.0.0.1:80,123.123.123.123:80"
TELPORT="2000"
CONFIG="/usr/local/etc/varnish/default.vcl"
[B]2.5: ทำการ rewrite config vhosts ของ apache ใหม่ตามไฟล์ template ที่ได้แก้ไขไป
[/B]
#echo "action=rewrite&value=httpd" >> /usr/local/directadmin/data/task.queue
[COLOR=#ff0000]รอประมาณ 1 นาที ให้ cron ทำงาน
[/COLOR]
#/etc/init.d/httpd restart
[COLOR=#008000]ถึงตรงนี้จะต้องเข้าเว็บผ่าน url :8080 ได้ (เข้าไปที่ apache ตรงๆ)
[/COLOR]
[B]2.6: start varnish
[/B]
#/etc/init.d/varnishd start
[COLOR=#008000]ถึงตรงนี้จะต้องเข้าเว็บผ่าน url ปกติได้ (เข้าผ่าน varnish)
[/COLOR]
[B]2.7: หากมี firewall สามารถปิด port 8080 ที่เปิดเพื่อทดสอบตอนแรกได้ เนื่องจาก varnish จะเรียกผ่าน 127.0.0.1
[/B][COLOR=#ff0000]หมายเหตุ: หากมี script ประเภทป้องกัน DDOS ให้แน่ใจว่ามันจะไม่ block 127.0.0.1 ไปใน firewall
[/COLOR]
[B]2.8: หากต้องการ start/stop varnishd ผ่าน service monitor ของ DA
[/B]ให้แก้ไขไฟล์ /usr/local/directadmin/data/admin/services.status เพิ่มบรรทัดนี้ที่ท้ายไฟล์
varnishd=ON
[COLOR=#0000ff][B]การ start/stop varnishd
[/B][/COLOR]
#/etc/init.d/varnishd start
#/etc/init.d/varnishd stop
#/etc/init.d/varnishd restart
[B][COLOR=#0000ff]
เรียกดู stat
[/COLOR][/B]
#varnishstat
[B][COLOR=#0000ff]เพิ่มเติม[/COLOR][/B]
ตัวอย่างค่า apache config ที่ผมใช้
Timeout 35
KeepAlive On
MaxKeepAliveRequests 250
KeepAliveTimeout 3
StartServers 10
MinSpareServers 10
MaxSpareServers 24
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 10000
[B][COLOR=#ff00ff]ใครจะเอาไปเผยแพร่ต่อ ใส่ credit + แหล่งที่มา ไว้ด้วยนะครับ
บทความโดย: KKE <korakot [at] pinkkeyhost.com>
[/COLOR][/B]
http://www.thaihosttalk.com/topic/32748-how-to-install-varnishd-on-centosda/