מאגר המידע הוראות פשוטות לעבודה עם שירות Profitserver
ראשי מאגר המידע הפחתת עומס השרת

הפחתת עומס השרת


במאמר זה, נתעמק מדוע מתרחש עומס שרת מוגבר ונדון בדרכים שונות לייעל תהליכים בעומס גבוה. תשומת לב מיוחדת תינתן לאופטימיזציה של קוד ב-Apache/Nginx וב-MySQL, נדבר על מטמון ככלי עזר, וגם נשקול איומים חיצוניים אפשריים, כמו התקפות DDOS, ודרכים למנוע אותם.

מדוע מתרחשת עומס שרת

לפני שתמשיך לאופטימיזציה של השרת, יש צורך לבצע ניתוח יסודי של העומס הנוכחי על המשאבים. זה כולל מדידת עומס מעבד, שימוש בזיכרון 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" ו "nofollow" בדפים שאין צורך באינדקס. הפתרון השני הוא .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. במקרה של Apache, האפשרות השנייה עדיפה, עבור 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. ל-CDNs יכולים להיות גם מנגנוני הגנה DDoS מובנים, כולל חלוקת עומסים וסינון תעבורה.

הגדרת חומות אש ומערכות זיהוי חדירה (IDS/IPS). ניתן להגדיר חומות אש לסנן תעבורה על סמך קריטריונים שונים, כגון כתובות IP ויציאות. IDS/IPS יכול לזהות התנהגות תנועה חריגה ולחסום חיבורים חשודים. כלים אלה יכולים להיות יעילים במעקב ובחסימת תנועה שעלולה להיות זדונית.

הגדרת שרתי Apache ו-Nginx כדי להפחית את ההשפעה של התקפות DDoS.

כפתרון עבור Apache, אנו מאפשרים את 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. הימנע משימוש בפונקציות ב איפה תנאים. שימוש בפונקציות (כגון נמוך יותר, עֶלִיוֹן, נשאר, ימינה) ב איפה תנאים יכולים להפוך את האינדקסים לחסרי תועלת. נסו להימנע משימוש ישיר בהם בתנאים.
  5. השתמש Inner Join במידת האפשר, מכיוון שהיא בדרך כלל יעילה יותר. כמו כן, ודא שלעמודות המתאימות להצטרפות יש אינדקסים.
  6. השתמש להגביל כדי להגביל את מספר השורות המוחזרות אם אתה צריך לקבל רק מספר מסוים של תוצאות.
  7. שקול לשמור תוצאות שאילתות במטמון, במיוחד אם הן משתנות לעתים רחוקות, כדי להפחית את עומס השרת.

שרת הדואר יוצר עומס גבוה על השרת

בסעיף זה, נבדוק כיצד לקבוע ששרת הדואר חווה עומס גבוה ואילו צעדים ניתן לנקוט כדי לייעל את פעולתו, כולל בדיקת תור ההודעות והגדרת פרמטרי שרת. התחל עם בדיקת תור ההודעות. ה mailq כלי השירות יכול לעזור בזה, כדי להפעיל אותו, הזן את הפקודה המתאימה בטרמינל:

mailq

פעולה זו תציג רשימה של הודעות בתור, אם ישנן. כל הודעה תוצג עם המזהה הייחודי שלה ומידע על מצב השליחה. ניתן להשיג תוצאה דומה על ידי סקירת יומני לקוח הדואר.

ברוב המקרים, עומס גבוה מתרחש במקרה של פגיעה בשרת כאשר הוא מתחיל לשלוח דואר זבל. עם זאת, אם לאחר בדיקה המנהל בטוח שהשרת לא הותקף מבחוץ והמשתמשים לא מזניחים את הספאם, זה הזמן לעבור לאופטימיזציה של שרת הדואר. להלן השלבים שיעזרו:

  1. ודא שרשומות ה-DNS של הדומיין שלך מוגדרות כהלכה, כולל SPF, סיומת dkim, ו DMARC רשומות כדי לשפר את משלוח הדואר ולהגן מפני דואר זבל. את התצורה הנכונה של הפרמטרים ניתן למצוא במאמר על אבחון שרת דואר.
  2. בדוק את הגדרות הרשת, כולל תצורת חומת אש וכללי ניתוב, כדי למנוע חסימות ולהאיץ את משלוח הדואר.
  3. הגדר פרמטרים של תור הודעות בהתאם לעומס השרת. זה עשוי לכלול הגדרת גודל התור המקסימלי ופסקי זמן.
  4. שקול את הפתרונות שדנו במאמר זה קודם לכן. בצע אופטימיזציה תקופתית של מסד הנתונים של שרת הדואר כדי לשפר את הביצועים, השתמש במנגנוני מטמון כדי להאיץ את החיפוש והעיבוד של נתונים, כגון שאילתות DNS.
  5. אם שרת הדואר עדיין נתקל בעומס גבוה באופן קבוע, שקול אפשרויות קנה מידה, כגון שימוש באשכול של שרתי דואר או פתרונות ענן.

סיכום

עומס שרת מוגבר משפיע ישירות על מהירות טעינת האתר, ובסופו של דבר משפיע על חווית המשתמש והמוניטין במנועי החיפוש. לפיכך, ניהול יעיל של עומס זה ממלא תפקיד מפתח בהבטחת פונקציונליות רציפה של המשאב והגברת הנגישות שלו עבור המבקרים.

❮ מאמר קודם אבחון עומס שרת
המאמר הבא ❯ Certbot: התקנת Let's Encrypt Certificate

שאל אותנו לגבי VPS

אנחנו תמיד מוכנים לענות על שאלותיכם בכל שעה ביום ובלילה.