当前位置:首页 > 技术文章 > 正文内容

NGINX性能优化(nginx性能调整)

arlanguage3个月前 (01-31)技术文章17

1. 简介

NGINX是一个常见的跨平台多用途服务器。因此,它可以链接内部或外部网络的许多部分,传输和提供对文件和动态数据的访问。事实上,它还可以用作负载均衡器,确保可用性。为此,我们可能需要配置延迟时间以避免 504 网关超时和 408 请求超时等错误。

在本文中,我们将探讨超时以及在 NGINX 中设置和禁用不同超时的方法。首先,我们解释如何在 NGINX 配置中添加选项。之后,我们枚举并描述 NGINX 超时类型和设置。最后,我们展示了一个代码片段来有效地禁用常见超时。

2. 配置 NGINX

超时是给定进程终止的时间段。虽然这可能是实际的 Linux 进程 ID (PID),但超时是一个一般概念。

由于NGINX可以以许多不同的容量提供服务,因此我们可能想要设置的超时可能取决于我们的目标功能。在这里,所有超时都以秒为单位,但我们也可以使用 NGINX 时间单位:

  • ms – 毫秒
  • s – 秒
  • m – 分钟
  • h – 小时
  • d – 天
  • w – 周
  • M – 月, 30 天
  • y – 年, 365 天

至关重要的是,对于某些设置,使用 0 会立即超时,因此设置不太可能的高值(如 9999999 或简单的 1y)通常是禁用它们的方法。

为了设置选项,我们修改了NGINX配置文件。最佳实践告诉我们不应该直接更改nginx.conf,而应该在conf.d中创建.conf文件,通常在/etc/nginx中:

ls /etc/nginx/conf.d
xopt.conf

我们讨论的几乎所有选项都可以在三个块中的任何一个中设置:

  • http block
  • server block
  • location block

为此,我们只需在空格后添加适当的名称及其参数值,并以 ; 分号结束:

cat /etc/nginx/conf.d/xopt.conf
http {
  send_timeout 1800;
}

任何修改后,我们可以检查配置文件语法:

nginx -t -c /etc/nginx/conf.d/xopt.conf
nginx: the configuration file /etc/nginx/conf.d/xopt.conf syntax is ok
nginx: configuration file /etc/nginx/conf.d/xopt.conf test is successful

在这种情况下,nginx 的 -t 标志测试由 -c 指定的文件(通常默认为 /etc/nginx/nginx.conf)。

最后,我们重新加载NGINX:

nginx -s reload
[OR]
systemctl reload nginx
[OR]
service nginx reload

3. 基本 NGINX 超时

几个NGINX超时是基本的,而且相当普遍:

  • client_body_timeout – 读取客户端请求正文的最长时间(连续读取之间)(默认值为 60,可能导致 408 请求超时)
  • client_header_timeout – 读取客户端请求标头的最长时间(默认值 60,可能导致 408 请求超时)
  • keepalive_timeout – 客户端连接在服务器上保持的最长时间(必需的第一个参数,默认值 75,0 禁用),以及保持活动状态的值:timeout=time(可选的第二个参数,默认值 60)
  • lingering_timeout – 如果 lingering_close 处于打开状态,则设置更多客户端数据到达的最长时间(默认值 5),它读取并忽略该时间,重复该循环,最长时间为 lingering_time(默认值 30)
  • send_timeout – 将响应发送回客户端时的最长时间(连续写入之间)(默认值为 60)

此外,名称解析可能是许多问题的罪魁祸首。通过设置resolver_timeout,我们可以限制或增加使用 NGINX 时解析名称的最长时间(默认为 30)。

此外,ssl_session_timeout是客户端重用 SSL 会话参数的最长时间(默认为 5m)。

以上所有内容都会影响大多数连接。现在,让我们继续讨论一些细节。

4. NGINX 低级 TCP 超时

在较低级别,侦听指令具有用于配置 TCP 侦听套接字的so_keepalive参数。换句话说,通过将其设置为,我们SO_KEEPALIVE启用保持连接机制。

对于支持的操作系统,我们还可以提供以冒号分隔的选项列表:

  • keepidle– 设置TCP_KEEPIDLE
  • keepintvl – 设置TCP_KEEPINTVL
  • keepcnt – 设置TCP_KEEPCNT

另一方面,跳过这些参数中的任何一个都会使系统保持默认值。

5. 服务器

服务器指令具有上游模块提供的自己的参数。其中之一是 fail_timeout,它设置在考虑服务器不可用(默认值 1)之前尝试max_fails(默认值 010 禁用)服务器联系的最长时间。在进行任何重试之前,此状态将保持相同的时间段。如果我们只有一个服务器,则忽略这些选项。

6. NGINXproxy_*超时

NGINX 有三个常见的代理服务器超时值:

  • proxy_connect_timeout – 连接到代理服务器的最长时间(默认值为 60,通常低于 75)
  • proxy_read_timeout – 读取代理服务器响应的最长时间(两次读取之间)(默认值为 60)
  • proxy_send_timeout – 发送代理服务器请求的最长时间(两次写入之间)(默认为 60)

此外,还有一个proxy_cache_lock_timeout,用于定义在打开proxy_cache_lock(默认关闭)时阻止同时缓存请求的最长时间(默认值 5)。过时缓存也可能取决于此超时值。

7. NGINXfastcgi_*超时

当然,NGINX 还提供了 FastCGI 服务器传输约束设置:

  • fastcgi_connect_timeout – 连接 FastCGI 服务器的最长时间(默认为 60,通常低于 75)
  • fastcgi_read_timeout – 读取 FastCGI 服务器响应的最长时间(两次读取之间)(默认为 60)
  • fastcgi_send_timeout – 发送 FastCGI 服务器请求的最长时间(两次写入之间)(默认为 60)

同样,
fastcgi_cache_lock_timeout
定义在fastcgi_cache_lock(默认关闭)处于打开状态时阻止同时缓存请求(默认值 5)的最长时间。此外,与 proxy_* 设置类似,过时的缓存可能取决于此超时值。

8. NGINXmemcached_*超时

对于Memcached,NGINX提供了与代理和FastCGI类似的选项:

  • memcached_connect_timeout – 与 memcached 服务器连接的最长时间(默认为 60,通常低于 75)
  • memcached_read_timeout – 读取 memcached 服务器响应的最长时间(两次读取之间)(默认为 60)
  • memcached_send_timeout – 发送 memcached 服务器请求的最长时间(写入之间)(默认为 60)

当然,在这种情况下,我们没有缓存锁。

9. 禁用常见的 NGINX 超时

虽然其他模块也存在类似的设置,但一般来说,为了有效地禁用常见超时选项的效果,我们可以在 http服务器块中使用设置列表:

keepalive_timeout 1d;
send_timeout 1d;
client_body_timeout 1d;
client_header_timeout 1d;
proxy_connect_timeout 1d;
proxy_connect_timeout 1d;
proxy_read_timeout 1d;
proxy_send_timeout 1d;
fastcgi_connect_timeout 1d;
fastcgi_read_timeout 1d;
fastcgi_send_timeout 1d;
memcached_connect_timeout 1d;
memcached_read_timeout 1d;
memcached_send_timeout 1d;

在所有情况下,我们将时间段设置为一天。因此,使用这些设置可能会严重降低性能。

10. 总结

在本文中,我们讨论了超时和 NGINX 超时设置。总之,虽然NGINX提供了许多选项来更改不同的超时,但更改正确的超时对于优化性能至关重要。

扫描二维码推送至手机访问。

版权声明:本文由AR编程网发布,如需转载请注明出处。

本文链接:http://www.arlanguage.com/post/1711.html

标签: nginx 空格
分享给朋友:

“NGINX性能优化(nginx性能调整)” 的相关文章

在 Ubuntu 或 Debian 系统上安装以及配置 nginx-1.20.1.tar.gz

安装和配置 Nginx 的步骤如下:下载 Nginx:1、首先,你需要从 Nginx 的官方网站下载源代码包。在你的服务器上执行以下命令,下载 Nginx 1.20.1 版本的源代码包:wget http://nginx.org/download/nginx-1.20.1.tar.gz2、解压源代码...

听说你的Nginx还不会记录Response Body?

相信大家都遇到过在排查线上问题或Debug的时候,在某一瞬间,特别想开启Nginx的Response Body日志,来帮助自己快速的定位问题;但找半天发现只有$request_body/$upstream_addr/$upstream_response_time这些相近变量可用;这个时候不要慌......

技巧:PHP版本怎样隐藏在Linux服务器

通常情况下,大多数安装web服务器软件的默认设置存在信息泄露,这些软件其中之一就是PHP。PHP是如今最流行的服务端html嵌入式语言之一。而在如今这个充满挑战的时代,有许多黑客会尝试发现你服务端的漏洞。因此,ehowstuff网站一篇简单描述如何在Linux服务器中隐藏PHP信息值得关注。(图片来...

如何让Nginx更安全? nginx怎么保证高可用

网络安全的重要性不言而喻。那么小伙伴们有没有在日常使用 Nginx 的时候,特意去关注下它的安全配置呢?今天松哥和小伙伴们讨论一下如何安全的使用 Nginx,给大伙几个建议。一 使用最新版建议使用最新版的 Nginx,对于已经部署的 Nginx,要及时更新到最新版本,以确保所有已知的安全漏洞都已修补...

php手把手教你做网站(二十四)jquery ajax上传大的附件

上传大的附件分为两种情况,可以改变服务器配置;不能改变配置;第2种使用分片上传优势:可以突破服务器上传大小的限制,可以web存储上传到哪一块了,在浏览器关闭或者刷新的情况下可以断点续传;劣势:上传速度慢,在我本地电脑测试,200M的文件,改变配置按照正常方式上传大约需要12到15秒,但是使用第2种分...

Nginx专题(1):Nginx之反向代理及配置

一、Nginx概念解读对于新事物的理解,最好的方式就是从概念入手,本文作为《Nginx专题》系列文章的第一篇,先从Nginx的名称开始来分解这个神秘的引擎。Nginx,是engine X的缩写,发音也是'engine x',2004年由俄罗斯大神伊戈尔·赛索耶夫开发,提供了高性能而易...