מאגר המידע הוראות פשוטות לעבודה עם שירות 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 , שבו יש להוסיף ערכים התואמים למנועי חיפוש ספציפיים, למשל, כדי להסתיר אותם מיאנדקס וגוגל:

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 - הראשונה.

בשרת Apache , עליך לפתוח את קובץ ה- .htacess ולהכניס את הקוד הבא:

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

לאחר מכן, הפעל את מודול Expires באמצעות הפקודה:

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

שים לב שעם הגדרות אלו, ההנחיות Allow ו- Deny יעקפו.

שימוש בדחיסת נתונים

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

כדי להפעיל את Gzip ב- Apache , עליך להפעיל את המודול 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;

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

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.

כפתרון עבור Apache, אנו מפעילים את המודול mod_evasive . לשם כך, יש לבטל את ההערות או להוסיף את השורה הבאה בקובץ התצורה httpd.conf או 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 דומה לזו של Apache . בקובץ התצורה 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 או my.ini והוא ממוקם בספרייה /etc/ או /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

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