افزایش سرعت وب سرور آپاچی در سرور لینوکس برای بهبود عملکرد
اپاچی به طور مداوم در میان وب سرور های دیگر، رشد بزرگتری را تجربه کرده است که که توسط Nginx و IIS دنبال میشود. بنابراین، اگر شما یک مدیر سیستم هستید که مسئولیت مدیریت نصبهای اپاچی را برعهده دارید، باید بدانید که چگونه سرور وب شما با بهرهوری بیشتری کار کند و تعداد درخواستهایی که انتظار دارید از مشتریان دوردست خود دریافت کنید، را تحمل کند.
روشها و تکنیکهایی وجود دارد که میتوانند در بهبود سرعت و عملکرد وب سرور آپاچی در سرور لینوکس موثر باشند. این تکنیکها شامل تنظیمات پیشرفته آپاچی، بهینهسازی تنظیمات سیستم عامل لینوکس، استفاده از ماژولهای کاربردی، کشسازی، فشردهسازی، بهینهسازی تصاویر و بهرهبرداری از CDN میباشند. با استفاده از این راهکارها، سرعت و عملکرد سرور آپاچی بهبود یافته و تجربه کاربران در دسترسی به وب سایتها بهبود می یابد.
در این مقاله، تعدادی نکته را بررسی خواهیم کرد که به شما کمک میکند تا اطمینان حاصل کنید که اپاچی به طور صحیح و بدون مشکل اجرا شده و توانایی مدیریت تعداد درخواستهایی که از مشتریان دوردست انتظار دارید را داشته باشد. اما این کار چه مزیت هایی برایمان در پی خواهد داشت؟
تجربه کاربری را بهبود می دهد؛ با افزایش سرعت وب سرور آپاچی، کاربران وبسایت به صورت سریعتر به محتوای مورد نظر خود دسترسی پیدا میکنند و تجربه کاربری بهتری را تجربه میکنند.
رتبهبندی سایت در موتورهای جستجو را بهبود می دهد؛ موتورهای جستجو معیارهای مختلفی برای رتبهبندی سایتها دارند، یکی از این معیارها سرعت بارگذاری صفحات وب است. با بهبود سرعت وب سرور آپاچی، سایت شما برای موتورهای جستجو جذابتر میشود و به رتبهبندی بهتری دست مییابد.
در هزینهها صرفهجویی می شود؛ با بهبود سرعت وب سرور آپاچی، حجم ترافیک وبسایت کاهش مییابد و مصرف منابع سرور کاهش پیدا میکند. این موضوع میتواند به صرفهجویی در هزینههای پرداختی برای میزبانی سایت منجر شود.
نرخ بازگشت کاربران کاهش می یابد؛ با افزایش سرعت بارگذاری صفحات وب، کاربران احتمال بیشتری دارند که در وبسایت باقی بمانند و به صفحات دیگر نیز مراجعه کنند. این موضوع میتواند به کاهش نرخ بازگشت (Bounce Rate) سایت منجر شود.
از ترافیک بالا پشتیبانی می کند؛ با بهبود سرعت وب سرور آپاچی، سرور بهترین عملکرد خود را در هنگام ترافیک بالا از خود نشان میدهد و قادر است به درخواستهای کاربران در هر زمان پاسخ دهد.
در صورتی که تمایل به استفاده از وب سرور آپاچی دارید، می توانید خرید سرور مجازی لینوکس را از آسام سرور انجام دهید و این وب سرور را راه اندازی کنید. اگر هم از این وب سرور استفاده می کنید و به دنبال افزایش سرعت این وب سرور هستید، این مقاله را از دست ندهید؛ چرا که ما در این مقاله به شما آموزش می دهیم که چگونه سرعت وب سرور آپاچی خودتان را افزایش دهید و بتوانید با سرعت بالاتری از وب سرور خودتان استفاده کنید. همراه ما باشید.
آخرین نسخه آپاچی را نصب کنید
بدون شک، یکی از اولین چیزهایی که باید در نظر داشته باشید، داشتن آخرین نسخه Apache نصب شده است. ممکن است یک بهبود یا رفع باگی به نسخه پایدار جدید اضافه شده باشد که به صورت یک فایل دانلود و نصب ارائه میشود. در اینجا دستورالعملهای کامپایل و نصب نیز ارائه شدهاند – اما به یاد داشته باشید که اگر از این روش به روزرسانی استفاده کنید، بهتر است بخشهای پیکربندی فعلی، سایتها و میزبانهای مجازی خود را برای احتیاط، پشتیبانی کنید. به هر حال، شما میتوانید نسخه نصب شده فعلی خود را به شرح زیر بررسی کنید:
# httpd -v [On RedHat/CentOS based systems]
# apache2 –v [On Debian/Ubuntu based systems]
توصیه ما این است که همیشه سعی کنید از روش به روزرسانی ارائه شده توسط مدیر پکیج (به عنوان مثال yum update httpd یا aptitude safe-upgrade apache2 برای CentOS یا Debian به ترتیب) استفاده کنید، مگر اینکه راه دیگری وجود نداشته باشد.
کرنل های قدیمی تر از 2.4 را ارتقا دهید
در نسخه های کرنل 2.4 به بالا، تماس سیستمی sendfile به صورت پیش فرض فعال شده است. این ویژگی، انتقال پرونده های شبکه با عملکرد بالا را فراهم می کند (که در زمینه ارتباطات سرور-مشتری وب مد نظر است) و با انجام عملیات همزمان خواندن و ارسال محتواهای استاتیک امکان دسترسی سریع تر و با استفاده کمتر از CPU برای Apache را فراهم می کند
میتوانید نسخه کرنلی که در حال حاضر بر روی سیستمتان نصب است را با استفاده از دستور زیر مشاهده کنید:
# uname -r
اگرچه این فرآیندی است که برای مبتدیان در نظر گرفته نشده است، اما ارتقای هسته یک تمرین جالب برای کسب اطلاعات بیشتر در مورد داخلی لینوکس است.
انتخاب ماژول چند پردازشی (MPM) برای عملکرد بهتر پرونده شما
در عمل، MPM ها (ماژولهای چند پردازشی) قابلیتهای ماژولار آپاچی را گسترش میدهند و به شما امکان میدهند تنظیم کنید که وب سرور چگونه به پورتهای شبکه در ماشین متصل شود، درخواستها را از مشتریها پذیرفته و از فرآیندها و یا نخها برای پردازش این درخواستها استفاده کند.
از نسخه 2.4 به بعد، Apache سه نوع MPM متفاوت را ارائه میدهد که بسته به نیازهای شما میتوانید از آنها استفاده کنید:
MPM prefork از چندین children processes بدون رشته بندی استفاده میکند. هر فرآیند در یک زمان بدون ایجاد رشته های جداگانه برای هر کدام، یک اتصال را پردازش میکند. بدون ورود به جزئیات بیشتر، میتوانیم بگوییم که شما تنها زمانی از این MPM استفاده کنید که در حال اشکالزدایی یک برنامه باشید که از ماژولهایی که thread-safe نیستند مانند mod_php استفاده میکند یا برنامهی شما نیاز به کار با ماژولهایی که thread-safe نیستند، دارد.
(فرآیند کودک (Child Process) در سیستمهای عامل، یک فرآیند جدید است که توسط یک فرآیند پدر (Parent Process) ایجاد میشود. وقتی یک فرآیند پدر یک فرآیند کودک را ایجاد میکند، فرآیند پدر به عنوان پردازش اصلی در نظر گرفته میشود و فرآیند کودک به عنوان یک فرآیند فرعی که توسط فرآیند پدر ایجاد شده است، شناخته میشود.
فرآیند کودک میتواند برای اجرای وظایف خاصی مانند اجرای یک برنامه، اجرای یک فرآیند دیگر، ایجاد پردازههای موازی، و یا انجام عملیاتهای مستقل از فرآیند پدر استفاده شود. همچنین، یک فرآیند کودک میتواند پارامترها و ورودیها را از فرآیند پدر دریافت کرده و خروجیها و نتایج کار خود را به فرآیند پدر بازگرداند. ارتباط و تعامل بین فرآیند پدر و فرآیند کودک میتواند به کمک مکانیسمهای مختلفی مانند لولهها (pipes)، صفها (queues)، حلقههای اشتراکی (shared loops) و سوکتها (sockets) صورت گیرد.)
سیستم Worker MPM از چندین رشته در هر child processes استفاده میکند، که هر رشته در یک ارتباط به طور همزمان کار میکند. این گزینه برای سرورهایی که ترافیک بالا دارند، مناسب است؛ زیرا این اجازه را میدهد تا ارتباطات همزمان بیشتری با کمترین مصرف حافظه RAM در مقایسه با حالت قبلی، پردازش شود
سرانجام، MPM رویداد به عنوان MPM پیشفرض در بیشتر نصبهای Apache در نسخههای 2.4 و بالاتر استفاده میشود. این MPM مشابه Worker MPM است؛ در این صورت که نیز چندین رشته در هر child processes ایجاد میکند، اما با یک مزیت: این باعث میشود تا ارتباطات در حالت KeepAlive یا idle (در حالی که در این حالت باقی میمانند) توسط یک رشته تنها کاربردی پردازش شوند، در نتیجه حافظه آزاد شده برای تخصیص به رشتههای دیگر به کار می رود. این MPM مناسب استفاده با ماژولهای غیر قابل نیتیو ترید مانند mod_php نیست و باید جایگزینی مانند PHP-FPM به جای آن استفاده شود.
برای بررسی MPM مورد استفاده توسط نصب آپاچی، می توانید انجام دهید:
# httpd -V
تصویر زیر نشان می دهد که این وب سرور خاص از Prefork MPM استفاده می کند.
برای تغییر این مورد، باید ویرایش کنید:
# /etc/httpd/conf.modules.d/00-mpm.conf [On RedHat/CentOS based systems]
# /etc/apache2/mods-available/<mpm>.load [On Debian/Ubuntu based systems]
شما باید در فایل پیکربندی Apache که به نام “<mpm>_event”، “<mpm>_worker” یا “<mpm>_prefork” است، خطی را که مربوط به بارگذاری ماژول مورد نظر است، از حالت توضیعی خارج کرده و آن را فعال کنید. به این شکل:
LoadModule mpm_event_module modules/mod_mpm_event.so
توجه: برای استفاده از MPM رویداد در Debian، ممکن است بخواهید بسته libapache2-mod-fastcgi را از مخازن غیر-رایگان (non-free) نصب کنید.
علاوه بر این، برای CentOS شما باید php-fpm (همراه با fcgi و mod_fcgid) را نصب کنید، در حالی که در Debian آن را php5-fpm (همراه با apache2-mpm-event) نامیده میشود. در نهایت، به عنوان نکته آخر ولی نکته مهم باید بگوییم که وب سرور و سرویس php-fpm (یا php5-fpm) نصب شده را دوباره راهاندازی کنید.
بر روی RedHat/CentOS
# systemctl restart httpd php-fpm && systemctl enable httpd php-fpm
بر روی Debian/Ubuntu
# systemctl restart apache2 php5-fpm && systemctl enable apache2 php5-fpm
اگرچه میتوانید Apache را به یک MPM خاص تنظیم کنید، اما این پیکربندی میتواند براساس هر سرور مجازی به طور جداگانه تنظیم شود، همانطور که قبلاً اشاره شده بود.
فقط کافی است تگهای متناسب را به فایل پیکربندی هر هاست مجازی اضافه کنید و آماده استفاده باشید – اما مطمئن شوید که فقط یک MPM در هر وبسرور مجازی استفاده میشود.
در نهایت، لطفاً توجه داشته باشید که بدون توجه به توزیع انتخابی شما، php-fpm برای پیادهسازی FastCGI وابسته است، که به همین دلیل است که قبلاً نصب بستههای اضافی را توصیه کردهایم.
در CentOS 7، باید مطمئن شوید که سرویسهای http و https از طریق فایروال فعال هستند و اینترفیس (های) شبکه به درستی به منطقه پیشفرض اضافه شدهاند.
برای مثال:
# 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) در یک سرویس ابری VPS، از پردازش فایلهای php توسط php-fpm و Apache جلوگیری کند.
برای یک آزمون ساده (البته شما میتوانید تستهای پیچیدهتر یا استرسزا را هم تصور کنید)، ما یک فایل php ایجاد خواهیم کرد که وجود یک فایل دیگر به نام test.php را در همان دایرکتوری بررسی کند، و این تست را بر روی دو سرور CentOS 7 با ویژگیهای سختافزاری و بارگذاری یکسان ولی با انتخاب MPM های متفاوت، یکی با استفاده از روش event و دیگری با استفاده از روش prefork اجرا خواهیم کرد.
این کد php است که ما در فایلی به نام checkiffileexists.php ذخیره کرده ایم:
<?php
$filename = 'test.php';
if (file_exists($filename)) {
echo "The file $filename exists";
} else {
echo "The file $filename does not exist";
}
?>
سپس ابزار بنچمارک Apache (ab) را با 200 درخواست همزمان اجرا می کنیم تا زمانی که 2000 درخواست تکمیل شود:
# ab -k -c 100 -n 2000 localhost/checkiffileexists.php
بیایید آزمایش را اجرا کنیم و نتایج را با هم مقایسه کنیم. به آمار عملکرد توجه کنید:
همانطور که می بینید، عملکرد سرور با رویداد در هر جنبه ای از این تست بسیار برتر از همتای prefork خود است.
رم را به صورت بهینه به آپاچی اختصاص دهید
شاید مهمترین قطعه سختافزاری که باید در نظر گرفته شود، مقدار حافظه RAM اختصاص یافته به هر فرایند Apache است. اگرچه نمیتوانید به طور مستقیم بر این مقدار کنترل داشته باشید، اما میتوانید تعداد child processes را از طریق دستورالعمل MaxRequestWorkers (قبلاً با نام MaxClients در Apache 2.2 شناخته میشد) محدود کنید، که مصرف RAM توسط Apache را محدود خواهد کرد. همچنین، میتوانید این مقدار را بر اساس هر سرور یا سرور مجازی تنظیم کنید.
برای انجام این کار، باید میانگین مقدار RAM مصرف شده توسط Apache را یادداشت کرده و سپس آن را با تعداد MaxRequestWorkers ضرب کنید و این مقدار حافظه به فرآیندهای Apache اختصاص داده خواهد شد. یک چیزی که هیچوقت نمیخواهید سرور وب خود به آن بپردازد، استفاده از swap است، زیرا این کار عملکرد آن را به شدت کاهش خواهد داد. بنابراین، همیشه باید مصرف RAM توسط Apache را در یک محدوده نگه دارید و به هیچوجه به swap اعتماد نکنید.
به عنوان مثال، بلاک زیر تعداد کاربران همزمان را محدود به 30 نفر میکند. اگر بیش از این تعداد از سرور استفاده کنند، آنها ممکن است با تاخیر یا شکست موقتی مواجه شوند که با تازهسازی مرورگر به راحتی قابل حل است. اگرچه این ممکن است چندان مطلوب به نظر نرسد، اما برای سلامتی سرور و در نهایت بهترین عملکرد برای وبسایت شماست.
بسته به اینکه از CentOS یا Debian استفاده میکنید. شما میتوانید این بلاک را در داخل فایل /etc/httpd/conf/httpd.conf یا /etc/apache2/apache2.conf قرار دهید.
لطفا توجه داشته باشید که همین اصل برای همهی MPMها صدق میکند. در اینجا از MPM event استفاده شده است تا به مفهومی که در نکته قبلی توضیح داده شد، ادامه دهد.
<IfModule mpm_event_module>
StartServers 3
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxRequestWorkers 30
MaxConnectionsPerChild 1000
</IfModule>
در هر صورت، به شدت توصیه می شود که به اسناد Apache 2.4 مراجعه کنید تا ببینید کدام دستورالعمل ها برای MPM انتخابی شما مجاز هستند.
برنامه های کاربردی خود را بشناسید
به طور کلی، باید قاعده ای داشته باشید که هیچ ماژولی در Apache بارگذاری نکنید که به طور مشخص برای عملکرد برنامه شما لازم نیست. برای انجام این کار، نیاز به داشتن دانش کلی درباره برنامه های در حال اجرا در سرور شما است، به ویژه اگر شما یک مدیر سیستم هستید و تیم دیگری برای توسعه برنامه ها پاسخگو است. می توانید ماژول های در حال حاضر بارگذاری شده را با استفاده از دستور زیر لیست کنید:
# httpd -M [On RedHat/CentOS based systems]
# apache2ctl -M [On Debian/Ubuntu based systems]
برای از بین بردن / غیرفعال کردن ماژولها در CentOS، شما باید خطی را که با LoadModule شروع میشود (در فایل پیکربندی اصلی یا یک فایل کمکی درون /etc/httpd/conf.modules.d) را کامنت کنید.
از طرف دیگر، در Debian یک ابزار به نام a2dismod وجود دارد که برای غیرفعال کردن ماژولها استفاده میشود و به صورت زیر عمل میکند:
# a2dismod module_name
برای فعال کردن دوباره آن:
# a2enmod module_name
در هر صورت، به یاد داشته باشید که Apache را مجدداً راه اندازی کنید تا تغییرات اعمال شوند.
سخت افزار و سیستم عامل را بهینه کنید
در اینجا بهینه کردن سخت افزارها و مواردی که به شما در افزایش سرعت وب سرور آپاچی کمک می کند، آموزش می دهیم.
RAM
RAM به معنای حافظه یا حافظه ویژه یا حافظه عمومی است. برای بهبود عملکرد سرور وب Apache، (به خصوص در هنگام caching) مطمئن شوید که فضای کافی RAM در اختیار دارید. اگر RAM پر شود، درخواستها به فضای Swap هدایت میشوند که باعث افزایش تأخیر میشود. این به معنی این است که کاربران باید درخواست خود را مجدداً بارگذاری کنند، بنابراین بارگیری سرور همچنان افزایش مییابد. برای حل این مشکل، یعنی محدود کردن تعداد child processکه توسط سرور وب Apache ایجاد میشوند و در صورت بیش از حد شدن به فضای Swap هدایت میشوند، باید MaxRequestWorkers را تنظیم کنید. برای به دست آوردن بهترین مقدار برای این تنظیم، مراحل زیر را انجام دهید:
- از دستور top استفاده کنید تا اندازه متوسط RAM استفاده شده توسط پردازش Apache را بررسی کنید.
- اندازه کلی RAM در دسترس را بر توسط متوسط RAM استفاده شده توسط Apache تقسیم کنید تا تعداد MaxRequestWorkers را به دست آورید. برای افزایش عملکرد Apache، مطمئن شوید که دارای CPU سریعتر، کارت شبکه سریعتر و دیسک سریعتری هستید.
اندازه Buffer را بنویسید
اندازه بافر نوشتن را با افزایش مقدار در دو فایل افزایش دهید:
/proc/sys/net/core/wmem_max
/proc/sys/net/core/wmem_default
حداکثر تعداد فایلهای باز
اگر سرور وب آپاچی فایل های زیادی را پردازش می کند، توصیه میشود که حداکثر تعداد فایلهای باز مجاز را افزایش داده و مقدار آن را در فایل زیر افزایش دهید:
/proc/sys/fs/file-max
سپس دستور را اجرا کنید:
$ ulimit -H -n 4096
تنظیمات زمان اجرایی را تغییر دهید
غیرفعال کردن htaccess. با استفاده از AllowOverride
فعال کردن AllowOverride باعث می شود که آپاچی هر زمان که یک درخواست ارسال می شود، سعی در باز کردن htaccess. کند. این واقعاً عملکرد سرور وب آپاچی را کاهش می دهد. برای رفع این مشکل، از گزینه AllowOverride None استفاده کنید که در زیر نشان داده شده است.
DocumentRoot "/www/var/html"
<Directory "/">
AllowOverride None
</Directory>
غیرفعال کردن جستجوهای DNS با استفاده از HostnameLookups
وقتی گزینه HostnameLookups فعال شود، به این معنی است که تشخیص نام ها در DNS برای هر درخواست باعث افزایش تاخیر در تکمیل آن درخواست میشود. برای حل این مشکل دو راه حل وجود دارد:
- برای فایلهای لاگ با نامهای حلشده، پس از تمام شدن عملیات اجرا روی سرور تولید، پردازش پس از تولید را روی یک سیستم دیگر انجام دهید تا عملکرد سرور تولید را کند نکند.
- اگر به طور ضروری نیازی به تشخیص نام ندارید، از آدرس های IP استفاده کنید و کلا DNS lookup را غیرفعال کنید با استفاده از گزینه زیر:
HostnameLookups off
بهینهسازی تنظیمات زمان کامپایل
بهینه سازی تنظیمات کامپایل خود بر چندین بخش است که در ادامه هرکدام را بیان می کنیم:
الف) ماژولهای چندپروسهای (MPMs) MPMs
ماژولهای چندپروسهای به اپاچی کمک میکنند تا بتواند به پورتهای شبکه متصل شود، children processes و رشته ها را به طور متناوب برای پذیرش و پردازش درخواستها استفاده کند. سه نوع مختلف از MPM وجود دارد و هر کدام برای نیازهای مختلف مناسب است.
worker: از چندین پردازنده کودک، هر کدام با چندین رشته، استفاده میکند، در حالی که هر رشته به تنهایی یک اتصال را پردازش میکند. این نوع MPM برای سرورهای با ترافیک بالا مناسب است به دلیل اینکه از حافظه کمتری نسبت به prefork استفاده میکند.
event: مشابه MPM worker در مورد رشتهبندی است، اما اجازه میدهد تا همزمان درخواستهای بیشتری را از طریق انتقال بخشی از پردازش به رشتههای پشتیبانی کند. این کار باعث آزادسازی حافظهای میشود که به رشتههای دیگر اختصاص داده شده است. اما برای استفاده با ماژولهای غیر ایمن از نظر رشتهای مانند mod_php مناسب نیست.
prefork: از چندین child processes استفاده میکند، هر کدام دارای یک رشته هستند. هر فرآیند به تنهایی یک اتصال را به انجام میرساند. این روش سریعتر از worker است، اما بیشتر از حافظه استفاده میکند. این مورد برای اشکالزدایی برنامههایی که از ماژولهای غیر ایمن رشته استفاده میکنند مانند mod_php مناسب است.
برای بررسی نسخه MPM خود، دستور زیر را اجرا کنید:
$ sudo httpd -V
خروجی
1.[linuxuser@centos7-apache ~]$ sudo httpd -V
2.[sudo] password for linuxuser:
3.Server version: Apache/2.4.6 (CentOS)
4.Server built: Apr 20 2018 18:10:38
5.Server's Module Magic Number: 20120211:24
6.Server loaded: APR 1.4.8, APR-UTIL 1.5.2
7.Compiled using: APR 1.4.8, APR-UTIL 1.5.2
8.Architecture: 64-bit
9.Server MPM: prefork
10.threaded: no
11.forked: yes (variable process count)
12.Server compiled with....
13.-D APR_HAS_SENDFILE
14.-D APR_HAS_MMAP
15.-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
16.-D APR_USE_SYSVSEM_SERIALIZE
17.-D APR_USE_PTHREAD_SERIALIZE
18.-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
19.-D APR_HAS_OTHER_CHILD
20.-D AP_HAVE_RELIABLE_PIPED_LOGS
21.-D DYNAMIC_MODULE_LIMIT=256
22.-D HTTPD_ROOT="/etc/httpd"
23.-D SUEXEC_BIN="/usr/sbin/suexec"
24.-D DEFAULT_PIDLOG="/run/httpd/httpd.pid"
25.-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
26.-D DEFAULT_ERRORLOG="logs/error_log"
27.-D AP_TYPES_CONFIG_FILE="conf/mime.types"
28.-D SERVER_CONFIG_FILE="conf/httpd.conf"
MPM کنونی prefork است، اگر میخواهید آن را تغییر دهید، به صورت زیر ویرایش کنید:
برای Centos 7
$ sudo vim /etc/httpd/conf.modules.d/<em>00</em>-mpm.conf
برای Ubuntu 16.04
$ sudo vim /etc/apache2/mods-available/<mpm>.load
جایی که <mpm> mpm_prefork، mpm_event یا mpm_worker است.
حذف ماژولهای غیرضروری
بعضی از ماژولهایی که ممکن است در سرور وب خود نیاز نداشته باشید، عبارتند از: mod_mime، mod_dir، mod_php، mod_perl، mod_ruby و غیره. این کار به شما کمک میکند تا حافظه RAM استفاده شده توسط سرور وب را صرفهجویی کنید.
در CentOS 7، برای غیرفعال کردن یا بارگیری نشدن یک ماژول، خطی که با LoadModule در فایل پیکربندی اصلی یا فایلهای داخل /etc/httpd/conf.modules.d/ آغاز میشود را کامنت کنید.
در Ubuntu 16.04، برای غیرفعال کردن یا بارگیری نشدن یک ماژول، دستور زیر را اجرا کنید:
$ sudo a2dismod module_name
برای فعال کردن یک ماژول
$ sudo a2enmod module_name
در نهایت سرویس apache را مجددا راه اندازی کنید.
فشردهسازی و حافظهپنهانی در پروتکل HTTP
فشردهسازی در پروتکل HTTP، یک تکنیک است که برای افزایش سرعت و بهینهسازی پهنای باند وب سرورهای Apache استفاده میشود. سرور gzip یا deflate قبل از ارسال آن به مشتری روش رمزگذاری را بر روی پاسخ اعمال میکند.
بعد از آن، مشتری این بار را باز فشرده میکند. بسته تنها در صورتی که مرورگر فشردهسازی را درخواست کند، فشرده شده است، در غیر این صورت محتوای فشرده نشده ارائه میشود. برای فعال کردن فشردهسازی در Apache، از ماژول ‘mod_deflate’ استفاده میشود.
در حافظهپنهانی، یک نسخه از داده در مشتری یا سرور پروکسی ذخیره میشود، تا نیازی به بازیابی آن از سرور نباشد. ذخیره فایلهایی که به طور مکرر دسترسی میشوند، به ما کمک میکند تا پهنای باند را ذخیره کنیم، بار سرور را کاهش دهیم و پردازش Apache را افزایش دهیم.
ماژولهای mod_expires و mod_headers برای کنترل حافظهپنهانی از طریق هدرهای HTTP ارسالی از سرور پیکربندی میشوند. با کمک دستورالعملهای کنترل حافظهپنهانی، ما قوانین حافظهپنهانی را برای افزایش سرعت Apache کنترل میکنیم.
یک ویژگی دیگر که ما از آن استفاده میکنیم، استفاده از حافظه نهان سمت سرور است که محتواهایی که به طور مکرر دسترسی میشوند، در حافظه ذخیره میشوند تا بتوانند به سرعت ارائه شوند. ما ماژول mod_cache را پیکربندی میکنیم تا حافظه نهان سمت سرور را فعال کنیم.
همچنین نرمافزارهای حافظه نهان دیگری مانند memcached و Varnish نیز وجود دارند که در کنار این ماژولها در وب سرور Apache پیکربندی میشوند تا سرعت سرور را بهبود ببخشند.
سرور جداگانه برای محتوای استاتیک و پویا
یکی از روشهای بهینهسازی عملکرد سرور وب آپاچی، جدا کردن سرورها برای ارائه محتوای استاتیک و پویا است. سرورهای آپاچی که محتوای پویا را پردازش میکنند، نیاز به حدود 3-20 مگابایت حافظه رم دارند، در حالی که سروری که محتوای استاتیک را ارائه میدهد، تنها 1 مگابایت حافظه رم نیاز دارد. سروری که محتوای پویا را پردازش میکند، میتواند همچنان محتوای استاتیک را نیز ارائه دهد.
این باعث اتلاف حافظه میشود که باعث کاهش سرعت سرورهای با ترافیک بالا میشود. برای استفاده بهینه از حافظه، ما از دو سرور جداگانه برای ارائه محتوای استاتیک و پویا استفاده میکنیم.
به عنوان مثال، ما از یک سرور وب آپاچی سبک به عنوان سرور اصلی برای ارائه محتوای استاتیک استفاده میکنیم. درخواستها برای محتوای پویا به سرور وب آپاچی سفارشی ارسال میشوند که با تمامی ماژولهای مورد نیاز کامپایل شده است.
این انتقال درخواستها با استفاده از ماژولهایی مانند mod_proxy و mod_rewrite انجام میشود. مشتری تفاوتی نخواهد دید، اما احساس میکند که درخواستها توسط یک سرور وب تکی پردازش میشوند.
با استفاده از دو سرور وب، ما می توانیم سرعت آپاچی را با پردازش محتوای استاتیک سریع تر و با کمترین استفاده از حافظه رم افزایش دهیم.
تغییر تنظیمات MySQL و PHP
سرورهای وب به ندرت به تنهایی کار میکنند. در بیشتر موارد، یک سرور پایگاه داده مانند MySQL و پشتیبانی از زبان اسکریپتی مانند PHP برای همراهی با سرور وب Apache وجود دارد.
ما متوجه شدیم که بهینه سازی سرور پایگاه داده همانند بهینه سازی سرور وب برای جلوگیری از ایجاد مشکل در آن و کاهش سرعت سرور وب بسیار مهم است. همچنین، با استفاده از شتاب دهنده یا مکانیزم حافظه نهانی مانند Zend OPcache، عملکرد صفحات PHP را بهبود میبخشیم.
MySQL با استفاده از گزینههایی مانند شکستگی جدول و تنظیمات پیکربندی – حداکثر اتصال، اندازه بافر، اندازه حافظه نهان پرسوجو، اندازه استخر و غیره بهبود داده میشود.
https://www.giftofspeed.com/apache-server/
از کش آپاچی استفاده کنید
توسعهدهندگان وب برای بهبود عملکرد سرورشان از کشسازی فایلها و محتواهایی که به طور مکرر دسترسی میشوند استفاده میکنند. یکی از بهترین نرمافزارهای کشسازی برای سرورهای آپاچی، Varnish Cache است که کاملا رایگان است. نصب این برنامه در جلوی سرور آپاچی میتواند سرعت ارسال فایلها و محتواها را به صورت شگفتانگیزی حداکثر ۱۰۰۰ برابر افزایش دهد. (با توجه به ادعای خودشان)
سخن آخر
در این مقاله، به بررسی روشهای افزایش سرعت وب سرور آپاچی در سرور لینوکس پرداختیم. با اعمال تغییراتی در تنظیمات آپاچی و استفاده از ابزارهای بهینه سازی، میتوان عملکرد وب سایت را بهبود بخشید و تجربه کاربران را بهبود داد. از جمله روشهایی که مورد بررسی قرار گرفتند میتوان به استفاده از کش، تغییر تنظیمات ماژولها، فشردهسازی محتوا و استفاده از CDN اشاره کرد. با انجام این تغییرات، سرعت و عملکرد وب سایت بهبود پیدا خواهد کرد و تجربه کاربران را بهتر خواهد کرد.
در صورتی که سوالی در این زمینه دارید، میتوانید با ما در قسمت نظرات مطرح کنید و اگر راهکار دیگری برای افزایش سرعت آپاچی دارید، در قسمت نظرات به اشتراک بگذارید.
سوالات متداول:
چه راهکارهایی برای بهبود عملکرد وب سرور آپاچی وجود دارد؟
برخی از راهکارهایی که برای بهبود عملکرد وب سرور آپاچی وجود دارد عبارتند از: استفاده از نسخه جدید وب سرور آپاچی، استفاده از ماژولهای کش، تنظیمات مناسب برای فایلهای پیکربندی وب سرور، افزایش منابع سرور، مانند رم و پردازنده، فشردهسازی محتوا، مانند gzip، استفاده از ماژولهای کش، مانند mod_cache و mod_disk_cache، تنظیم حداکثر تعداد کانکشنها به هر پردازه، غیرفعال کردن ماژولهایی که در حال استفاده نیستند و تعداد پردازههای وب سرور را بر اساس تعداد کاربران همزمان تنظیم کنید.