知识库 使用 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 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 查询

可以通过多种方式优化 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. 索引可以加快数据搜索速度,因此正确设计的索引可以显著提高查询性能。注意经常使用的列 or 注册 条件。
  3. 避免使用 SELECT *. 仅指定查询真正需要的列,而不是选择表中的所有列。
  4. 避免在以下位置使用函数 条件。使用函数(例如 LOWER, , , )in 条件会使索引失效。尽量避免在条件中直接使用索引。
  5. 使用 VHDL 语言编写 INNER JOIN 尽可能地,因为这通常更有效率。另外,确保连接的相应列有索引。
  6. 使用 VHDL 语言编写 极限 如果您只需要获取一定数量的结果,则限制返回的行数。
  7. 考虑缓存查询结果,特别是当它们很少改变时,以减少服务器负载。

邮件服务器造成服务器高负载

在本节中,我们将探讨如何确定邮件服务器正在经历高负载,以及可以采取哪些步骤来优化其运行,包括检查消息队列和配置服务器参数。从检查消息队列开始。 邮件q 实用程序可以帮助实现这一点,要激活它,请在终端中输入相应的命令:

mailq

这将显示队列中的邮件列表(如果有)。每封邮件将显示其唯一标识符和有关发送状态的信息。通过查看邮件客户端日志可以获得类似的结果。

在大多数情况下,当服务器开始发送垃圾邮件时,服务器就会受到攻击,从而导致高负载。但是,如果管理员在检查后确信服务器没有受到外部攻击,并且用户没有忽视垃圾邮件,那么是时候开始优化邮件服务器了。以下是有帮助的步骤:

  1. 确保您的域的 DNS 记录配置正确,包括 防晒指数, DKIMDMARC 记录以改善邮件传递并防止垃圾邮件。正确的参数配置可以在文章中找到 邮件服务器诊断.
  2. 检查网络设置,包括防火墙配置和路由规则,以避免阻塞并加快邮件投递。
  3. 根据服务器负载配置消息队列参数。这可能包括设置最大队列大小和超时。
  4. 考虑一下我们之前在本文中讨论的解决方案。定期优化邮件服务器数据库以提高性能,使用缓存机制加快数据搜索和处理速度,例如 DNS 查询。
  5. 如果邮件服务器仍然经常遇到高负载,请考虑扩展选项,例如使用邮件服务器集群或云解决方案。

结语

服务器负载增加会直接影响网站加载速度,最终影响用户体验和搜索引擎声誉。因此,有效管理这种负载对于确保资源持续运行和提高访问者可访问性起着关键作用。

❮ 上一篇文章 服务器负载诊断
下一篇文章❯ Certbot:安装 Let's Encrypt 证书

向我们咨询有关 VPS 的问题

无论白天还是黑夜,我们随时准备解答您的问题。