知識庫 使用 Profitserver 服務的簡單說明

減少伺服器負載


在本文中,我們將深入探討伺服器負載增加的原因,並討論最佳化高負載流程的各種方法。我們將特別關注 Apache/Nginx 和 MySQL 中的程式碼最佳化,我們將討論快取作為輔助工具,並考慮可能的外部威脅,例如 DDOS 攻擊及其預防方法。

為什麼會發生伺服器負載

在進行伺服器最佳化之前,需要對目前資源負載進行徹底的分析。這包括測量 CPU 負載、RAM 使用情況、網路活動和其他關鍵參數。了解動態和尖峰負載可以識別瓶頸並優化資源分配,從而提高伺服器基礎架構的穩定性和效能。

對於高伺服器負載的初步故障排除,我們建議進行 常規伺服器診斷。如果這還不夠,更詳細的 資源分析 是必要的。作為輔助工具,探索 Linux 的日誌 伺服器會很有幫助,因為大多數情況下問題的根源就在這裡。

最佳化 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)"

作為減少負載的第一個解決方案,您可以使用元標記的設置 “無索引” “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

之後重新啟動 Web 伺服器:

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

然後,重新啟動 Web 伺服器:

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;

阿帕奇,這裡設定某些類型檔案的壓縮參數。對任何 Web 伺服器進行變更後,都需要重新載入服務:

sudo service apache2 restart

Or

sudo service nginx restart

伺服器遭受 DDOS 攻擊

DDoS 攻擊可能會導致伺服器負載過高。透過監控流量突然增加、異常請求和伺服器效能下降可以識別 DDoS 攻擊的存在。查看來自一個 IP 位址的重複請求或連接埠掃描日誌也可以指示可能存在的 DDoS 攻擊。保護措施有很多,但我們只討論基本措施。

使用 CDN(內容傳遞網路)。 CDN 可以充當您的 Web 伺服器和使用者之間的中介,分配流量和快取內容以減輕 DDoS 攻擊的影響。 CDN 還可以具有內建 DDoS 保護機制,包括負載分配和流量過濾。

配置防火牆和入侵偵測系統 (IDS/IPS)。可以配置防火牆以根據各種標準(例如 IP 位址和連接埠)過濾流量。 IDS/IPS 可以偵測異常流量行為並阻止可疑連線。這些工具可以有效地追蹤和阻止潛在的惡意流量。

設定 Apache 和 Nginx Web 伺服器以減輕 DDoS 攻擊的影響。

作為 Apache 的解決方案,我們啟用 mod_evasive 模組。為此,請取消註釋或在 httpd.conf中 or 配置文件 設定檔:

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 查詢

可以透過多種方式優化 Web 伺服器上的 MySQL 資料庫查詢,其中之一就是正確設定設定檔。通常,此文件被命名為 我的.cnf or 我的.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. 索引可以加快資料搜尋速度,因此合理設計的索引可以顯著提高查詢效能。注意經常使用的列 WHERE or 註冊 條件。
  3. 避免使用 選擇 *。僅指定查詢真正需要的列,而不是選擇表格中的所有列。
  4. 避免在以下位置使用函數 WHERE 狀況。使用函數(例如 降低, , , RIGHT)in WHERE 條件可能會使索引變得無用。盡量避免在條件中直接使用它們。
  5. 使用 INNER JOIN 盡可能這樣做,因為這樣通常更有效率。另外,確保連接的相應列有索引。
  6. 使用 LIMIT 如果您只需要取得一定數量的結果,則限制傳回的行數。
  7. 考慮快取查詢結果,特別是當它們很少改變時,以減少伺服器負載。

郵件伺服器造成伺服器高負載

在本節中,我們將探討如何確定郵件伺服器正在承受高負載,以及可以採取哪些步驟來最佳化其運行,包括檢查訊息佇列和設定伺服器參數。從檢查訊息隊列開始。這 郵件 實用程式可以幫助實現這一點,要啟動它,請在終端機中輸入相應的命令:

mailq

如果有的話,這將顯示佇列中的消息清單。每個訊息將顯示其唯一識別碼和有關發送狀態的資訊。透過查看郵件用戶端日誌可以獲得類似的結果。

大多數情況下,當伺服器受到威脅並開始發送垃圾郵件時,就會出現高負載。然而,如果管理員檢查後確信伺服器沒有受到外部攻擊,且使用者沒有忽視垃圾郵件,那麼就該開始優化郵件伺服器了。以下步驟將有所幫助:

  1. 確保您的網域的 DNS 記錄配置正確,包括 SPF, 德基姆DMARC 記錄以提高郵件傳遞率並防止垃圾郵件。正確的參數配置可以在以下文章中找到 郵件伺服器診斷.
  2. 檢查網路設置,包括防火牆配置和路由規則,以避免阻塞並加快郵件投遞。
  3. 根據伺服器負載配置訊息隊列參數。這可能包括設定最大隊列大小和逾時。
  4. 考慮一下我們之前在本文中討論過的解決方案。定期優化郵件伺服器資料庫以提高效能,使用快取機制加快資料搜尋和處理,例如DNS查詢。
  5. 如果郵件伺服器仍然經常遇到高負載,請考慮擴充選項,例如使用郵件伺服器叢集或雲端解決方案。

結論

伺服器負載的增加直接影響網站載入速度,最終影響使用者體驗和搜尋引擎的聲譽。因此,有效地管理這種負載對於確保資源的持續功能和提高訪客的可訪問性起著關鍵作用。

⮜ 上一篇文章 伺服器負載診斷
下一篇文章⮞ Certbot:安裝 Let's Encrypt 證書

向我們諮詢有關 VPS 的問題

無論白天或黑夜,我們隨時準備好解答您的問題。