Nginx系列06(Nginx 缓存配置、SSL/TLS 配置)
目录
Nginx 缓存配置
SSL/TLS 配置
Nginx 缓存配置
- 概念:Nginx 缓存配置允许服务器将频繁访问的资源(如网页、图片、脚本等)存储在内存或磁盘中,当再次接收到相同请求时,直接从缓存中读取并返回,减少对后端服务器的请求,从而显著提高网站的响应速度和性能,降低服务器负载。
- 原理:Nginx 主要有代理缓存和 FastCGI 缓存两种缓存机制。
- 代理缓存:当 Nginx 作为反向代理时,对于后端服务器返回的响应内容,Nginx 可以根据配置将其缓存起来。当下次有相同的请求时,Nginx 直接从缓存中返回数据,而无需再次向后端服务器转发请求。代理缓存通过
proxy_cache_path
指令指定缓存存储路径,通过proxy_cache_key
指令定义缓存键(用于唯一标识缓存内容),通过proxy_cache_valid
指令设置不同响应状态码对应的缓存时间。 - FastCGI 缓存:主要用于缓存 FastCGI 程序(如 PHP 脚本)的输出结果。当 Nginx 接收到对 FastCGI 程序的请求时,会先检查缓存中是否存在对应的结果。如果存在,则直接返回缓存内容;否则,将请求转发给 FastCGI 服务器,获取结果后缓存起来并返回给客户端。FastCGI 缓存通过
fastcgi_cache_path
指令指定缓存路径,fastcgi_cache_key
指令定义缓存键,fastcgi_cache_valid
指令设置缓存时间。
- 代理缓存:当 Nginx 作为反向代理时,对于后端服务器返回的响应内容,Nginx 可以根据配置将其缓存起来。当下次有相同的请求时,Nginx 直接从缓存中返回数据,而无需再次向后端服务器转发请求。代理缓存通过
- 场景示例:
- 代理缓存示例:假设你有一个后端服务器运行在
http://backend.example.com
,你希望 Nginx 对其响应进行缓存。配置如下:
- 代理缓存示例:假设你有一个后端服务器运行在
http {
# 定义缓存路径、缓存级别、最大缓存大小等
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend.example.com;
proxy_cache my_cache; # 使用名为my_cache的缓存区域
proxy_cache_key "$uri$is_args$args"; # 定义缓存键,包含请求的URI、是否有参数及参数内容
proxy_cache_valid 200 302 60m; # 对于状态码为200和302的响应,缓存60分钟
proxy_cache_valid 404 10m; # 对于状态码为404的响应,缓存10分钟
proxy_cache_bypass $http_pragma $http_authorization; # 如果请求头中有pragma或authorization字段,则不使用缓存
proxy_cache_revalidate on; # 当缓存过期时,Nginx会向源服务器验证缓存是否仍然有效
}
}
}
在这个配置中,proxy_cache_path
指定了缓存存储在/data/nginx/cache
目录,缓存分为两级(levels=1:2
),缓存区域名为my_cache
,大小为 10MB,最大缓存空间为 10GB,60 分钟内未被访问的缓存将被清除。location /
块中,请求被代理到http://backend.example.com
,同时配置了缓存相关的参数。
- FastCGI 缓存示例:假设你有一个 PHP 应用,FastCGI 服务器运行在
127.0.0.1:9000
,你希望对 PHP 脚本的输出进行缓存。配置如下:
http {
# 定义FastCGI缓存路径
fastcgi_cache_path /data/nginx/fastcgi_cache levels=1:2 keys_zone=fastcgi_cache:10m inactive=60m;
server {
listen 80;
server_name example.com;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_cache fastcgi_cache; # 使用名为fastcgi_cache的缓存区域
fastcgi_cache_key "$uri$is_args$args"; # 定义缓存键
fastcgi_cache_valid 200 60m; # 对于状态码为200的响应,缓存60分钟
fastcgi_cache_bypass $http_pragma $http_authorization; # 如果请求头中有pragma或authorization字段,则不使用缓存
fastcgi_cache_revalidate on; # 当缓存过期时,Nginx会向FastCGI服务器验证缓存是否仍然有效
}
}
}
此配置中,fastcgi_cache_path
指定了 FastCGI 缓存的路径等相关设置。location ~ \.php$
块针对 PHP 脚本请求,配置了 FastCGI 缓存相关参数,当请求 PHP 脚本时,Nginx 会根据配置进行缓存操作。
SSL/TLS 配置
- 概念:SSL/TLS 配置用于在 Nginx 服务器上启用 HTTPS 协议,实现数据在客户端和服务器之间的加密传输,确保数据的安全性和完整性,防止数据被窃取或篡改。同时,使用 HTTPS 也有助于提升网站在搜索引擎中的排名。
- 原理:客户端与服务器在建立连接时,会进行 SSL/TLS 握手过程。服务器会向客户端发送自己的 SSL 证书,证书包含服务器的公钥等信息。客户端验证证书的合法性后,生成一个随机的对称密钥,使用服务器的公钥对其进行加密,并发送给服务器。服务器使用自己的私钥解密得到对称密钥,之后双方使用这个对称密钥进行数据加密传输。
- 场景示例:假设你已经从证书颁发机构(CA)申请了 SSL 证书,证书文件名为
example.com.crt
,私钥文件名为example.com.key
,配置如下:
http {
server {
listen 443 ssl; # 监听443端口,启用SSL
server_name example.com;
ssl_certificate /path/to/example.com.crt; # 指定SSL证书文件路径
ssl_certificate_key /path/to/example.com.key; # 指定私钥文件路径
ssl_protocols TLSv1.2 TLSv1.3; # 启用TLSv1.2和TLSv1.3协议,建议只启用较新的安全协议
ssl_ciphers ECDHE - RSA - AES256 - GCM - SHA512:DHE - RSA - AES256 - GCM - SHA512:ECDHE - RSA - AES256 - GCM - SHA384:DHE - RSA - AES256 - GCM - SHA384:ECDHE - RSA - AES128 - GCM - SHA256:DHE - RSA - AES128 - GCM - SHA256; # 设置加密算法
ssl_prefer_server_ciphers on; # 优先使用服务器端的加密算法配置
ssl_session_cache shared:SSL:10m; # 设置SSL会话缓存,大小为10MB
ssl_session_timeout 10m; # 设置SSL会话超时时间为10分钟
location / {
# 网站的其他配置,如代理、静态文件服务等
}
}
}
在这个配置中,server
块监听 443 端口并启用 SSL,通过ssl_certificate
和ssl_certificate_key
指定证书和私钥路径。同时配置了 SSL 协议版本、加密算法、会话缓存等参数,以确保安全且高效的 HTTPS 连接。