اطلاعیه

بستن
هنوز اطلاعیه ای در دست نیست.

5 نکته برای افزایش سرعت وب سرور Apache

بستن
X
 
  • فیلتر کردن
  • زمان
  • نمایش
Clear All
پست های جدید

    5 نکته برای افزایش سرعت وب سرور Apache

    بر اساس گزارش اخیر Netcraft آپاچی همچنان به عنوان وب سرور به طور گسترده در میان سایت ها و رایانه های اینترنتی استفاده میشود. (Netcraft یکی از شرکت های شناخته شده اینترنت است که در میان خدمات دیگر آمار استفاده از مرورگرهای وب را ارائه میدهد)

    علاوه براین، Apache بیشترین رشد در میان وب سرورها را تجربه میکند، که به دنبال آن Nginx و IIS میباشد. بنابراین، اگر شما مدیر سیستم و مسئول نصب آپاچی میباشید، شما باید بدانید که چگونه مطمئن شوید که وب سرور شما به بهترین وجه و با توجه به نیازهای شما (یا مشتری شما) ایجاد میشود.

    در این مقاله ما تعدادی از نکات را ارائه خواهیم کرد که به شما کمک میکند، اطمینان حاصل کنید که Apache به طور هماهنگ عمل میکند و قادر به پردازش درخواست های مورد انتظار از مشتریان راه دور است.
    برای بزرگتر شدن عکس روی آن کلیک کنید

نام:	speed3.jpg
نمایش ها:	1235
اندازه:	50.7 KB
شناسه:	22180





    ترفند 1 : همیشه Apache را به آخرین ورژن آن آپدیت کنید

    نصب آخرین ورژن آپاچی یکی از مهم ترین مواردیست که شما باید بررسی کنید. در تاریخ 19 نوامبر 2015 آخرین ورژن موجود آپاچی در ریپازیتوری های CentOS ورژن 2.4.6 است در حالیکه در Debian آخرین ورژن 2.4.10 میباشد.

    به هر حال ممکن است یک ورژن جدیدتر و یا یک patch رفع باگ به آخرین ورژن استیبل ریلیز شده موجود باشد که از طریق دانلود و نصب از سورس قابل دسترسی میباشند. همچنین دستورالعمل نصب نیز در اینجا برای شما فراهم آمده است. فقط فراموش نکنید که اگر شما این روش را برای آپدیت انتخاب میکنید از فایل های کانفیگ موجود خود/ سایت ها و ویرچوال هاست ها به خاطر احتیاط بک آپ بگیرید.

    روی هر توزیعی همانند زیر میتوانید ورژن موجود نصب شده روی سیستم تان را بررسی کنید.
    کد PHP:
    # httpd -v               [On RedHat/CentOS based systems]
    # apache2 –v             [On Debian/Ubuntu based systems] 
    برای دیدن سایز بزرگ روی عکس کلیک کنیدنام: 1-Check-Apache-Version.jpgمشاهده: 1حجم: 41.3 کیلو بایت




    برای آپدیت کردن با توجه به توزیع انتخابی شما و package manager مربوط به آن توزیع، روش آپدیت را انتخاب کنید. (yum update httpd یا aptitude safe-upgrade apache2 برای CentOS یا Debian). شما میتوانید موارد مربوط به آخرین ورژن ها را در بخش داکیومنت های Apache در وب سایت پروژه Apache HTTP Server مطالعه کنید.



    ترفند 2 : اگر شما از یک کرنل قدیمی تر از 2.4 استفاده میکنید اکنون آنرا Ugrade کنید

    چرا؟ کرنل ورژن 2.4 و بالاتر به صورت پیش فرض sendfile kernel system call را روی خود فعال دارند. که انتقال فایل از بستر شبکه با عملکرد بالا را فراهم میسازد (و به منظور ارتباطات سرور-کلاینتی وب طراحی شنده اند) و آپاچی را قادر به تحویل سریع تر محتوای استاتیک و با مصرف پایین تر CPU به واسطه اجرای عملیات send و read همزمان، میسازد.

    شما میتوانید ورژن کرنل نصب شده موجود را با دستور زیر مشاهده بفرمایید.
    کد PHP:
    # uname -r 
    و آن را با آخرین کرنل Stable در سایت www.kernel.org مقایسه کنید. (در حال حاضر آخرین ورژن 4.13 میباشد.)
    برای دیدن سایز بزرگ روی عکس کلیک کنیدنام: 2-Check-Linux-Kernel-Version.jpgمشاهده: 1حجم: 26.0 کیلو بایت




    اگر چه این روش به مبتدیان پیشنهاد نمیشود اما آپگرید کردن کرنل میتواند یک تمرین جالب برای یادگیری بیشتر درباره هسته لینوکس باشد.



    ترفند 3 : Module Multi-Processing یا MPM را انتخاب کنید که برای شما به بهترین گونه کار میکند.

    عملا MPM ها قابلیت های ماژولار آپاچی را با موارد زیر گسترش میدهند : فراهم آوردن انتخاب نحوه کانفیگ وب سرورتان برای Bind کردن به پورت های شبکه روی ماشین، قبول درخواست ها از کلاینت ها و استفاده از پروسس های زیر شاخه (Child's) و برای کنترل کردن این چنین درخواست هایی.

    در ورژن 2.4 آپاچی سه MPM متفاوت را به شما با توجه به نیازهایتان ارائه میدهد تا از بین آنها یکی را انتخاب کنید.
    • ماژول prefork که از چندین پروسس child بدون thread کردن استفاده میکند. هر پروسس یک ارتباط را در یک لحظه بدون ایجاد thread های مجزا برای هر کدام، کنترل میکند. بدون توضیح جزئییات بیشتر میتوانیم بگوییم که شما ممکن است بخواهید از این ماژول تنها برای دیباگ کردن اپلیکیشنی که دارید استفاده کنید، یا زمانیکه اپلیکیشن شما نیاز دارد با ماژول های non-thread-safe مانند mod_php کار کند.
    • ماژول worker از چندین thread به ازای پروسس های child استفاده میکند که هر thread یک ارتباط را در یک لحظه کنترل میکند این مورد برای سایت های با ترافیک بالا انتخاب خوبی است با توجه به اینکه ارتباط های همزمان بیشتری را با مصرف پایین ram (نسبت به مورد قبلی) کنترل میکند.
    • و در نهایت ماژول event که ماژول پیشفرض در اکثر ورژن های موجود آپاچی (2.4 و بالاتر) میباشد. این ماژول شبیه به ماژول worker است با توجه به اینکه این ماژول هم چندین thread را به ازای پروسس child ایجاد میکند، اما با یک تفاوت : این ماژول باعث میشود ارتباطات KeepAlive یا Idle (زمانیکه در آن وضعیت باقی میمانند) توسط یک thread مجزا کنترل شوند. بنابراین خالی کردن مموری باعث اختصاص دادن آن به thread های دیگر میشود. این ماژول برای استفاده با ماژول های non-thread-safe مانند mod_php مناسب نیست، به این دلیل که جایگزینی همانند php-fpm باید استفاده شود.


    برای بررسی MPM مورد استفاده در آپاچی سرورتان دستور زیر را استفاده کنید.
    کد PHP:
    # httpd -V 
    تصویر زیر نمایش میدهد که وب سرور من از ماژول prefork استفاده میکند.
    برای دیدن سایز بزرگ روی عکس کلیک کنیدنام: 3-Check-Apache-MPM.jpgمشاهده: 1حجم: 61.0 کیلو بایت




    برای تغییر ماژول سرورتان، شما باید یکی از فایل های زیر را بنابر توزیعی که دارید، ویرایش کنید.
    کد PHP:
    # /etc/httpd/conf.modules.d/00-mpm.conf          [On RedHat/CentOS based systems]
    # /etc/apache2/mods-available/<mpm>.load   [On Debian/Ubuntu based systems] 
    برای فعال کردن یا غیرفعال کردن ماژول ها در CentOS شما نیاز دارید، خطی که با LoadModule آغاز میشود را کامنت کنید و خطی که ماژول مورد نظر شما میباشد را همانند زیر از کامنت خارج کنید.
    کد PHP:
    LoadModule mpm_event_module modules/mod_mpm_event.so 
    برای دیدن سایز بزرگ روی عکس کلیک کنیدنام: 3-1-Check-Apache-MPM.pngمشاهده: 1حجم: 42.7 کیلو بایت




    نکته : برای فعال کردن ماژول event در دبیان شما باید پکیج libapache2-mod-fastcgi از ریپازیتوری های غیر رایگان دانلود و نصب کنید.

    علاوه بر این برای CentOS شما نیاز به PHP-FPM (به همراه fcgi و mod_fcgid) خواهید داشت که در دبیان php5-fpm (به همراه apache2-mpm-event) نامیده میشود.


    همچنین توصیه میشود مطالعه کنید.

    آموزش نصب PHP-FPM/PHP - Nginx و دیتابیس MariaDB در CentOS 7


    در پایان وب سرور و سرویس php-fpm (یا php5-fpm) را همانند زیر restart کنید.


    روی RedHat/CentOS
    کد PHP:
    # systemctl restart httpd php-fpm && systemctl enable httpd php-fpm 

    روی Debian/Ubuntu
    کد PHP:
    # systemctl restart apache2 php5-fpm && systemctl enable apache2 php5-fpm 
    اگر چه شما میتوانید آپاچی را برای استفاده از یک ماژول خاصی تنظیم کنید، این تنظیمات میتواند بر اساس هر ویرچوال هاستی (که در آموزش های قبلی به آن اشاره شد) لغو کرد.

    فقط کافیست که تگ های مربوطه را در فایل کانفیگ هر virtual host قرار دهید اما مطمئن شوید که تنها از یک MPM به ازای هر ویرچوال هاستی، استفاده میکنید.

    در نهایت لطفا دقت کنید که با توجه به توزیع لینوکسی شما، php-fpm براساس FastCGI کار میکند که به همین دلیل است که من نصب پکیج های اضافی را قبلتر به شما پیشنهاد کردم.

    برای جزئیات و مثالهای بیشتر روی php-fpm و اینکه چگونه میتواند به همراه ماژول event عملکرد آپاچی را افزایش دهد، به داکیومنت های رسمی آن مراجعه کنید.

    بعد از تغییر MPM پیش فرض از prefork به event چیزی شبیه به تصویر زیر را مشاهده خواهید کرد.
    برای دیدن سایز بزرگ روی عکس کلیک کنیدنام: 4-Choose-Apache-MPM-Module.jpgمشاهده: 1حجم: 87.3 کیلو بایت




    در CentOS 7 شما باید از فعال بودن سرویس های HTTP و HTTPS در فایروال مطمئن شوید و همچنین اینکه اینترفیس های شبکه نیز به درستی به Default Zone در فایروال اضافه شده باشند.

    برای مثال :
    کد PHP:
    # firewall-cmd --zone=internal --add-interface=tun6to4
    # firewall-cmd --zone=internal --add-interface=tun6to4 --permanent
    # firewall-cmd --set-default-zone=internal
    # firewall-cmd --add-service=http
    # firewall-cmd --add-service=https
    # firewall-cmd --add-service=http --permanent
    # firewall-cmd --add-service=https --permanent
    # firewall-cmd --reload 
    دلیل اینکه من مورد بالا را مطرح کردم این است که اخیرا یک مشکلی را با تنظیمات پیش فرض firewalld در یک Cloud VPS با php-fpm و apache و برای پروسس فایل های php تجربه کردم.

    به عنوان یک تست ابتدایی (که شما مطمئنا میتوانید تست های پیچیده تری را داشته باشید) من یک فایل php با نام servercheck.php ایجاد کردم که فایل دیگری به نام test.php را در همان دایرکتوری بررسی میکند، که در دو سرور CentOS 7 با سخت افزارهای یکسان اما با MPM متفاوت استفاده کردم. یکی از آنها از ماژول event و دیگری از ماژول prefork استفاده میکند.
    برای دیدن سایز بزرگ روی عکس کلیک کنیدنام: 5-3-Compare-Apache-Event-and-Prefork-Module.jpgمشاهده: 1حجم: 127.6 کیلو بایت




    در زیر کدی که من در فایل servercheck.php ذخیره کردم را مشاهده میکنید.
    کد PHP:
    <?php
    $filename 
    'test.php';
    if (
    file_exists($filename)) {
    echo 
    "The file $filename exists";
    } else {
    echo 
    "The file $filename does not exist";
    }
    ?>

    سپس ما دستور ab (یکی از ابزارهای تست و محک آپاچی) را با 200 درخواست همزمان (تا تکمیل 2000 درخواست) اجرا خواهیم کرد.
    کد PHP:
    # ab -k -c 100 -n 2000 localhost/servercheck.php 
    اکنون تست را اجرا و نتایج را با هم مقایسه میکنیم. به آمارهای عملکرد هر یک از ماژول ها دقت کنید.
    برای دیدن سایز بزرگ روی عکس کلیک کنیدنام: 6-3-Apache-Performance-Load-Testing.jpgمشاهده: 1حجم: 139.6 کیلو بایت




    همانطور که مشاهده میکنید عملکرد سروری که ماژول event روی آن است در سطح بسیار بالای نسبت به سرور دیگر که prefork روی آن است در هر جنبه ای از این تست بالاتر است.



    ترفند 4 : اختصاص دادن هوشمندانه RAM برای Apache

    بیشترین آیتم حیاتی سخت افزار که باید در نظر گرفته شود میزان مموری ایست که برای هر پروسس آپاچی باید اختصاص داده شود. اگر چه شما نمیتوانید این مورد را به صورت مستقیم کنترل کنید اما میتوانید تعداد Process های child را از طریق بخش MaxRequestWorkers (قبلا در apache 2.2 به عنوان MaxClients شناخته میشد) محدود کنید، که روی میزان مصرف RAM توسط Apache محدودیت قرار خواهد داد. مجددا شما میتوانید این مقدار را روی هر هاست/ویرچوال هاست مجزا تعریف کنید.

    برای انجام آن شما باید به میانگین میزان مموری مورد استفاده توسط آپاچی دقت کنید سپس آنرا با عدد MaxRequestWorkers ضرب کنید که عدد به دست آمده میزان مموری هست که به پروسس های آپاچی اختصاص داده خواهد شد. موردی که هرگز شما نمیخواهید وب سرورتان انجام دهد استفاده از swap است که به صورت چشم گیری کارایی آنرا کاهش میدهد، بنابراین شما همیشه باید میزان استفاده آپاچی از مموری که میتوانید فراهم آورید را محدود کنید و هرگز به swap تکیه نکنید.

    برای مثال بلاک زیر تعداد کلاینت های همزمان را به 30 عدد محدود خواهد کرد اگر کلاینت های بیشتری از هاست استفاده کنند آنها تاخیر و یا وقفه موقتی را تجربه خواهند کرد که میتوان به سادگی با رفرش کردن مرورگر آنرا رفع کرد. اگر چه ممکن است این مورد دلخواهی نباشد اما برای سرور سالم تر و مطمئن تر است و برای اجرای بلند مدت برای سایت شما بهترین است.

    شما میتوانید این بلاک را درون فایل /etc/httpd/conf/httpd.conf یا /etc/apache2/apache2.conf با توجه به اینکه از CentOS یا Debian استفاده میکنید قرار دهید.

    لطفا توجه کنید که قانون یکسانی به تمام MPM ها اعمال میشود، من در اینجا به منظور ادامه مفهوم مشخص شده در ترفند قبلی از ماژول event استفاده میکنم.
    کد PHP:
    <IfModule mpm_event_module>
    StartServers 3
    MinSpareThreads          25
    MaxSpareThreads          75
    ThreadLimit                      64
    ThreadsPerChild          25
    MaxRequestWorkers    30
    MaxConnectionsPerChild    1000
    </IfModule
    در هر شرایطی شدیدا توصیه میشود که برای مشاهده قسمت های تنظیمات (directives) که برای MPM انتخابی شما مجاز است به داکیومنت های Apache 2.4 مراجعه کنید.



    ترفند 5 : اطلاع از Application هایتان

    به عنوان یک قانون شما نباید هر گونه ماژول آپاچی را که مورد نیاز نیست را load کنید. شما باید دانش کاملی روی اپلیکیشن هایی که روی سرورتان در حال اجرا هستند داشته باشید. خصوصا اگر شما ادمین سیستم هستید و تیم دیگری به منظور امور برنامه نویسی در کنار شما کار میکند.

    شما میتوانید ماژول های لود شده موجود را با استفاده از دستورات زیر لیست کنید.
    کد PHP:
    # httpd -M          [On RedHat/CentOS based systems]
    # apache2ctl -M     [On Debian/Ubuntu based systems] 
    برای unload/disable کردن ماژول ها در CentOS شما نیاز دارید، خطی که با LoadModule آغاز میشود را کامنت کنید. (همچنین در فایل کانفیگ اصلی و یا فایل های کانفیگ جانبی مثلا درون /etc/httpd/conf.modules.d کامنت کنید.)

    از طرف دیگر Debian ابزاری به نام a2dismod برای disable کردن ماژول ها فراهم آورده، که به صورت زیر استفاده میشود.
    کد PHP:
    # a2dismod module_name 
    برای اینکه آنرا مجدد فعال کنید :
    کد PHP:
    # a2enmod module_name 
    همچنین برای اعمال تغییرات فراموش نکنید که آپاچی را restart کنید.


    توصیه میشود مطالعه کنید.

    آموزش نصب Apache, PHP/PhpMyAdmin, MySQL/MariaDB در CentOS 7


    خلاصه :

    در این مقاله ما 5 ترفند را که به شما کمک میکند تا وب سرور Apache را تنظیم و عملکرد آنرا افزایش دهید، آموزش دادیم. بعلاوه شما باید به خاطر داشته باشید که بهینه سازی و بالابردن کارایی بدون تمهیدات امنیتی بی فایده است در نتیجه پیشنهاد میشود 2 پست زیر را در جهت افزایش امنیت مطالعه فرمایید.

    نصب Mod_Pagespeed برای بالا بردن سرعت عملکرد Apache و Nginx تا 10 برابر

    مقاله آموزشی 13 ترفند برای برقراری امنیت در Apache

    از آنجایی که ما نمیتوانیم تمام جنبه های این موضوع را در این پست پوشش دهیم ممکن است شما بتوانید ایده های دیگری را روی این عنوان با ما به اشتراک بگذارید.
    آخرین ویرایش توسط Habili; در تاریخ/ساعت 01-20-2021, 06:38 PM.

درباره انجمن منطقه لینوکسی ها

انجمن منطقه لینوکسی ها با هدف ارتقاء سطح علمی کاربران در سطح جهانی و همچنین کمک به بالا بردن سطح علمی عمومی در زمینه های تخصصی فوق پایه گذاری شده است. انجمن منطقه لینوکسی ها از طریق کارشناسان و متخصصان پاسخگوی سوالات گوناگون کاربران مبتدی یا پیشرفته میباشد تا حد امکان تلاش شده که محیطی متنوع و کاربر پسند و به دور از هرگونه حاشیه جهت فعالیت کاربران در این انجمن ایجاد شود. لذا ما به صورت مستمر برای پیشرفت کمی و کیفی محتوی و اطلاعات انجمنمان میکوشیم که این برای ما ارزشمند و حائز اهمیت است. کلیه حقوق،اطلاعات و مقالات در این انجمن متعلق به سایت منطقه لینوکسی ها میباشد، و هرگونه نسخه برداری بدون ذکر منبع مورد پیگرد قانونی خواهد شد.

شبکه های اجتماعی
در حال انجام ...
X