‫خدا‬ ‫نام‬ ‫به‬
varnish
‫دخت‬ ‫اسمعیل‬ ‫یاشار‬ : ‫نویسنده‬
‫نسخه‬
۰.۱
: ‫نویسنده‬ ‫باره‬ ‫در‬
‫رشته‬ ‫آموخته‬ ‫دانش‬ ‫دخت‬ ‫اسمعیل‬ ‫یاشار‬ ‫بنده‬
cyber security
. ‫هستم‬
‫از‬ ‫بیش‬
۱۵
. ‫دارم‬ ‫فعالیت‬ ‫سابقه‬ ‫سال‬
‫مولف‬ - ‫مدرس‬ - ‫مشاور‬ : ‫داد‬ ‫شرح‬ ‫زیر‬ ‫های‬ ‫ساختار‬ ‫در‬ ‫میتوان‬ ‫را‬ ‫بنده‬ ‫های‬ ‫فعالیت‬ ‫جمله‬ ‫از‬
gnu/linux system/network/security Engineer/administrator & oracle dba | Linux Trainer |devops
. ): ‫جدید‬ ‫دنیاهای‬ ‫کشف‬ ‫و‬ ‫تحقیق‬ ‫و‬ ‫مطالعه‬ ‫به‬ ‫مند‬ ‫عالقه‬
. ‫کنم‬ ‫اشاره‬ ‫استراتژی‬ ‫های‬ ‫بازی‬ ‫و‬ ‫اوتلو‬ ‫و‬ ‫شطرنج‬ ‫بازی‬ ‫به‬ ‫میتوانم‬ ‫من‬ ‫های‬ ‫سرگرمی‬ ‫از‬ ‫واقع‬ ‫در‬
‫بنیان‬ ‫از‬ ‫یکی‬ ‫و‬ ‫لینوکس‬/‫گنو‬ ‫و‬ ‫باز‬ ‫متن‬ ‫دنیای‬ ‫عاشق‬ . ‫هستم‬ ‫عاشق‬ ‫یک‬ ‫من‬
‫گذ‬
‫تبریز‬ ‫الگ‬ ‫اران‬
: ‫کنید‬ ‫پیدا‬ ‫و‬ ‫کنید‬ ‫دنبال‬ ‫را‬ ‫من‬ ‫میتوانید‬ ‫چطور‬ ‫خب‬
Mob : 09141100257
Telegram ID
Telegram channel
Instagram Account
Linkedin Account
. ‫بشنوم‬ ‫را‬ ‫انتقادتون‬ ‫یا‬ ‫پیشنهاد‬ ‫هرگونه‬ ‫میشم‬ ‫خوشحال‬ ‫همچنین‬
‫چ‬
: ‫کنید‬ ‫پیدا‬ ‫را‬ ‫من‬ ‫از‬ ‫ی‬ ‫دیگر‬ ‫های‬ ‫کتاب‬ ‫میتونید‬ ‫طور‬
‫توی‬
slideshare
. ‫کنید‬ ‫پیدا‬ ‫را‬ ‫کردم‬ ‫منتشر‬ ‫آزاد‬ ‫بصورت‬ ‫که‬ ‫دیگری‬ ‫های‬ ‫کتاب‬ ‫میتونید‬ ‫بگردید‬ ‫من‬ ‫اسم‬ ‫دنبال‬ ‫گوگل‬ ‫یا‬
‫؟‬ ‫کیست‬ ‫ی‬ ‫برا‬ ‫کتاب‬ ‫این‬
‫برای‬ ‫کتاب‬ ‫این‬
sys admin
‫و‬
sys enginner
‫و‬ ‫شده‬ ‫تهیه‬ ‫ها‬
‫الیه‬ ‫شبکه‬ ‫های‬ ‫پروتکل‬ ‫از‬ ‫درستی‬ ‫درک‬ ‫که‬ ‫کسانی‬
۷
. ‫دارند‬
‫شرح‬ ‫و‬ ‫تعریف‬ ‫از‬ ‫قسمتی‬ : ‫نکته‬
varnish
‫شده‬ ‫برداشت‬ ‫اینترنت‬ ‫از‬
. ‫است‬
( ‫وارنیش‬
Varnish
‫استفاده‬ ‫مورد‬ ‫امنیتی‬ ‫سیستم‬ ‫یک‬ ‫بصورت‬ ‫هم‬ ‫کشینگ‬ ‫بصورت‬ ‫هم‬ ‫وارنیش‬.‫است‬ ‫سرور‬ ‫وب‬ ‫برای‬ ‫کشینگ‬ ‫سیستم‬ ‫یک‬ )
‫سیستم‬ ‫یک‬ ‫خود‬ ‫در‬ ‫یعنی‬ .‫میگیرد‬ ‫قرار‬
waf
. ‫میباشد‬ ‫وب‬ ‫شتابدهنده‬ ‫یک‬ ‫همچنین‬ . ‫دارد‬ ‫قدرتمند‬
‫در‬ ‫که‬ ‫است‬ ‫بصورتی‬ ‫آن‬ ‫عملکرد‬ ‫سیستم‬
 
.‫میشود‬ ‫هاست‬ ‫روی‬ ‫سایت‬ ‫وب‬ ‫سرعت‬ ‫افزایش‬ ‫باعث‬ ‫و‬ ‫میگیرد‬ ‫قرار‬ ‫سرور‬ ‫وب‬ ‫مقابل‬
(‫وارنیش‬
Varnish
‫؟‬ ‫میکند‬ ‫کار‬ ‫چگونه‬ )
‫ارسال‬ ‫درخواستهای‬ ‫به‬ ‫سرعت‬ ‫به‬ ‫و‬ ‫میکند‬ ‫زخیره‬ ‫هاست‬ ‫سرور‬ ‫حافظه‬ ‫روی‬ ‫را‬ ‫شما‬ ‫سایت‬ ‫وب‬ ‫استاتیک‬ ‫اطالعات‬ ‫وارنیش‬ ‫کشینگ‬ ‫سیستم‬
.‫میدهد‬ ‫پاسخ‬ ‫کاربران‬ ‫سمت‬ ‫از‬ ‫شده‬
‫پردازش‬ ‫کاهش‬ ‫سیستم‬ ‫این‬ ‫دیگر‬ ‫مزیت‬
CPU
‫میزان‬ ‫آمدن‬ ‫پایین‬ ‫و‬
CPU Usage
‫دیتابیس‬ ‫از‬ ‫اطالعاتی‬ ‫و‬ ‫ها‬ ‫فایل‬ ‫نمایش‬ ‫سرعت‬ ‫افزایش‬ ،
.‫شود‬ ‫داده‬ ‫نمایش‬ ‫و‬ ‫استخراج‬ ‫آنها‬ ‫اطالعات‬ ‫آنی‬ ‫و‬ ‫ای‬ ‫لحظه‬ ‫بصورت‬ ‫نیست‬ ‫الزم‬ ‫که‬ ‫است‬
(‫وارنیش‬ ‫کشینگ‬ ‫با‬ ‫آپاچی‬ ‫سرور‬ ‫وب‬ ‫عملکرد‬
Varnish
)
‫با‬ ‫و‬ ‫است‬ ‫اصلی‬ ‫سرور‬ ‫روی‬ ‫تغییر‬ ‫بدون‬ ‫و‬ ‫تکراری‬ ‫بصورت‬ ‫ها‬ ‫درخواست‬ ‫این‬ ‫که‬ ‫دارد‬ ‫وجود‬ ‫هایی‬ ‫درخواست‬ ‫همیشه‬ ‫سرورها‬ ‫وب‬ ‫روی‬ ‫در‬
.‫یابد‬ ‫می‬ ‫کاهش‬ ‫شدت‬ ‫به‬ ‫سرور‬ ‫منابع‬ ‫از‬ ‫استفاده‬ ‫و‬ ‫افزایش‬ ‫پاسخگویی‬ ‫سرعت‬ ‫کشینگ‬ ‫سیستم‬ ‫طریق‬ ‫از‬ ‫ها‬ ‫نیاز‬ ‫این‬ ‫به‬ ‫پاسخگویی‬
: ‫است‬ ‫شده‬ ‫داده‬ ‫نشان‬ ‫آپاچی‬ ‫سرور‬ ‫وب‬ ‫با‬ ‫وارنیش‬ ‫کشینگ‬ ‫سیستم‬ ‫عملکرد‬ ‫دیاگرام‬ ‫زیر‬ ‫تصویر‬ ‫در‬
(‫وارنیش‬ ‫کشینگ‬ ‫بدون‬ ‫آپاچی‬ ‫سرور‬ ‫وب‬ ‫عملکرد‬
Varnish
)
‫با‬ ‫نهایت‬ ‫در‬ ‫و‬ ‫پی‬ ‫اچ‬ ‫پی‬ ‫با‬ ‫ارتباط‬ ‫زیادی‬ ‫تعداد‬ ‫وارنیش‬ ‫کشینگ‬ ‫از‬ ‫استفاده‬ ‫بدون‬ ‫سرور‬ ‫وب‬ ‫میکنید‬ ‫مشاهده‬ ‫زیر‬ ‫تصویر‬ ‫در‬ ‫که‬ ‫همانطوری‬
(‫ال‬ ‫کیو‬ ‫اس‬ ‫مای‬ ‫دیتابیس‬
mysql
‫مانند‬ ‫سرور‬ ‫منابع‬ ‫از‬ ‫الزم‬ ‫غیر‬ ‫استفاده‬ ‫و‬ ‫شدن‬ ‫کند‬ ‫باعث‬ ‫که‬ ‫میشود‬ ‫برقرار‬ )
CPU
.‫میشود‬
.‫میدهد‬ ‫نمایش‬ ‫را‬ ‫وارنیش‬ ‫کشینگ‬ ‫سیستم‬ ‫بدون‬ ‫آپاچی‬ ‫عملکرد‬ ‫نحوه‬ ‫زیر‬ ‫دیاگرام‬
‫سیستم‬ ‫در‬
Varnish Cache
‫ارسال‬ ‫امکان‬
http header
‫دارد‬ ‫وجود‬ ‫بازدیدکننده‬ ‫کامپیوتر‬ ‫یا‬ ‫نویسی‬ ‫برنامه‬ ‫اسکریپت‬ ‫به‬
‫به‬ ‫موسوم‬ ‫جاوا‬ ‫نویسی‬ ‫برنامه‬ ‫زبان‬ ‫طریق‬ ‫از‬ ‫موضوع‬ ‫این‬ ‫که‬
VCL
.‫است‬ ‫پذیر‬ ‫امکان‬
‫کش‬ ‫وارنیش‬
varnish cache
‫دهنده‬ ‫شتاب‬ ‫یک‬
HTTP
‫و‬
https
. ‫میباشد‬
‫های‬ ‫سایت‬ ‫وب‬ ‫برای‬ ‫شده‬ ‫طراحی‬ ‫که‬
.‫باال‬ ‫بسیار‬ ‫بازدید‬ ‫با‬ ‫داینامیک‬
Varnish
‫مثل‬ ‫دیگری‬ ‫های‬ ‫سرور‬ ‫کش‬ ‫خالف‬ ‫بر‬
Squid
‫برای‬ ‫که‬
HTTP
‫و‬
SMTP
‫و‬
FTP
‫طور‬ ‫به‬ .‫شود‬ ‫می‬ ‫کاربرده‬ ‫به‬
‫روی‬ ‫بر‬ ‫تخصصی‬
HTTP
.‫است‬ ‫شده‬ ‫متمرکز‬
‫مجوز‬ ‫دو‬ ‫تحت‬ ،‫است‬ ‫باز‬ ‫منبع‬ ‫وارنیش‬
BSD
‫نسخه‬ .‫است‬ ‫شده‬ ‫منتشر‬
1.0
‫سال‬ ‫در‬ ‫وارنیش‬ ‫از‬
2006
‫وارنیش‬ .‫شد‬ ‫منتشر‬
2.0
‫سال‬ ‫در‬
2008
‫وارنیش‬ ‫و‬ ،‫شد‬ ‫منتشر‬
3.0
‫سال‬ ‫در‬
2011
.‫شد‬ ‫منتشر‬
‫پروژه‬
 
‫وارنیش‬
 
‫زبان‬ ‫به‬ .‫است‬ ‫شده‬ ‫آغاز‬ ‫نروژی‬ ‫آنالین‬ ‫روزنامه‬ ‫یک‬ ‫توسط‬
C
‫های‬ ‫عامل‬ ‫سیستم‬ ‫برای‬ ‫و‬ ‫است‬ ‫نوشته‬
..‫دارد‬ ‫را‬ ‫معروف‬ ‫های‬ ‫عامل‬ ‫سیستم‬ ‫همه‬ ‫روی‬ ‫بر‬ ‫نصب‬ ‫قابلیت‬ ‫وارنیش‬ ‫که‬ ‫بگم‬ ‫باید‬ ‫البته‬ ‫است‬ ‫شده‬ ‫طراحی‬ ‫یونیکس‬
‫توسط‬
 
Poul-Henning Kamp
.‫شود‬ ‫می‬ ‫داده‬ ‫توسعه‬ ,
‫در‬ ‫اطالعات‬
 
‫و‬ ‫رم‬ ‫حافظه‬ ‫در‬ ‫اطالعاتی‬ ‫چه‬ ‫که‬ ‫گیرد‬ ‫می‬ ‫تصمیم‬ ‫سپس‬ ‫و‬.‫شود‬ ‫می‬ ‫ذخیره‬ ‫سیستم‬ ‫رم‬ ‫حافظه‬ ‫در‬ ‫وارنیش‬
.‫کند‬ ‫پیدا‬ ‫انتقال‬ ‫سیستم‬ ‫هارد‬ ‫به‬ ‫اطالعتی‬ ‫چه‬
‫همپچنین‬ ‫برسدو‬ ‫کانکشن‬ ‫تعداد‬ ‫محدودیت‬ ‫به‬ ‫که‬ ‫وقتی‬ ‫تا‬ ‫دهد‬ ‫می‬ ‫اختصاص‬ ‫جداگانه‬ ‫ترد‬ ‫بک‬ ‫اتصال‬ ‫هر‬ ‫با‬ ‫وارنیش‬
‫قرار‬ ‫ریز‬ ‫سر‬ ‫صف‬ ‫در‬ ‫را‬ ‫جدید‬ ‫ورودی‬ ‫های‬ ‫درخواست‬
‫ک‬.‫دهد‬ ‫می‬
‫وارنیش‬
 
‫پسوند‬ ‫با‬ ‫فایلی‬ ‫ساختار‬ ‫از‬ ‫خود‬ ‫پیکربندی‬ ‫برای‬
VCL
‫که‬ ‫کند‬ ‫می‬ ‫استفاده‬
 
‫زبان‬ ‫وسیله‬ ‫به‬
C
‫نویسی‬ ‫اسکریپت‬
‫شود‬ ‫می‬ ‫انجام‬ ‫برایش‬
Varnish
‫از‬ ‫همچنین‬
 
 
load balancing
 
‫و‬
‫الگوریتم‬
 
round robin
 
.‫کند‬ ‫می‬ ‫پشتیبانی‬ ‫خوبی‬ ‫به‬
 
.
‫برای‬ ‫ها‬ ‫پالگین‬ ‫نوشتن‬ ‫قابلیت‬
 
‫وارنیش‬
 
‫ماژول‬ ‫از‬ ‫استفاده‬ ‫یا‬ ‫و‬ ‫نوشتن‬ ‫با‬ ‫شما‬ ‫که‬ ‫هست‬ ‫ان‬ ‫خوب‬ ‫بسیار‬ ‫مزایای‬ ‫جمله‬ ‫از‬
‫به‬ ‫توانم‬ ‫می‬ ‫معروف‬ ‫های‬ ‫ماژول‬ ‫جمله‬ ‫از‬ ‫بدهید‬ ‫جواب‬ ‫خود‬ ‫نیازهای‬ ‫از‬ ‫خیلی‬ ‫به‬ ‫تونید‬ ‫می‬ ‫وارنیش‬ ‫برای‬ ‫شده‬ ‫نوشته‬ ‫های‬
Vanirsh security
.‫ببرم‬ ‫نام‬ ‫را‬
 
‫از‬ ‫پشیبانی‬
 
ESI
‫سازی‬ ‫فشرده‬
GZIP
‫آن‬ ‫استخراج‬ ‫و‬
‫دیگر‬ ‫بسیار‬ ‫های‬ ‫قابلیت‬ ‫و‬
‫از‬ ‫استفاده‬ ‫دالیل‬
Varnish Cache
:
1
.
‫باالی‬ ‫مصرف‬ ‫از‬ ‫ناشی‬ ، ‫مجازی‬ ‫سرور‬ ‫لود‬ ‫کاهش‬
CPU
‫سرور‬ ‫وب‬ ‫توسط‬
2
.
‫سایت‬ ‫وب‬ ‫صفحات‬ ‫لود‬ ‫سرعت‬ ‫برابری‬ ‫چند‬ ‫افزایش‬
3
.
‫شما‬ ‫سایت‬ ‫وب‬ ‫همزمان‬ ‫های‬ ‫آنالین‬ ‫تحمل‬ ‫توان‬ ‫و‬ ‫بازدید‬ ‫افزایش‬
‫وارنیش‬
 
‫طرفدار‬ ‫بسیار‬ ‫دروپال‬ ‫های‬ ‫سایت‬ ‫در‬ ‫عالی‬ ‫و‬ ‫موثر‬ ‫بسیار‬ ‫ارتباط‬ ‫برقراری‬ ‫قابلیت‬ ‫و‬ ‫دارد‬ ‫که‬ ‫ساختاری‬ ‫به‬ ‫باتوجه‬
‫هست‬ ‫ثابت‬ ‫پای‬ ‫یک‬ ‫پربازدید‬ ‫دروپالی‬ ‫های‬ ‫سایت‬ ‫اکثر‬ ‫در‬ ‫و‬ ‫دارد‬
‫کند‬ ‫می‬ ‫استفاده‬ ‫وارنیش‬ ‫از‬ ‫باالیش‬ ‫بسیار‬ ‫بازدید‬ ‫به‬ ‫پاسخگویی‬ ‫برای‬ ‫دروپال‬ ‫اصلی‬ ‫سایت‬
‫ذکر‬ ‫باید‬ ‫البته‬
‫کرد‬
‫اورد‬ ‫می‬ ‫وجود‬ ‫به‬ ‫شما‬ ‫سایت‬ ‫برای‬ ‫رو‬ ‫بسیاری‬ ‫مشکالت‬ ‫نشود‬ ‫کانفیگ‬ ‫خوبی‬ ‫به‬ ‫اگر‬ ‫وارنیش‬ ‫که‬
‫و‬ ‫هست‬ ‫بروزرسانی‬ ‫حال‬ ‫در‬ ‫لحظه‬ ‫در‬ ‫شما‬ ‫سایت‬ ‫که‬ ‫شود‬ ‫می‬ ‫نمایان‬ ‫بیشتر‬ ‫هایی‬ ‫سایت‬ ‫برای‬ ‫مشکالت‬ ‫این‬ ‫جمله‬ ‫از‬
‫شما‬ ‫سایت‬ ‫صفحات‬ ‫وارنیش‬ ‫که‬ ‫هست‬ ‫این‬ ‫دلیلش‬ ‫هم‬ ‫واین‬ ‫کند‬ ‫می‬ ‫نمود‬ ‫بیشتر‬ ‫کند‬ ‫می‬ ‫پیدا‬ ‫تغییر‬ ‫شما‬ ‫صفحات‬ ‫مطالب‬
‫پاسخگوی‬ ‫بتواند‬ ‫سرور‬ ‫وب‬ ‫فراخوانی‬ ‫و‬ ‫وقفه‬ ‫بدون‬ ‫بعدی‬ ‫های‬ ‫درخواست‬ ‫در‬ ‫تا‬ ‫کند‬ ‫می‬ ‫ذخیره‬ ‫خودش‬ ‫کش‬ ‫در‬ ‫رو‬
.‫باشد‬ ‫ها‬ ‫درخواست‬
: ‫هست‬ ‫زیر‬ ‫قرار‬ ‫به‬ ‫وارنیش‬ ‫کانفیق‬ ‫از‬ ‫‌هایی‬
‫ه‬‫نمون‬
if (req.request == GET &&
“ ”
req.url ~ .(gif|jpg|jpeg|bmp|png|ico)$ ) {
“ ”
unset req.http.cookie;
set req.grace = 1m;
return(lookup);
}
////Cache images in vcl_recv ////
pic
1
‫ساختار‬ ‫کلی‬ ‫شمای‬ :
varnish
-----------------------------------------------------
if (req.http.cookie) {
set req.http.Cookie = regsuball(req.http.Cookie,
"__utm.=[^;]+(; )?", "");
if (req.http.cookie ~ "^ *$") {
remove req.http.cookie;
}
}
//// Remove Google Analytics in vcl_recv ////
------------------------------------------------------
backend default {
.host="192.168.1.10";
.port="8080";
.probe={
.url= /test.php ;
” ”
}
}
backend second {
.host="192.168.1.20";
.port="8080";
}
////Multiple backend configuration ////
----------------------------------------------------
director balance random {
{ .backend = default; .weight = 1; }
{ .backend = second; .weight = 2; }
}
sub vcl_recv {
set.req.backend = balance;
return(pass);
}
////Load balanced 33 / 66 % config ////
--------------------------------------------------------
if (obj.hits > 0) {
#if hit add hit count
set resp.http.X-Cache = "HIT-" obj.hits;
} else {
set resp.http.X-Cache = "MISS ;
”
}
////Adding headers on response ////
---------------------------------------------------------
no varnish :
default varnish :
--------------------------------------------------------
# Drop any cookies sent to WordPress.
sub vcl_recv {
unset req.http.cookie;
}
# Drop any cookies WordPress tries to send back
sub vcl_fetch {
unset beresp.http.set-cookie;
}
////Kill those cookies!! ////
costume varnish
‫نصب‬ ‫نحوه‬
varnish
:
sudo rpm --nosignature -i http://repo.varnish-cache.org/redhat/
varnish-3.0/el5/noarch/varnish-release-3.0-1.noarch.rpm
sudo yum install varnish
‫وارنیش‬ ‫سرویس‬ ‫اجرای‬
# sudo service varnish start
‫اینکه‬ ‫کردن‬ ‫چک‬ ‫برای‬
varnish
‫چه‬ ‫در‬
run level
: ‫داریم‬ ‫دارد‬ ‫قرار‬
# sudo chkconfig --list varnish
varnish0:off 1:off 2:on 3:on 4:on 5:on 6:off
: ‫کردن‬ ‫فعال‬ ‫برای‬
sudo chkconfig varnish on
‫‌رویم‬
‫ی‬‫م‬ ‫کانفیق‬ ‫مسیر‬ ‫به‬
# sudo vim /etc/sysconfig/varnish
‫اینجا‬ ‫در‬
VARNISH_STORAGE
. ‫میکنیم‬ ‫پیدا‬ ‫را‬
VARNISH_STORAGE="malloc,${VARNISH_STORAGE_SIZE}" //‫دستور‬ ‫کلی‬ ‫شکل‬
. ‫دارد‬ ‫ما‬ ‫رم‬ ‫میزان‬ ‫به‬ ‫بستگی‬ ‫ساختار‬ ‫این‬ ‫تنظیم‬
‫ما‬ ‫‌رم‬
: ‫نمونه‬ ‫برای‬
۱۶
‫که‬ . ‫‌باشد‬
‫ی‬‫م‬ ‫گیگ‬
۱۴
. ‫‌دهیم‬
‫ی‬‫م‬ ‫اختصاص‬ ‫گیگ‬
VARNISH_STORAGE_SIZE=14G
‫آپاچی‬ ‫با‬ ‫مثال‬
‫با‬ ‫ارتباط‬
backend servers
:
backend servers
‫سرور‬ ‫همان‬ ‫حقیقت‬ ‫در‬
http
. ‫باشیم‬ ‫ارتباط‬ ‫در‬ ‫آن‬ ‫با‬ ‫‌خواهیم‬
‫ی‬‫م‬ ‫ما‬ ‫که‬ ‫ماست‬
. ‫‌رویم‬
‫ی‬‫م‬ ‫پیش‬ ‫به‬ ‫مثال‬ ‫این‬ ‫با‬ ‫اینجا‬ ‫در‬ . ‫است‬ ‫قرار‬ ‫چه‬ ‫به‬ ‫ما‬ ‫سرور‬ ‫ساحتار‬ ‫و‬ ‫دیاگرام‬ ‫میدانیم‬ ‫ما‬ ‫هرچیر‬ ‫از‬ ‫قبل‬
‫فایل‬ ‫حال‬
vcl
. ‫میکنیم‬ ‫کانفیق‬ ‫رو‬
vim /etc/varnish/default.vcl
: ‫داریم‬ ‫مساله‬ ‫صورت‬ ‫به‬ ‫نسبت‬
backend server01 {
.host = "localhost";
.port = "8080";
}
‫اینجا‬ ‫در‬
server 01
‫حقیقت‬ ‫در‬
FQDN
‫یعنی‬ . ‫‌باشد‬
‫ی‬‫م‬ ‫ما‬
hostname , ip
‫وصل‬ ‫آن‬ ‫به‬ ‫ما‬ ‫هست‬ ‫قرار‬ ‫که‬ ‫پورتی‬ ‫و‬
. ‫شویم‬
. ‫میکنیم‬ ‫ریلود‬ ‫ذخیره‬ ‫از‬ ‫بعد‬
# sudo service varnish reload
‫نیاز‬ ‫به‬ ‫نسبت‬ ‫تا‬ ‫داریم‬ ‫نیاز‬ ‫منظور‬ ‫این‬ ‫برای‬ . ‫میکند‬ ‫سرور‬ ‫کش‬ ‫و‬ ‫سرور‬ ‫بین‬ ‫ارتباط‬ ‫و‬ ‫اتصال‬ ‫به‬ ‫اقدام‬ ‫وارنیش‬ ‫اول‬ ‫وهله‬ ‫در‬
. ‫کنیم‬ ‫سازی‬ ‫سفارشی‬
backend website {
.host = "localhost";
.port = "8080";
.probe = {
.url = "/favicon.ico";
.timeout = 60ms;
.interval = 2s;
.window = 5;
.threshold = 3;
}
}
‫مثال‬ ‫این‬ ‫در‬
backend
‫درخواستی‬ ‫حقیقت‬ ‫در‬ . ‫داریم‬ ‫نمونه‬ ‫برای‬ ‫بخشها‬ ‫از‬ ‫بعضی‬ ‫برای‬ ‫دارد‬ ‫هویت‬ ‫احراز‬ ‫به‬ ‫نیاز‬ ‫سرور‬
. ‫شود‬ ‫بسته‬ ‫باید‬ ‫نهایت‬ ‫در‬ ‫و‬ . ‫‌شود‬
‫ی‬‫م‬ ‫ارسال‬
backend api {
.host = "localhost";
.port = "8080";
.probe = {
.request =
"GET /status HTTP/1.1"
"Host: www.yourhostname.com"
"Connection: close"
"X-API-Key: e4d909c290d0fb1ca068ffaddf22cbd0"
"Accept: application/json"
.timeout = 60ms;
.interval = 2s;
.window = 5;
.threshold = 3;
}
}
‫عکس‬ ‫در‬ ‫که‬ ‫همانطور‬
۱
‫الزمه‬ ‫های‬ ‫دهی‬ ‫مسیر‬ ‫باید‬ ‫کالینت‬ ‫طرف‬ ‫از‬ ‫درخواستی‬ ‫هر‬ ‫در‬ . ‫واریش‬ ‫شمای‬ ‫در‬ . ‫کردیم‬ ‫اشاره‬
. ‫دهیم‬ ‫انجام‬ ‫را‬
vcl_recv {
if ( req.url ~ "/api/") {
set req.backend = api;
} else {
Set req.backend = website;
}
}
‫ساحتار‬ ‫با‬ ‫دراینجا‬
probe , backend
. ‫شد‬ ‫خواهید‬ ‫آشنا‬
probe favicon {
.url = "/favicon.ico";
.timeout = 60ms;
.interval = 2s;
.window = 5;
.threshold = 3;
}
probe robots {
.url = "/robots.txt";
.timeout = 60ms;
.interval = 2s;
.window = 5;
.threshold = 3;
}
backend server01 {
.host = "localhost";
.port = "8080";
.probe = favicon;
}
backend server02 {
.host = "localhost";
.port = "8080";
.probe = robots;
}
‫باالنس‬ ‫لود‬ ‫درخواست‬
‌
:
‫در‬ ‫ما‬ ‫های‬ ‫ترافیک‬ ‫مدیریت‬ ‫برای‬ ‫است‬ ‫متدی‬ ‫کردن‬ ‫باالنس‬ ‫درخواست‬
cluster pool
. ‫را‬ ‫گردی‬ ‫وب‬ ‫از‬ ‫تجربه‬ ‫بهترین‬ ‫میکند‬ ‫گارانتی‬ ‫کاربر‬ ‫برای‬ ‫ساختار‬ ‫این‬
. ‫داریم‬ ‫مفهوم‬ ‫این‬ ‫سازی‬ ‫پیاده‬ ‫برای‬ ‫الگوریتم‬ ‫یا‬ ‫روش‬ ‫شش‬ ‫ما‬ ‫بدانیم‬ ‫باید‬ ‫چیز‬ ‫هر‬ ‫از‬ ‫قبل‬
random, client, hash, round-robin,DNS,fallback
‫خاص‬ ‫فایل‬ ‫یا‬ ‫خاص‬ ‫مسیر‬ ‫برای‬ ‫دانلود‬ ‫میزان‬ ‫محدودیت‬
vcl 4.0;
import tcp;
backend default {
.host = "192.0.2.11";
.port = "8080";
}
sub vcl_recv {
# Shape (pace) the data rate to avoid filling
# router buffers for a single client.
if (req.url ~ ".mp4$") {
tcp.set_socket_pace(10000/8); # [KB/s], so this is 10Mbit/s.
}
}
Backend servers
Varnish has a concept of "backend" or "origin" servers. A backend server is the server providing the content Varnish
will accelerate.
Our first task is to tell Varnish where it can find its backends. Start your favorite text editor and open the relevant VCL
file.
Somewhere in the top there will be a section that looks a bit like this.:
# backend default {
# .host = "127.0.0.1";
# .port = "8080";
# }
We remove the comment markings in this text stanza making the it look like.:
backend default {
.host = "127.0.0.1";
.port = "8080";
}
Now, this piece of configuration defines a backend in Varnish called default. When Varnish needs to get content from
this backend it will connect to port 8080 on localhost (127.0.0.1).
Varnish can have several backends defined you can even join several backends together into clusters of backends for
load balancing purposes.
Multiple backends
At some point you might need Varnish to cache content from several servers. You might want Varnish to map all the
URL into one single host or not. There are lot of options.
Lets say we need to introduce a Java application into out PHP web site. Lets say our Java application should handle
URL beginning with /java/.
We manage to get the thing up and running on port 8000. Now, lets have a look at the default.vcl.:
backend default {
.host = "127.0.0.1";
.port = "8080";
}
We add a new backend.:
backend java {
.host = "127.0.0.1";
.port = "8000";
}
Now we need tell Varnish where to send the difference URL. Lets look at vcl_recv.:
sub vcl_recv {
if (req.url ~ "^/java/") {
set req.backend_hint = java;
} else {
set req.backend_hint = default;
}
}
It's quite simple, really. Lets stop and think about this for a moment. As you can see you can define how you choose
backends based on really arbitrary data. You want to send mobile devices to a different backend? No problem. if
(req.http.User-agent ~ /mobile/) .. should do the trick.
Without an explicit backend selection, varnish will continue using the default backend. If there is no backend named
default, the first backend found in the vcl will be used as the default backend.
Backends and virtual hosts in Varnish
Varnish fully supports virtual hosts. They might however work in a somewhat counter-intuitive fashion since they are
never declared explicitly. You set up the routing of incoming HTTP requests in vcl_recv. If you want this routing to be
done on the basis of virtual hosts you just need to inspect req.http.host.
You can have something like this:
sub vcl_recv {
if (req.http.host ~ "foo.com") {
set req.backend_hint = foo;
} elsif (req.http.host ~ "bar.com") {
set req.backend_hint = bar;
}
}
Note that the first regular expressions will match "foo.com", "www.foo.com", "zoop.foo.com" and any other host ending
in "foo.com". In this example this is intentional but you might want it to be a bit more tight, maybe relying on the ==
operator in stead, like this:
sub vcl_recv {
if (req.http.host == "foo.com" || req.http.host == "www.foo.com") {
set req.backend_hint = foo;
}
}
Directors
You can also group several backend into a group of backends. These groups are called directors. This will give you
increased performance and resilience.
You can define several backends and group them together in a director. This requires you to load a VMOD, a Varnish
module, and then to call certain actions in vcl_init.:
import directors; # load the directors
backend server1 {
.host = "192.168.0.10";
}
backend server2 {
.host = "192.168.0.10";
}
sub vcl_init {
new bar = directors.round_robin();
bar.add_backend(server1);
bar.add_backend(server2);
}
sub vcl_recv {
# send all traffic to the bar director:
set req.backend_hint = bar.backend();
}
This director is a round-robin director. This means the director will distribute the incoming requests on a round-robin
basis. There is also a random director which distributes requests in a, you guessed it, random fashion. If that is not
enough, you can also write your own director (see Writing a Director).
But what if one of your servers goes down? Can Varnish direct all the requests to the healthy server? Sure it can. This is
where the Health Checks come into play.
Health checks
Lets set up a director with two backends and health checks. First let us define the backends:
backend server1 {
.host = "server1.example.com";
.probe = {
.url = "/";
.timeout = 1s;
.interval = 5s;
.window = 5;
.threshold = 3;
}
}
backend server2 {
.host = "server2.example.com";
.probe = {
.url = "/";
.timeout = 1s;
.interval = 5s;
.window = 5;
.threshold = 3;
}
}
What is new here is the probe. In this example Varnish will check the health of each backend every 5 seconds, timing
out after 1 second. Each poll will send a GET request to /. If 3 out of the last 5 polls succeeded the backend is
considered healthy, otherwise it will be marked as sick.
Refer to the Probes section in the VCL documentation for more information.
Now we define the 'director':
import directors;
sub vcl_init {
new vdir = directors.round_robin();
vdir.add_backend(server1);
vdir.add_backend(server2);
}
You use this vdir director as a backend_hint for requests, just like you would with a simple backend. Varnish will not
send traffic to hosts that are marked as unhealthy.
Varnish can also serve stale content if all the backends are down. See Misbehaving servers for more information on how
to enable this.
Please note that Varnish will keep health probes running for all loaded VCLs. Varnish will coalesce probes that seem
identical - so be careful not to change the probe config if you do a lot of VCL loading. Unloading the VCL will discard
the probes. For more information on how to do this please see ref:reference-vcl-director.
changing one s server headers is both practical and fun. It s a good idea to remove information that
’ ’
could help an attacker, and it s also enjoyable to put interesting values in there and see who notices.
’
There are tons of ways of doing this, based on the server you use, but here s a way to do it with
’ Varnish.
Editing default.vcl
In Varnish, your default.vcl file contains the rules that govern your server responses. The vcl_deliver section further
defines what goes out to clients.
By adjusting this section you can strip the values that were set by your backend web server, and substitute your own:
sub vcl_deliver {
remove resp.http.Via;
remove resp.http.X-Whatever;
remove resp.http.X-Powered-By;
remove resp.http.X-Varnish;
remove resp.http.Age;
remove resp.http.Server;
set resp.http.Server = "TFE";
set resp.http.X-Powered-By = "Curiosity";
}

Varnish

  • 2.
    ‫خدا‬ ‫نام‬ ‫به‬ varnish ‫دخت‬‫اسمعیل‬ ‫یاشار‬ : ‫نویسنده‬ ‫نسخه‬ ۰.۱
  • 3.
    : ‫نویسنده‬ ‫باره‬‫در‬ ‫رشته‬ ‫آموخته‬ ‫دانش‬ ‫دخت‬ ‫اسمعیل‬ ‫یاشار‬ ‫بنده‬ cyber security . ‫هستم‬ ‫از‬ ‫بیش‬ ۱۵ . ‫دارم‬ ‫فعالیت‬ ‫سابقه‬ ‫سال‬ ‫مولف‬ - ‫مدرس‬ - ‫مشاور‬ : ‫داد‬ ‫شرح‬ ‫زیر‬ ‫های‬ ‫ساختار‬ ‫در‬ ‫میتوان‬ ‫را‬ ‫بنده‬ ‫های‬ ‫فعالیت‬ ‫جمله‬ ‫از‬ gnu/linux system/network/security Engineer/administrator & oracle dba | Linux Trainer |devops . ): ‫جدید‬ ‫دنیاهای‬ ‫کشف‬ ‫و‬ ‫تحقیق‬ ‫و‬ ‫مطالعه‬ ‫به‬ ‫مند‬ ‫عالقه‬ . ‫کنم‬ ‫اشاره‬ ‫استراتژی‬ ‫های‬ ‫بازی‬ ‫و‬ ‫اوتلو‬ ‫و‬ ‫شطرنج‬ ‫بازی‬ ‫به‬ ‫میتوانم‬ ‫من‬ ‫های‬ ‫سرگرمی‬ ‫از‬ ‫واقع‬ ‫در‬ ‫بنیان‬ ‫از‬ ‫یکی‬ ‫و‬ ‫لینوکس‬/‫گنو‬ ‫و‬ ‫باز‬ ‫متن‬ ‫دنیای‬ ‫عاشق‬ . ‫هستم‬ ‫عاشق‬ ‫یک‬ ‫من‬ ‫گذ‬ ‫تبریز‬ ‫الگ‬ ‫اران‬ : ‫کنید‬ ‫پیدا‬ ‫و‬ ‫کنید‬ ‫دنبال‬ ‫را‬ ‫من‬ ‫میتوانید‬ ‫چطور‬ ‫خب‬ Mob : 09141100257 Telegram ID Telegram channel Instagram Account Linkedin Account . ‫بشنوم‬ ‫را‬ ‫انتقادتون‬ ‫یا‬ ‫پیشنهاد‬ ‫هرگونه‬ ‫میشم‬ ‫خوشحال‬ ‫همچنین‬ ‫چ‬ : ‫کنید‬ ‫پیدا‬ ‫را‬ ‫من‬ ‫از‬ ‫ی‬ ‫دیگر‬ ‫های‬ ‫کتاب‬ ‫میتونید‬ ‫طور‬ ‫توی‬ slideshare . ‫کنید‬ ‫پیدا‬ ‫را‬ ‫کردم‬ ‫منتشر‬ ‫آزاد‬ ‫بصورت‬ ‫که‬ ‫دیگری‬ ‫های‬ ‫کتاب‬ ‫میتونید‬ ‫بگردید‬ ‫من‬ ‫اسم‬ ‫دنبال‬ ‫گوگل‬ ‫یا‬
  • 4.
    ‫؟‬ ‫کیست‬ ‫ی‬‫برا‬ ‫کتاب‬ ‫این‬ ‫برای‬ ‫کتاب‬ ‫این‬ sys admin ‫و‬ sys enginner ‫و‬ ‫شده‬ ‫تهیه‬ ‫ها‬ ‫الیه‬ ‫شبکه‬ ‫های‬ ‫پروتکل‬ ‫از‬ ‫درستی‬ ‫درک‬ ‫که‬ ‫کسانی‬ ۷ . ‫دارند‬ ‫شرح‬ ‫و‬ ‫تعریف‬ ‫از‬ ‫قسمتی‬ : ‫نکته‬ varnish ‫شده‬ ‫برداشت‬ ‫اینترنت‬ ‫از‬ . ‫است‬
  • 5.
    ( ‫وارنیش‬ Varnish ‫استفاده‬ ‫مورد‬‫امنیتی‬ ‫سیستم‬ ‫یک‬ ‫بصورت‬ ‫هم‬ ‫کشینگ‬ ‫بصورت‬ ‫هم‬ ‫وارنیش‬.‫است‬ ‫سرور‬ ‫وب‬ ‫برای‬ ‫کشینگ‬ ‫سیستم‬ ‫یک‬ ) ‫سیستم‬ ‫یک‬ ‫خود‬ ‫در‬ ‫یعنی‬ .‫میگیرد‬ ‫قرار‬ waf . ‫میباشد‬ ‫وب‬ ‫شتابدهنده‬ ‫یک‬ ‫همچنین‬ . ‫دارد‬ ‫قدرتمند‬ ‫در‬ ‫که‬ ‫است‬ ‫بصورتی‬ ‫آن‬ ‫عملکرد‬ ‫سیستم‬   .‫میشود‬ ‫هاست‬ ‫روی‬ ‫سایت‬ ‫وب‬ ‫سرعت‬ ‫افزایش‬ ‫باعث‬ ‫و‬ ‫میگیرد‬ ‫قرار‬ ‫سرور‬ ‫وب‬ ‫مقابل‬ (‫وارنیش‬ Varnish ‫؟‬ ‫میکند‬ ‫کار‬ ‫چگونه‬ ) ‫ارسال‬ ‫درخواستهای‬ ‫به‬ ‫سرعت‬ ‫به‬ ‫و‬ ‫میکند‬ ‫زخیره‬ ‫هاست‬ ‫سرور‬ ‫حافظه‬ ‫روی‬ ‫را‬ ‫شما‬ ‫سایت‬ ‫وب‬ ‫استاتیک‬ ‫اطالعات‬ ‫وارنیش‬ ‫کشینگ‬ ‫سیستم‬ .‫میدهد‬ ‫پاسخ‬ ‫کاربران‬ ‫سمت‬ ‫از‬ ‫شده‬ ‫پردازش‬ ‫کاهش‬ ‫سیستم‬ ‫این‬ ‫دیگر‬ ‫مزیت‬ CPU ‫میزان‬ ‫آمدن‬ ‫پایین‬ ‫و‬ CPU Usage ‫دیتابیس‬ ‫از‬ ‫اطالعاتی‬ ‫و‬ ‫ها‬ ‫فایل‬ ‫نمایش‬ ‫سرعت‬ ‫افزایش‬ ، .‫شود‬ ‫داده‬ ‫نمایش‬ ‫و‬ ‫استخراج‬ ‫آنها‬ ‫اطالعات‬ ‫آنی‬ ‫و‬ ‫ای‬ ‫لحظه‬ ‫بصورت‬ ‫نیست‬ ‫الزم‬ ‫که‬ ‫است‬ (‫وارنیش‬ ‫کشینگ‬ ‫با‬ ‫آپاچی‬ ‫سرور‬ ‫وب‬ ‫عملکرد‬ Varnish ) ‫با‬ ‫و‬ ‫است‬ ‫اصلی‬ ‫سرور‬ ‫روی‬ ‫تغییر‬ ‫بدون‬ ‫و‬ ‫تکراری‬ ‫بصورت‬ ‫ها‬ ‫درخواست‬ ‫این‬ ‫که‬ ‫دارد‬ ‫وجود‬ ‫هایی‬ ‫درخواست‬ ‫همیشه‬ ‫سرورها‬ ‫وب‬ ‫روی‬ ‫در‬ .‫یابد‬ ‫می‬ ‫کاهش‬ ‫شدت‬ ‫به‬ ‫سرور‬ ‫منابع‬ ‫از‬ ‫استفاده‬ ‫و‬ ‫افزایش‬ ‫پاسخگویی‬ ‫سرعت‬ ‫کشینگ‬ ‫سیستم‬ ‫طریق‬ ‫از‬ ‫ها‬ ‫نیاز‬ ‫این‬ ‫به‬ ‫پاسخگویی‬ : ‫است‬ ‫شده‬ ‫داده‬ ‫نشان‬ ‫آپاچی‬ ‫سرور‬ ‫وب‬ ‫با‬ ‫وارنیش‬ ‫کشینگ‬ ‫سیستم‬ ‫عملکرد‬ ‫دیاگرام‬ ‫زیر‬ ‫تصویر‬ ‫در‬
  • 6.
    (‫وارنیش‬ ‫کشینگ‬ ‫بدون‬‫آپاچی‬ ‫سرور‬ ‫وب‬ ‫عملکرد‬ Varnish ) ‫با‬ ‫نهایت‬ ‫در‬ ‫و‬ ‫پی‬ ‫اچ‬ ‫پی‬ ‫با‬ ‫ارتباط‬ ‫زیادی‬ ‫تعداد‬ ‫وارنیش‬ ‫کشینگ‬ ‫از‬ ‫استفاده‬ ‫بدون‬ ‫سرور‬ ‫وب‬ ‫میکنید‬ ‫مشاهده‬ ‫زیر‬ ‫تصویر‬ ‫در‬ ‫که‬ ‫همانطوری‬ (‫ال‬ ‫کیو‬ ‫اس‬ ‫مای‬ ‫دیتابیس‬ mysql ‫مانند‬ ‫سرور‬ ‫منابع‬ ‫از‬ ‫الزم‬ ‫غیر‬ ‫استفاده‬ ‫و‬ ‫شدن‬ ‫کند‬ ‫باعث‬ ‫که‬ ‫میشود‬ ‫برقرار‬ ) CPU .‫میشود‬ .‫میدهد‬ ‫نمایش‬ ‫را‬ ‫وارنیش‬ ‫کشینگ‬ ‫سیستم‬ ‫بدون‬ ‫آپاچی‬ ‫عملکرد‬ ‫نحوه‬ ‫زیر‬ ‫دیاگرام‬
  • 7.
    ‫سیستم‬ ‫در‬ Varnish Cache ‫ارسال‬‫امکان‬ http header ‫دارد‬ ‫وجود‬ ‫بازدیدکننده‬ ‫کامپیوتر‬ ‫یا‬ ‫نویسی‬ ‫برنامه‬ ‫اسکریپت‬ ‫به‬ ‫به‬ ‫موسوم‬ ‫جاوا‬ ‫نویسی‬ ‫برنامه‬ ‫زبان‬ ‫طریق‬ ‫از‬ ‫موضوع‬ ‫این‬ ‫که‬ VCL .‫است‬ ‫پذیر‬ ‫امکان‬ ‫کش‬ ‫وارنیش‬ varnish cache ‫دهنده‬ ‫شتاب‬ ‫یک‬ HTTP ‫و‬ https . ‫میباشد‬ ‫های‬ ‫سایت‬ ‫وب‬ ‫برای‬ ‫شده‬ ‫طراحی‬ ‫که‬ .‫باال‬ ‫بسیار‬ ‫بازدید‬ ‫با‬ ‫داینامیک‬ Varnish ‫مثل‬ ‫دیگری‬ ‫های‬ ‫سرور‬ ‫کش‬ ‫خالف‬ ‫بر‬ Squid ‫برای‬ ‫که‬ HTTP ‫و‬ SMTP ‫و‬ FTP ‫طور‬ ‫به‬ .‫شود‬ ‫می‬ ‫کاربرده‬ ‫به‬ ‫روی‬ ‫بر‬ ‫تخصصی‬ HTTP .‫است‬ ‫شده‬ ‫متمرکز‬ ‫مجوز‬ ‫دو‬ ‫تحت‬ ،‫است‬ ‫باز‬ ‫منبع‬ ‫وارنیش‬ BSD ‫نسخه‬ .‫است‬ ‫شده‬ ‫منتشر‬ 1.0 ‫سال‬ ‫در‬ ‫وارنیش‬ ‫از‬ 2006 ‫وارنیش‬ .‫شد‬ ‫منتشر‬ 2.0 ‫سال‬ ‫در‬ 2008 ‫وارنیش‬ ‫و‬ ،‫شد‬ ‫منتشر‬ 3.0 ‫سال‬ ‫در‬ 2011 .‫شد‬ ‫منتشر‬ ‫پروژه‬   ‫وارنیش‬   ‫زبان‬ ‫به‬ .‫است‬ ‫شده‬ ‫آغاز‬ ‫نروژی‬ ‫آنالین‬ ‫روزنامه‬ ‫یک‬ ‫توسط‬ C ‫های‬ ‫عامل‬ ‫سیستم‬ ‫برای‬ ‫و‬ ‫است‬ ‫نوشته‬ ..‫دارد‬ ‫را‬ ‫معروف‬ ‫های‬ ‫عامل‬ ‫سیستم‬ ‫همه‬ ‫روی‬ ‫بر‬ ‫نصب‬ ‫قابلیت‬ ‫وارنیش‬ ‫که‬ ‫بگم‬ ‫باید‬ ‫البته‬ ‫است‬ ‫شده‬ ‫طراحی‬ ‫یونیکس‬ ‫توسط‬   Poul-Henning Kamp .‫شود‬ ‫می‬ ‫داده‬ ‫توسعه‬ , ‫در‬ ‫اطالعات‬   ‫و‬ ‫رم‬ ‫حافظه‬ ‫در‬ ‫اطالعاتی‬ ‫چه‬ ‫که‬ ‫گیرد‬ ‫می‬ ‫تصمیم‬ ‫سپس‬ ‫و‬.‫شود‬ ‫می‬ ‫ذخیره‬ ‫سیستم‬ ‫رم‬ ‫حافظه‬ ‫در‬ ‫وارنیش‬ .‫کند‬ ‫پیدا‬ ‫انتقال‬ ‫سیستم‬ ‫هارد‬ ‫به‬ ‫اطالعتی‬ ‫چه‬ ‫همپچنین‬ ‫برسدو‬ ‫کانکشن‬ ‫تعداد‬ ‫محدودیت‬ ‫به‬ ‫که‬ ‫وقتی‬ ‫تا‬ ‫دهد‬ ‫می‬ ‫اختصاص‬ ‫جداگانه‬ ‫ترد‬ ‫بک‬ ‫اتصال‬ ‫هر‬ ‫با‬ ‫وارنیش‬ ‫قرار‬ ‫ریز‬ ‫سر‬ ‫صف‬ ‫در‬ ‫را‬ ‫جدید‬ ‫ورودی‬ ‫های‬ ‫درخواست‬ ‫ک‬.‫دهد‬ ‫می‬ ‫وارنیش‬   ‫پسوند‬ ‫با‬ ‫فایلی‬ ‫ساختار‬ ‫از‬ ‫خود‬ ‫پیکربندی‬ ‫برای‬ VCL ‫که‬ ‫کند‬ ‫می‬ ‫استفاده‬   ‫زبان‬ ‫وسیله‬ ‫به‬ C ‫نویسی‬ ‫اسکریپت‬ ‫شود‬ ‫می‬ ‫انجام‬ ‫برایش‬ Varnish ‫از‬ ‫همچنین‬     load balancing   ‫و‬ ‫الگوریتم‬   round robin   .‫کند‬ ‫می‬ ‫پشتیبانی‬ ‫خوبی‬ ‫به‬   . ‫برای‬ ‫ها‬ ‫پالگین‬ ‫نوشتن‬ ‫قابلیت‬   ‫وارنیش‬   ‫ماژول‬ ‫از‬ ‫استفاده‬ ‫یا‬ ‫و‬ ‫نوشتن‬ ‫با‬ ‫شما‬ ‫که‬ ‫هست‬ ‫ان‬ ‫خوب‬ ‫بسیار‬ ‫مزایای‬ ‫جمله‬ ‫از‬ ‫به‬ ‫توانم‬ ‫می‬ ‫معروف‬ ‫های‬ ‫ماژول‬ ‫جمله‬ ‫از‬ ‫بدهید‬ ‫جواب‬ ‫خود‬ ‫نیازهای‬ ‫از‬ ‫خیلی‬ ‫به‬ ‫تونید‬ ‫می‬ ‫وارنیش‬ ‫برای‬ ‫شده‬ ‫نوشته‬ ‫های‬ Vanirsh security .‫ببرم‬ ‫نام‬ ‫را‬   ‫از‬ ‫پشیبانی‬   ESI
  • 8.
    ‫سازی‬ ‫فشرده‬ GZIP ‫آن‬ ‫استخراج‬‫و‬ ‫دیگر‬ ‫بسیار‬ ‫های‬ ‫قابلیت‬ ‫و‬ ‫از‬ ‫استفاده‬ ‫دالیل‬ Varnish Cache : 1 . ‫باالی‬ ‫مصرف‬ ‫از‬ ‫ناشی‬ ، ‫مجازی‬ ‫سرور‬ ‫لود‬ ‫کاهش‬ CPU ‫سرور‬ ‫وب‬ ‫توسط‬ 2 . ‫سایت‬ ‫وب‬ ‫صفحات‬ ‫لود‬ ‫سرعت‬ ‫برابری‬ ‫چند‬ ‫افزایش‬ 3 . ‫شما‬ ‫سایت‬ ‫وب‬ ‫همزمان‬ ‫های‬ ‫آنالین‬ ‫تحمل‬ ‫توان‬ ‫و‬ ‫بازدید‬ ‫افزایش‬ ‫وارنیش‬   ‫طرفدار‬ ‫بسیار‬ ‫دروپال‬ ‫های‬ ‫سایت‬ ‫در‬ ‫عالی‬ ‫و‬ ‫موثر‬ ‫بسیار‬ ‫ارتباط‬ ‫برقراری‬ ‫قابلیت‬ ‫و‬ ‫دارد‬ ‫که‬ ‫ساختاری‬ ‫به‬ ‫باتوجه‬ ‫هست‬ ‫ثابت‬ ‫پای‬ ‫یک‬ ‫پربازدید‬ ‫دروپالی‬ ‫های‬ ‫سایت‬ ‫اکثر‬ ‫در‬ ‫و‬ ‫دارد‬ ‫کند‬ ‫می‬ ‫استفاده‬ ‫وارنیش‬ ‫از‬ ‫باالیش‬ ‫بسیار‬ ‫بازدید‬ ‫به‬ ‫پاسخگویی‬ ‫برای‬ ‫دروپال‬ ‫اصلی‬ ‫سایت‬ ‫ذکر‬ ‫باید‬ ‫البته‬ ‫کرد‬ ‫اورد‬ ‫می‬ ‫وجود‬ ‫به‬ ‫شما‬ ‫سایت‬ ‫برای‬ ‫رو‬ ‫بسیاری‬ ‫مشکالت‬ ‫نشود‬ ‫کانفیگ‬ ‫خوبی‬ ‫به‬ ‫اگر‬ ‫وارنیش‬ ‫که‬ ‫و‬ ‫هست‬ ‫بروزرسانی‬ ‫حال‬ ‫در‬ ‫لحظه‬ ‫در‬ ‫شما‬ ‫سایت‬ ‫که‬ ‫شود‬ ‫می‬ ‫نمایان‬ ‫بیشتر‬ ‫هایی‬ ‫سایت‬ ‫برای‬ ‫مشکالت‬ ‫این‬ ‫جمله‬ ‫از‬ ‫شما‬ ‫سایت‬ ‫صفحات‬ ‫وارنیش‬ ‫که‬ ‫هست‬ ‫این‬ ‫دلیلش‬ ‫هم‬ ‫واین‬ ‫کند‬ ‫می‬ ‫نمود‬ ‫بیشتر‬ ‫کند‬ ‫می‬ ‫پیدا‬ ‫تغییر‬ ‫شما‬ ‫صفحات‬ ‫مطالب‬ ‫پاسخگوی‬ ‫بتواند‬ ‫سرور‬ ‫وب‬ ‫فراخوانی‬ ‫و‬ ‫وقفه‬ ‫بدون‬ ‫بعدی‬ ‫های‬ ‫درخواست‬ ‫در‬ ‫تا‬ ‫کند‬ ‫می‬ ‫ذخیره‬ ‫خودش‬ ‫کش‬ ‫در‬ ‫رو‬ .‫باشد‬ ‫ها‬ ‫درخواست‬
  • 9.
    : ‫هست‬ ‫زیر‬‫قرار‬ ‫به‬ ‫وارنیش‬ ‫کانفیق‬ ‫از‬ ‫‌هایی‬ ‫ه‬‫نمون‬ if (req.request == GET && “ ” req.url ~ .(gif|jpg|jpeg|bmp|png|ico)$ ) { “ ” unset req.http.cookie; set req.grace = 1m; return(lookup); } ////Cache images in vcl_recv //// pic 1 ‫ساختار‬ ‫کلی‬ ‫شمای‬ : varnish
  • 10.
    ----------------------------------------------------- if (req.http.cookie) { setreq.http.Cookie = regsuball(req.http.Cookie, "__utm.=[^;]+(; )?", ""); if (req.http.cookie ~ "^ *$") { remove req.http.cookie; } } //// Remove Google Analytics in vcl_recv //// ------------------------------------------------------ backend default { .host="192.168.1.10"; .port="8080"; .probe={ .url= /test.php ; ” ”
  • 11.
    } } backend second { .host="192.168.1.20"; .port="8080"; } ////Multiplebackend configuration //// ---------------------------------------------------- director balance random { { .backend = default; .weight = 1; } { .backend = second; .weight = 2; } } sub vcl_recv { set.req.backend = balance; return(pass); } ////Load balanced 33 / 66 % config ////
  • 12.
    -------------------------------------------------------- if (obj.hits >0) { #if hit add hit count set resp.http.X-Cache = "HIT-" obj.hits; } else { set resp.http.X-Cache = "MISS ; ” } ////Adding headers on response //// ---------------------------------------------------------
  • 13.
  • 14.
    default varnish : -------------------------------------------------------- #Drop any cookies sent to WordPress. sub vcl_recv { unset req.http.cookie; } # Drop any cookies WordPress tries to send back sub vcl_fetch { unset beresp.http.set-cookie; }
  • 15.
    ////Kill those cookies!!//// costume varnish
  • 16.
    ‫نصب‬ ‫نحوه‬ varnish : sudo rpm--nosignature -i http://repo.varnish-cache.org/redhat/ varnish-3.0/el5/noarch/varnish-release-3.0-1.noarch.rpm sudo yum install varnish ‫وارنیش‬ ‫سرویس‬ ‫اجرای‬ # sudo service varnish start ‫اینکه‬ ‫کردن‬ ‫چک‬ ‫برای‬ varnish ‫چه‬ ‫در‬ run level : ‫داریم‬ ‫دارد‬ ‫قرار‬ # sudo chkconfig --list varnish varnish0:off 1:off 2:on 3:on 4:on 5:on 6:off : ‫کردن‬ ‫فعال‬ ‫برای‬ sudo chkconfig varnish on ‫‌رویم‬ ‫ی‬‫م‬ ‫کانفیق‬ ‫مسیر‬ ‫به‬
  • 17.
    # sudo vim/etc/sysconfig/varnish ‫اینجا‬ ‫در‬ VARNISH_STORAGE . ‫میکنیم‬ ‫پیدا‬ ‫را‬ VARNISH_STORAGE="malloc,${VARNISH_STORAGE_SIZE}" //‫دستور‬ ‫کلی‬ ‫شکل‬ . ‫دارد‬ ‫ما‬ ‫رم‬ ‫میزان‬ ‫به‬ ‫بستگی‬ ‫ساختار‬ ‫این‬ ‫تنظیم‬ ‫ما‬ ‫‌رم‬ : ‫نمونه‬ ‫برای‬ ۱۶ ‫که‬ . ‫‌باشد‬ ‫ی‬‫م‬ ‫گیگ‬ ۱۴ . ‫‌دهیم‬ ‫ی‬‫م‬ ‫اختصاص‬ ‫گیگ‬ VARNISH_STORAGE_SIZE=14G ‫آپاچی‬ ‫با‬ ‫مثال‬
  • 18.
    ‫با‬ ‫ارتباط‬ backend servers : backendservers ‫سرور‬ ‫همان‬ ‫حقیقت‬ ‫در‬ http . ‫باشیم‬ ‫ارتباط‬ ‫در‬ ‫آن‬ ‫با‬ ‫‌خواهیم‬ ‫ی‬‫م‬ ‫ما‬ ‫که‬ ‫ماست‬ . ‫‌رویم‬ ‫ی‬‫م‬ ‫پیش‬ ‫به‬ ‫مثال‬ ‫این‬ ‫با‬ ‫اینجا‬ ‫در‬ . ‫است‬ ‫قرار‬ ‫چه‬ ‫به‬ ‫ما‬ ‫سرور‬ ‫ساحتار‬ ‫و‬ ‫دیاگرام‬ ‫میدانیم‬ ‫ما‬ ‫هرچیر‬ ‫از‬ ‫قبل‬
  • 19.
    ‫فایل‬ ‫حال‬ vcl . ‫میکنیم‬‫کانفیق‬ ‫رو‬ vim /etc/varnish/default.vcl
  • 20.
    : ‫داریم‬ ‫مساله‬‫صورت‬ ‫به‬ ‫نسبت‬ backend server01 { .host = "localhost"; .port = "8080"; } ‫اینجا‬ ‫در‬ server 01 ‫حقیقت‬ ‫در‬ FQDN ‫یعنی‬ . ‫‌باشد‬ ‫ی‬‫م‬ ‫ما‬ hostname , ip ‫وصل‬ ‫آن‬ ‫به‬ ‫ما‬ ‫هست‬ ‫قرار‬ ‫که‬ ‫پورتی‬ ‫و‬ . ‫شویم‬ . ‫میکنیم‬ ‫ریلود‬ ‫ذخیره‬ ‫از‬ ‫بعد‬ # sudo service varnish reload ‫نیاز‬ ‫به‬ ‫نسبت‬ ‫تا‬ ‫داریم‬ ‫نیاز‬ ‫منظور‬ ‫این‬ ‫برای‬ . ‫میکند‬ ‫سرور‬ ‫کش‬ ‫و‬ ‫سرور‬ ‫بین‬ ‫ارتباط‬ ‫و‬ ‫اتصال‬ ‫به‬ ‫اقدام‬ ‫وارنیش‬ ‫اول‬ ‫وهله‬ ‫در‬ . ‫کنیم‬ ‫سازی‬ ‫سفارشی‬ backend website { .host = "localhost"; .port = "8080"; .probe = { .url = "/favicon.ico"; .timeout = 60ms;
  • 21.
    .interval = 2s; .window= 5; .threshold = 3; } } ‫مثال‬ ‫این‬ ‫در‬ backend ‫درخواستی‬ ‫حقیقت‬ ‫در‬ . ‫داریم‬ ‫نمونه‬ ‫برای‬ ‫بخشها‬ ‫از‬ ‫بعضی‬ ‫برای‬ ‫دارد‬ ‫هویت‬ ‫احراز‬ ‫به‬ ‫نیاز‬ ‫سرور‬ . ‫شود‬ ‫بسته‬ ‫باید‬ ‫نهایت‬ ‫در‬ ‫و‬ . ‫‌شود‬ ‫ی‬‫م‬ ‫ارسال‬ backend api { .host = "localhost"; .port = "8080"; .probe = { .request = "GET /status HTTP/1.1" "Host: www.yourhostname.com" "Connection: close" "X-API-Key: e4d909c290d0fb1ca068ffaddf22cbd0" "Accept: application/json" .timeout = 60ms; .interval = 2s;
  • 22.
    .window = 5; .threshold= 3; } } ‫عکس‬ ‫در‬ ‫که‬ ‫همانطور‬ ۱ ‫الزمه‬ ‫های‬ ‫دهی‬ ‫مسیر‬ ‫باید‬ ‫کالینت‬ ‫طرف‬ ‫از‬ ‫درخواستی‬ ‫هر‬ ‫در‬ . ‫واریش‬ ‫شمای‬ ‫در‬ . ‫کردیم‬ ‫اشاره‬ . ‫دهیم‬ ‫انجام‬ ‫را‬ vcl_recv { if ( req.url ~ "/api/") { set req.backend = api; } else { Set req.backend = website; } } ‫ساحتار‬ ‫با‬ ‫دراینجا‬ probe , backend . ‫شد‬ ‫خواهید‬ ‫آشنا‬
  • 23.
    probe favicon { .url= "/favicon.ico"; .timeout = 60ms; .interval = 2s; .window = 5; .threshold = 3; } probe robots { .url = "/robots.txt"; .timeout = 60ms; .interval = 2s; .window = 5; .threshold = 3; } backend server01 { .host = "localhost"; .port = "8080"; .probe = favicon; } backend server02 { .host = "localhost";
  • 24.
  • 25.
    ‫باالنس‬ ‫لود‬ ‫درخواست‬ ‌ : ‫در‬‫ما‬ ‫های‬ ‫ترافیک‬ ‫مدیریت‬ ‫برای‬ ‫است‬ ‫متدی‬ ‫کردن‬ ‫باالنس‬ ‫درخواست‬ cluster pool . ‫را‬ ‫گردی‬ ‫وب‬ ‫از‬ ‫تجربه‬ ‫بهترین‬ ‫میکند‬ ‫گارانتی‬ ‫کاربر‬ ‫برای‬ ‫ساختار‬ ‫این‬ . ‫داریم‬ ‫مفهوم‬ ‫این‬ ‫سازی‬ ‫پیاده‬ ‫برای‬ ‫الگوریتم‬ ‫یا‬ ‫روش‬ ‫شش‬ ‫ما‬ ‫بدانیم‬ ‫باید‬ ‫چیز‬ ‫هر‬ ‫از‬ ‫قبل‬ random, client, hash, round-robin,DNS,fallback
  • 27.
    ‫خاص‬ ‫فایل‬ ‫یا‬‫خاص‬ ‫مسیر‬ ‫برای‬ ‫دانلود‬ ‫میزان‬ ‫محدودیت‬ vcl 4.0; import tcp; backend default { .host = "192.0.2.11"; .port = "8080"; } sub vcl_recv { # Shape (pace) the data rate to avoid filling # router buffers for a single client. if (req.url ~ ".mp4$") { tcp.set_socket_pace(10000/8); # [KB/s], so this is 10Mbit/s. } }
  • 28.
    Backend servers Varnish hasa concept of "backend" or "origin" servers. A backend server is the server providing the content Varnish will accelerate. Our first task is to tell Varnish where it can find its backends. Start your favorite text editor and open the relevant VCL file. Somewhere in the top there will be a section that looks a bit like this.: # backend default { # .host = "127.0.0.1"; # .port = "8080"; # } We remove the comment markings in this text stanza making the it look like.: backend default { .host = "127.0.0.1"; .port = "8080"; } Now, this piece of configuration defines a backend in Varnish called default. When Varnish needs to get content from this backend it will connect to port 8080 on localhost (127.0.0.1). Varnish can have several backends defined you can even join several backends together into clusters of backends for load balancing purposes. Multiple backends At some point you might need Varnish to cache content from several servers. You might want Varnish to map all the URL into one single host or not. There are lot of options. Lets say we need to introduce a Java application into out PHP web site. Lets say our Java application should handle URL beginning with /java/. We manage to get the thing up and running on port 8000. Now, lets have a look at the default.vcl.: backend default { .host = "127.0.0.1"; .port = "8080";
  • 29.
    } We add anew backend.: backend java { .host = "127.0.0.1"; .port = "8000"; } Now we need tell Varnish where to send the difference URL. Lets look at vcl_recv.: sub vcl_recv { if (req.url ~ "^/java/") { set req.backend_hint = java; } else { set req.backend_hint = default; } } It's quite simple, really. Lets stop and think about this for a moment. As you can see you can define how you choose backends based on really arbitrary data. You want to send mobile devices to a different backend? No problem. if (req.http.User-agent ~ /mobile/) .. should do the trick. Without an explicit backend selection, varnish will continue using the default backend. If there is no backend named default, the first backend found in the vcl will be used as the default backend. Backends and virtual hosts in Varnish Varnish fully supports virtual hosts. They might however work in a somewhat counter-intuitive fashion since they are never declared explicitly. You set up the routing of incoming HTTP requests in vcl_recv. If you want this routing to be done on the basis of virtual hosts you just need to inspect req.http.host. You can have something like this: sub vcl_recv { if (req.http.host ~ "foo.com") { set req.backend_hint = foo; } elsif (req.http.host ~ "bar.com") { set req.backend_hint = bar; } }
  • 30.
    Note that thefirst regular expressions will match "foo.com", "www.foo.com", "zoop.foo.com" and any other host ending in "foo.com". In this example this is intentional but you might want it to be a bit more tight, maybe relying on the == operator in stead, like this: sub vcl_recv { if (req.http.host == "foo.com" || req.http.host == "www.foo.com") { set req.backend_hint = foo; } } Directors You can also group several backend into a group of backends. These groups are called directors. This will give you increased performance and resilience. You can define several backends and group them together in a director. This requires you to load a VMOD, a Varnish module, and then to call certain actions in vcl_init.: import directors; # load the directors backend server1 { .host = "192.168.0.10"; } backend server2 { .host = "192.168.0.10"; } sub vcl_init { new bar = directors.round_robin(); bar.add_backend(server1); bar.add_backend(server2); } sub vcl_recv { # send all traffic to the bar director: set req.backend_hint = bar.backend(); } This director is a round-robin director. This means the director will distribute the incoming requests on a round-robin basis. There is also a random director which distributes requests in a, you guessed it, random fashion. If that is not
  • 31.
    enough, you canalso write your own director (see Writing a Director). But what if one of your servers goes down? Can Varnish direct all the requests to the healthy server? Sure it can. This is where the Health Checks come into play. Health checks Lets set up a director with two backends and health checks. First let us define the backends: backend server1 { .host = "server1.example.com"; .probe = { .url = "/"; .timeout = 1s; .interval = 5s; .window = 5; .threshold = 3; } } backend server2 { .host = "server2.example.com"; .probe = { .url = "/"; .timeout = 1s; .interval = 5s; .window = 5; .threshold = 3; } } What is new here is the probe. In this example Varnish will check the health of each backend every 5 seconds, timing out after 1 second. Each poll will send a GET request to /. If 3 out of the last 5 polls succeeded the backend is considered healthy, otherwise it will be marked as sick. Refer to the Probes section in the VCL documentation for more information. Now we define the 'director': import directors; sub vcl_init {
  • 32.
    new vdir =directors.round_robin(); vdir.add_backend(server1); vdir.add_backend(server2); } You use this vdir director as a backend_hint for requests, just like you would with a simple backend. Varnish will not send traffic to hosts that are marked as unhealthy. Varnish can also serve stale content if all the backends are down. See Misbehaving servers for more information on how to enable this. Please note that Varnish will keep health probes running for all loaded VCLs. Varnish will coalesce probes that seem identical - so be careful not to change the probe config if you do a lot of VCL loading. Unloading the VCL will discard the probes. For more information on how to do this please see ref:reference-vcl-director.
  • 33.
    changing one sserver headers is both practical and fun. It s a good idea to remove information that ’ ’ could help an attacker, and it s also enjoyable to put interesting values in there and see who notices. ’ There are tons of ways of doing this, based on the server you use, but here s a way to do it with ’ Varnish. Editing default.vcl In Varnish, your default.vcl file contains the rules that govern your server responses. The vcl_deliver section further defines what goes out to clients. By adjusting this section you can strip the values that were set by your backend web server, and substitute your own: sub vcl_deliver { remove resp.http.Via; remove resp.http.X-Whatever; remove resp.http.X-Powered-By; remove resp.http.X-Varnish; remove resp.http.Age; remove resp.http.Server; set resp.http.Server = "TFE"; set resp.http.X-Powered-By = "Curiosity"; }