server/nginx模块配置--http
nginx
的 http
模块主要包括以下几类内容:
基础设置:
- 全局配置:涉及基本的服务器行为和默认设置。
- 日志配置:配置访问日志和错误日志的格式和存储位置。
- 文件处理:配置文件类型、默认 MIME 类型等。
性能优化:
- 缓存:包括内容缓存、代理缓存等。
- 压缩:启用 Gzip 等压缩方式以减少传输数据量。
- 连接管理:配置保持连接、超时等参数。
安全设置:
- SSL/TLS 配置:配置 HTTPS,指定证书路径和加密协议。
- 访问控制:限制访问权限,如基于 IP 的访问控制。
- 请求速率限制:限制请求速率以防止服务器过载和防止DDoS攻击。
- 限制连接数:限制每个客户端或每个会话的最大连接数,保护服务器资源
代理和负载均衡:
- 反向代理:将请求转发到后台服务器。
- 负载均衡:将请求分发到多个后台服务器。
重写和重定向:
- URL 重写:基于特定规则修改 URL。
- 重定向:将请求重定向到另一个 URL。
静态和动态内容处理:
- 静态文件处理:配置如何处理静态文件,如设置缓存时间。
- 动态内容处理:处理动态内容,如通过 FastCGI、uwsgi、proxy 等将请求传递给后台应用。
错误处理:
- 自定义错误页面:为不同的 HTTP 错误代码设置自定义错误页面。
分类说明
- 基础设置:
include
:包含其他配置文件。default_type
:设置默认 MIME 类型。server
:定义虚拟服务器。location
:定义请求的处理方式。
- 性能优化:
sendfile
:启用高效文件传输。tcp_nopush
:减少网络包的数量。tcp_nodelay
: 禁用 Nagle 算法,从而在有小的网络数据包时减少延迟,适用于需要低延迟的应用场景keepalive_timeout
:设置保持连接的超时时间。gzip
:启用 Gzip 压缩。gzip_types
:指定需要压缩的文件类型。proxy_cache/proxy_cache_path
:定义缓存路径、缓存区域大小和其他相关参数。ssl_session_cache
:配置 SSL 会话缓存。ssl_session_timeout
:设置 SSL 会话缓存的超时时间。ssl_session_tickets
:启用或禁用会话票据。
- 安全设置:
ssl_certificate
:指定 SSL 证书文件路径。ssl_certificate_key
:指定 SSL 证书密钥文件路径。ssl_protocols
:设置支持的 SSL/TLS 协议。allow
/deny
:基于 IP 的访问控制。limit_req_zone/limit_req
: 设置共享内存区域和速率限制。limit_conn_zone
和limit_conn
: 定义一个共享内存区域,存储每个键的连接数,应用连接数限制。
- 代理和负载均衡:
proxy_pass
:将请求转发到后台服务器。proxy_set_header
:设置代理请求的头部信息。upstream
:定义负载均衡的后台服务器组。server
(在upstream
中):定义单个后台服务器。
- 重写和重定向:
rewrite
:基于正则表达式重写 URL。return
:返回特定的 HTTP 状态码或重定向到指定 URL。
- 静态和动态内容处理:
root
:设置根目录。index
:设置默认的索引文件。expires
:为静态文件设置缓存时间。fastcgi_pass
:将请求传递给 FastCGI 服务器。uwsgi_pass
:将请求传递给 uWSGI 服务器。
- 错误处理:
error_page
:指定自定义错误页面。location
(结合error_page
):定义错误页面的具体处理方式。
1 | http { |
关于请求限制速率
可以防止恶意请求和DDoS攻击。通过限制每个IP地址的请求速率,可以有效减少恶意用户和机器人对服务器的攻击,保护服务器资源。还可以优化服务器性能和资源利用率。在流量高峰期,通过控制每个IP地址的请求速率,避免单个用户占用过多资源,确保所有用户都能获得较好的访问体验
limit_req_zone
指令在 http
块中定义,它指定一个共享内存区域用于存储速率限制信息。它通常与 limit_req
指令一起使用,后者在特定的 server
或 location
块中应用速率限制。
用法:
1 | limit_req_zone key zone=name:size rate=rate; |
key
:用于区分客户端的变量,例如 $binary_remote_addr
表示客户端的 IP 地址。
zone=name:size
:共享内存区域的名称和大小,用于存储速率限制信息。
rate=rate
:指定允许的请求速率,例如 1r/s
表示每秒 1 个请求。
1 | http { |
- limit_req_zone:
$binary_remote_addr
:使用客户端的二进制远程地址作为键值。zone=one:10m
:定义一个名为one
的共享内存区域,大小为 10MB。rate=1r/s
:每秒允许一个请求。
- limit_req:
zone=one
:使用名为one
的共享内存区域。burst=5
:允许瞬间突发的请求数量。即在超出速率限制时,额外允许 5 个请求。nodelay
:立即处理突发的请求,不进行排队。
- error_page 503:
- 自定义错误页面,当请求被限制时,返回 503 状态码并显示
/rate_limit.html
页面。
- 自定义错误页面,当请求被限制时,返回 503 状态码并显示
请求连接数限制
限制连接数是一种保护服务器资源、提高安全性和稳定性的重要方法。可以通过 limit_conn_zone
和 limit_conn
指令来实现每个客户端或每个会话的最大连接数限制。
limit_conn_zone
指令用于定义一个共享内存区域,该区域将存储每个键的连接数。该指令在 http
块中定义。
1 | limit_conn_zone key zone=name:size; |
key
:用于区分客户端的变量,例如$binary_remote_addr
表示客户端的 IP 地址。zone=name:size
:共享内存区域的名称和大小,用于存储连接数信息。
limit_conn
指令用于在特定的 server
或 location
块中应用连接数限制。
1 | limit_conn zone_name number; |
zone_name
:与limit_conn_zone
中定义的共享内存区域名称一致。number
:允许的最大连接数。
限制每个客户端的连接数
在 http
块中定义共享内存区域,并在 server
或 location
块中应用连接数限制:
1 | http { |
limit_conn_zone $binary_remote_addr zone=addr:10m;
:定义了一个名为addr
的共享内存区域,大小为 10 MB,用于存储每个客户端 IP 地址的连接数。limit_conn addr 10;
:在location
块中应用连接数限制,每个客户端 IP 地址最多允许 10 个并发连接。
限制每个会话的连接数
如果希望限制特定会话(例如基于某个 cookie 值)的连接数,可以使用自定义变量:
1 | http { |
limit_conn_zone $session_id zone=session:10m;
:定义了一个名为session
的共享内存区域,大小为 10 MB,用于存储每个会话的连接数。set $session_id $cookie_sessionid;
:将客户端的会话 ID 存储在变量$session_id
中。limit_conn session 5;
:在location
块中应用连接数限制,每个会话最多允许 5 个并发连接。
了解 Nginx 中常用的变量,如 $binary_remote_addr
、$cookie_*
、$request_uri
等,用于定义连接数限制的键。
共享内存区域:了解共享内存区域的配置和管理,用于存储连接数信息。
连接数限制策略:学习不同的连接数限制策略,如按客户端 IP 地址、按会话等。
性能和安全性:理解连接数限制对服务器性能和安全性的影响,以及如何配置以防止资源滥用和攻击。
https配置
HTTPS(超文本传输安全协议,HyperText Transfer Protocol Secure)是HTTP的安全版本。它通过TLS(传输层安全协议,Transport Layer Security)来加密数据传输,从而保护数据的机密性和完整性。
1 | server { |
通过正确配置 ssl_session
相关指令,可以显著提高 Nginx 的 SSL/TLS 性能,减少握手的开销,并提高连接的安全性和稳定性。
1 | http { |