دانش محور دستورالعمل های ساده برای کار با سرویس Profitserver
اصلی دانش محور کاهش بار سرور

کاهش بار سرور


در این مقاله، چرایی افزایش بار سرور را بررسی خواهیم کرد و راه‌های مختلفی برای بهینه‌سازی فرآیندهای با بار بالا را مورد بحث قرار خواهیم داد. توجه ویژه ای به بهینه سازی کد در Apache/Nginx و MySQL داده خواهد شد، ما در مورد کش به عنوان یک ابزار کمکی صحبت خواهیم کرد و همچنین تهدیدات خارجی احتمالی مانند حملات DDOS و راه های جلوگیری از آنها را در نظر خواهیم گرفت.

چرا بار سرور رخ می دهد

قبل از اقدام به بهینه سازی سرور، لازم است تجزیه و تحلیل کاملی از بار فعلی روی منابع انجام شود. این شامل اندازه گیری بار CPU، استفاده از RAM، فعالیت شبکه و سایر پارامترهای کلیدی است. درک دینامیک و بارهای پیک امکان شناسایی تنگناها و بهینه سازی تخصیص منابع را فراهم می کند و در نتیجه ثبات و عملکرد زیرساخت سرور را افزایش می دهد.

برای عیب یابی اولیه بار بالای سرور، توصیه می کنیم یک عیب یابی عمومی سرور. اگر این کافی نیست، جزئیات بیشتری ارائه دهید تجزیه و تحلیل منابع ضروری است. به عنوان یک ابزار کمکی، کاوش در لاگ های لینوکس سرور می تواند مفید باشد، زیرا منبع مشکل در بیشتر موارد اینجاست.

بهینه سازی سرور Apache/Nginx

افزایش بار سرور به دلیل نمایه سازی

به عنوان مثال زمانی که موتورهای جستجو تعداد زیادی از صفحات سایت شما را اسکن می کنند، به دلیل ایندکس شدن روی سرور، بارگذاری افزایش می یابد. این امر می تواند منجر به افزایش استفاده از منابع سرور و در نتیجه کاهش عملکرد سایت شود. شناسایی علت نسبتاً ساده است. شما باید فایلی را که در آدرس زیر قرار دارد باز کنید:

/var/www/httpd-logs/sitename.access.log

هنگامی که توسط موتورهای جستجو ایندکس می شود، کاربر ورودی هایی با ماهیت زیر را مشاهده می کند:

11.22.33.44 - - [Date and Time] "GET /your-page-path HTTP/1.1" 200 1234 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"

به عنوان اولین راه حل برای کاهش بار، می توانید از تنظیم متا تگ ها استفاده کنید "noindex" و "نوفالو" در صفحاتی که نیازی به ایندکس شدن ندارند. راه حل دوم این است . htaccess تغییر نام دهید فایل، که در آن ورودی های مربوط به موتورهای جستجوی خاص باید اضافه شوند، به عنوان مثال، برای پنهان شدن از Yandex و Google:

SetEnvIfNoCase User-Agent "^Yandex" search_bot
SetEnvIfNoCase User-Agent "^Googlebot" search_bot
Order Allow,Deny
Allow from all
Deny from env=search_bot

به همین ترتیب، باید برای سایر موتورهای جستجو ویرایش انجام شود. لازم به ذکر است که قابلیت های .htaccess فقط به مسدود کردن نمایه سازی محدود نمی شود. توصیه می کنیم با ویژگی های اصلی آن بیشتر آشنا شوید مقاله.

استفاده از تنظیمات حافظه پنهان

تنظیمات نادرست حافظه پنهان در سرور نیز می تواند منجر به بار زیاد شود. برای بهینه سازی این پارامتر، باید تغییرات مربوطه را در فایل های پیکربندی یا . htaccess تغییر نام دهید. در مورد آپاچی، گزینه دوم برای Nginx ترجیح داده می شود.

روی یک آپاچی سرور، باید آن را باز کنید htacess فایل و کد زیر را وارد کنید:

<FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf|js|css|pdf|doc|docx)$">
Header set Cache-Control "max-age=2592000"
</FilesMatch>

سپس، را فعال کنید تاریخ انقضا ماژول با استفاده از دستور:

sudo a2enmod expires

پس از آن، وب سرور را مجددا راه اندازی کنید:

sudo service apache2 restart

و ماژول را با مشخص کردن:

ExpiresActive On

در یک Nginx سرور، کافی است کد زیر را به فایل پیکربندی اضافه کنید:

location ~* .(jpg|jpeg|gif|png|ico|css|swf|flv|doc|docx)$ {
root /var/www/yoursite.com;
}

و بارگذاری مجدد سرویس را انجام دهید:

sudo service nginx restart

توجه داشته باشید که با این تنظیمات، اجازه دادن و انکار بخشنامه ها دور زده خواهد شد.

با استفاده از فشرده سازی داده ها

فعال کردن فشرده سازی داده ها با استفاده از Gzip در سرورهای وب Apache و Nginx به کاهش میزان داده های ارسال شده بین سرور و مشتری کمک می کند که عملکرد را بهبود می بخشد و زمان بارگذاری صفحه وب را کاهش می دهد.

برای فعال کردن Gzip on آپاچی، باید آن را فعال کنید mod_deflate مدول:

sudo a2enmod deflate

سپس وب سرور را مجددا راه اندازی کنید:

sudo service apache2 restart

و در نهایت بلوک زیر را به فایل پیکربندی یا htaccess. اضافه کنید:

<IfModule mod_deflate.c>
# Configure compression for specified file types
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/x-javascript application/json

# If the browser matches the specified pattern, apply compression only to text/html files
BrowserMatch ^Mozilla/4 gzip-only-text/html

# If the browser matches the specified version patterns of Mozilla 4.0.6, 4.0.7, 4.0.8, disable compression
BrowserMatch ^Mozilla/4\.0[678] no-gzip

# If the browser is MSIE (Internet Explorer), disable compression for all files except text/html
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

# If the request contains the specified pattern (extensions of image files), disable compression
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip
</IfModule>

این پیکربندی فشرده سازی را برای انواع خاصی از فایل ها فعال می کند و آن را برای تصاویر غیرفعال می کند.

در شرایطی که Nginx، پیکربندی در HTTP بلوک فایل پیکربندی کد زیر باید اضافه شود:

gzip on;
gzip_disable "msie6";

# Adds the Vary header, indicating that the response may change depending on the Accept-Encoding header value
gzip_vary on;

# Enables compression for any proxy servers
gzip_proxied any;

# Sets the compression level. A value of 6 provides a good balance between compression efficiency and resource use
gzip_comp_level 6;

# Sets the size of the buffer for compressed data (16 buffers of 8 kilobytes each)
gzip_buffers 16 8k;

# Specifies that data compression should be used only for HTTP version 1.1 and higher
gzip_http_version 1.1;

# Sets the file types that can be compressed
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

مشابه آپاچی، در اینجا پارامترهای فشرده سازی برای انواع خاصی از فایل ها تنظیم شده است. پس از ایجاد تغییرات در هر یک از سرورهای وب، بارگذاری مجدد سرویس مورد نیاز است:

sudo service apache2 restart

Or

sudo service nginx restart

حمله DDOS به سرور

بار بالای سرور می تواند در نتیجه یک حمله DDoS رخ دهد. شناسایی وجود یک حمله DDoS را می توان از طریق نظارت بر افزایش ناگهانی ترافیک، درخواست های غیرعادی و افت عملکرد سرور انجام داد. بررسی گزارش‌ها برای درخواست‌های مکرر از یک آدرس IP یا اسکن پورت نیز می‌تواند نشان‌دهنده حمله احتمالی DDoS باشد. اقدامات حفاظتی زیادی وجود دارد، اما ما فقط در مورد اصول اولیه صحبت خواهیم کرد.

استفاده از CDN (شبکه تحویل محتوا). یک CDN می تواند به عنوان یک واسطه بین وب سرور و کاربران شما، توزیع ترافیک و ذخیره محتوا برای کاهش تأثیر یک حمله DDoS عمل کند. CDN ها همچنین می توانند مکانیسم های حفاظتی داخلی DDoS از جمله توزیع بار و فیلتر ترافیک داشته باشند.

پیکربندی فایروال ها و سیستم های تشخیص نفوذ (IDS/IPS). فایروال ها را می توان برای فیلتر کردن ترافیک بر اساس معیارهای مختلف، مانند آدرس های IP و پورت ها، پیکربندی کرد. IDS/IPS می تواند رفتار ترافیکی غیرعادی را تشخیص دهد و اتصالات مشکوک را مسدود کند. این ابزارها می توانند در ردیابی و مسدود کردن ترافیک بالقوه مخرب موثر باشند.

پیکربندی وب سرورهای Apache و Nginx برای کاهش تأثیر حملات DDoS.

به عنوان راه حلی برای آپاچی، ما آن را فعال می کنیم mod_evasive ماژول برای این کار، کامنت را بردارید یا خط زیر را در قسمت اضافه کنید httpd.conf or apache2.conf فایل پیکربندی:

LoadModule evasive20_module modules/mod_evasive.so

در همان فایل، باید یک بلوک تنظیمات اضافه کنید:

<IfModule mod_evasive20.c>
# Hash table size for storing request information
DOSHashTableSize 3097

# Number of requests to one page before activating protection
DOSPageCount 2
DOSPageInterval 1

# Number of requests to all pages before activating protection
DOSSiteCount 50
DOSSiteInterval 1

# Blocking period in seconds for IP addresses
DOSBlockingPeriod 10
</IfModule>

به طور مشابه، ما را فعال می کنیم mod_ratelimit مدول:

LoadModule ratelimit_module modules/mod_ratelimit.so

و پیکربندی را اضافه کنید:

<IfModule mod_ratelimit.c>
# Setting the output filter for rate limiting (Rate Limit)
SetOutputFilter RATE_LIMIT

# Beginning of the settings block for the location "/login"
<Location "/login">

# Setting the environment variable rate-limit with a value of 1
SetEnv rate-limit 1

# Ending of the settings block for the location "/login"
</Location>
</IfModule>

پیکربندی برای Nginx مشابه است آپاچیاست. در nginx.conf فایل پیکربندی، دستورالعمل های زیر باید استفاده شوند:

http {
...
# Defining a zone for connection limits
limit_conn_zone $binary_remote_addr zone=addr:10m;

# Defining a zone for request limits
limit_req_zone $binary_remote_addr zone=req_zone:10m rate=1r/s;

server {
        ...
        # Configuring connection limits
        limit_conn addr 10;

        # Configuring request limits
        limit_req zone=req_zone burst=5;

        ...
    }
}

پس از ایجاد تغییرات در هر یک از خدمات، آنها باید دوباره بارگیری شوند:

sudo systemctl restart apache2

و یا:

sudo systemctl restart nginx

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

بهینه سازی پرس و جوهای MySQL

بهینه سازی پرس و جوهای پایگاه داده MySQL در وب سرور به روش های مختلفی امکان پذیر است که یکی از آنها پیکربندی صحیح فایل پیکربندی است. به طور معمول، این فایل نام دارد my.cnf or my.ini و در واقع شده است /و غیره/ or /etc/mysql/ دایرکتوری باید آن را باز کنید و تغییرات زیر را اعمال کنید:

[mysqld]
# Location of the file for recording slow queries. Be sure to replace it with your path
log-slow-queries = /var/log/mariadb/slow_queries.log

# Threshold time for considering slow queries (in seconds)
long_query_time = 5

# Enabling recording of queries that do not use indexes
log-queries-not-using-indexes = 1

# Disabling query caching
query_cache_size = 0
query_cache_type = 0
query_cache_limit = 1M

# Size of temporary tables
tmp_table_size = 16M
max_heap_table_size = 16M

# Size of the thread cache
thread_cache_size = 16

# Disabling name resolving
skip-name-resolve = 1

# Size of the InnoDB buffer pool. Set to 50-70% of available RAM
innodb_buffer_pool_size = 800M

# Size of the InnoDB log file
innodb_log_file_size = 200M

بیایید همچنین توصیه های اضافی را در نظر بگیریم که می تواند تعامل با پایگاه داده سرور را تسهیل کند:

  1. استفاده از توضیح دستور قبل از پرس و جوی SQL برای تجزیه و تحلیل اجرای آن. این به شما این امکان را می دهد که یک برنامه اجرایی برای پرس و جو دریافت کنید و تعیین کنید که کدام شاخص ها استفاده می شوند، کدام جداول اسکن می شوند و غیره.
  2. ایندکس ها جستجوی داده ها را سرعت می بخشند، بنابراین نمایه های طراحی شده به درستی می توانند عملکرد پرس و جو را به طور قابل توجهی بهبود بخشند. به ستون هایی که اغلب در آنها استفاده می شود توجه کنید مکانی که در آن or بپیوندید شرایط.
  3. از استفاده خودداری کنید انتخاب کنید *. به جای انتخاب تمام ستون‌های یک جدول، فقط آن ستون‌هایی را مشخص کنید که واقعاً برای درخواست شما ضروری هستند.
  4. اجتناب از استفاده از توابع در مکانی که در آن شرایط استفاده از توابع (مانند پایین تر, بالا, چپ, RIGHT) که در مکانی که در آن شرایط می تواند شاخص ها را بی فایده کند. سعی کنید از استفاده مستقیم آنها در شرایط اجتناب کنید.
  5. استفاده کنید INNER JOIN در صورت امکان، زیرا معمولاً کارآمدتر است. همچنین، مطمئن شوید که ستون های مربوطه برای پیوستن دارای اندیس هستند.
  6. استفاده کنید محدود برای محدود کردن تعداد ردیف های برگشتی در صورتی که نیاز به دریافت فقط تعداد مشخصی از نتایج دارید.
  7. برای کاهش بار سرور، نتایج جستجو را در حافظه پنهان در نظر بگیرید، به خصوص اگر به ندرت تغییر می کنند.

Mail Server بار بالایی روی سرور ایجاد می کند

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

mailq

در صورت وجود، لیستی از پیام‌های موجود در صف نمایش داده می‌شود. هر پیام با شناسه منحصر به فرد خود و اطلاعات مربوط به وضعیت ارسال نمایش داده می شود. نتیجه مشابهی را می توان با بررسی گزارش های سرویس گیرنده ایمیل به دست آورد.

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

  1. مطمئن شوید که رکوردهای DNS دامنه شما به درستی پیکربندی شده اند، از جمله SPF, پسوند dkimو DMARC سوابق برای بهبود تحویل نامه و محافظت در برابر هرزنامه. پیکربندی صحیح پارامترها را می توان در مقاله در یافت کرد تشخیص سرور ایمیل.
  2. تنظیمات شبکه، از جمله پیکربندی فایروال و قوانین مسیریابی را برای جلوگیری از مسدود شدن و سرعت بخشیدن به ارسال نامه بررسی کنید.
  3. پیکربندی پارامترهای صف پیام با توجه به بار سرور. این ممکن است شامل تنظیم حداکثر اندازه صف و زمان‌بندی باشد.
  4. راه حل هایی را که قبلا در این مقاله مورد بحث قرار دادیم در نظر بگیرید. به طور دوره ای پایگاه داده سرور ایمیل را برای بهبود عملکرد بهینه کنید، از مکانیسم های کش برای سرعت بخشیدن به جستجو و پردازش داده ها مانند جستارهای DNS استفاده کنید.
  5. اگر سرور ایمیل همچنان مرتباً با بار زیاد مواجه می شود، گزینه های مقیاس بندی را در نظر بگیرید، مانند استفاده از مجموعه ای از سرورهای ایمیل یا راه حل های ابری.

نتیجه

افزایش بار سرور مستقیماً بر سرعت بارگذاری وب سایت تأثیر می گذارد و در نهایت بر تجربه و شهرت کاربر در موتورهای جستجو تأثیر می گذارد. بنابراین، مدیریت موثر این بار نقش کلیدی در تضمین عملکرد مداوم منبع و افزایش دسترسی به آن برای بازدیدکنندگان دارد.

❮ مقاله قبلی تشخیص بار سرور
مقاله بعدی ❯ Certbot: نصب Let's Encrypt Certificate

VPS را از ما بخواهید

ما همیشه آماده پاسخگویی به سوالات شما در هر ساعت از شبانه روز هستیم.