NGINX是一个常见的跨平台多用途服务器。因此,它可以链接内部或外部网络的许多部分,传输和提供对文件和动态数据的访问。实际上,它还可以用作负载均衡器,确保可用性。为此,我们可能需要配置延迟时间以避免 504 网关超时和 408 请求超时等错误。
在本文中,我们将探讨超时以及在 NGINX 中设置和禁用不同超时的方法。第一,我们解释如何在 NGINX 配置中添加选项。之后,我们枚举并描述 NGINX 超时类型和设置。最后,我们展示了一个代码片段来有效地禁用常见超时。
超时是给定进程终止的时间段。虽然这可能是实际的 Linux 进程 ID (PID),但超时是一个一般概念。
由于NGINX可以以许多不同的容量提供服务,因此我们可能想要设置的超时可能取决于我们的目标功能。在这里,所有超时都以秒为单位,但我们也可以使用 NGINX 时间单位:
至关重大的是,对于某些设置,使用 0 会立即超时,因此设置不太可能的高值(如 9999999 或简单的 1y)一般是禁用它们的方法。
为了设置选项,我们修改了NGINX配置文件。最佳实践告知我们不应该直接更改nginx.conf,而应该在conf.d中创建.conf文件,一般在/etc/nginx中:
ls /etc/nginx/conf.d
xopt.conf我们讨论的几乎所有选项都可以在三个块中的任何一个中设置:
为此,我们只需在空格后添加适当的名称及其参数值,并以 ; 分号结束:
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几个NGINX超时是基本的,而且相当普遍:
此外,名称解析可能是许多问题的罪魁祸首。通过设置resolver_timeout,我们可以限制或增加使用 NGINX 时解析名称的最长时间(默认为 30)。
此外,ssl_session_timeout是客户端重用 SSL 会话参数的最长时间(默认为 5m)。
以上所有内容都会影响大多数连接。目前,让我们继续讨论一些细节。
在较低级别,侦听指令具有用于配置 TCP 侦听套接字的so_keepalive参数。换句话说,通过将其设置为开或关,我们SO_KEEPALIVE启用保持连接机制。
对于支持的操作系统,我们还可以提供以冒号分隔的选项列表:
另一方面,跳过这些参数中的任何一个都会使系统保持默认值。
服务器指令具有上游模块提供的自己的参数。其中之一是 fail_timeout,它设置在思考服务器不可用(默认值 1)之前尝试max_fails(默认值 0, 10 禁用)服务器联系的最长时间。在进行任何重试之前,此状态将保持一样的时间段。如果我们只有一个服务器,则忽略这些选项。
NGINX 有三个常见的代理服务器超时值:
此外,还有一个proxy_cache_lock_timeout,用于定义在打开proxy_cache_lock(默认关闭)时阻止同时缓存请求的最长时间(默认值 5)。过时缓存也可能取决于此超时值。
当然,NGINX 还提供了 FastCGI 服务器传输约束设置:
同样,
fastcgi_cache_lock_timeout定义在fastcgi_cache_lock(默认关闭)处于打开状态时阻止同时缓存请求(默认值 5)的最长时间。此外,与 proxy_* 设置类似,过时的缓存可能取决于此超时值。
对于Memcached,NGINX提供了与代理和FastCGI类似的选项:
当然,在这种情况下,我们没有缓存锁。
虽然其他模块也存在类似的设置,但一般来说,为了有效地禁用常见超时选项的效果,我们可以在 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;在所有情况下,我们将时间段设置为一天。因此,使用这些设置可能会严重降低性能。
在本文中,我们讨论了超时和 NGINX 超时设置。总之,虽然NGINX提供了许多选项来更改不同的超时,但更改正确的超时对于优化性能至关重大。