结丹期
8. Nginx 如何处理负载均衡?常见的负载均衡策略有哪些?
Nginx 是一个高性能的反向代理服务器,它可以通过 负载均衡 将请求分发给多个后端服务器,以提升性能和容错能力。
Nginx 支持多种负载均衡策略,常见的有以下几种:
轮询:默认策略,依次将请求均匀分配给每个后端服务器。
upstream backend { server backend1.example.com; server backend2.example.com; } server { location / { proxy_pass http://backend; } }权重:可以为每个后端服务器设置权重,权重越高,接收到的请求越多。
upstream backend { server backend1.example.com weight=3; server backend2.example.com weight=1; }最少连接:将请求发送给当前处理连接数最少的服务器,适用于长连接的场景。
upstream backend { least_conn; server backend1.example.com; server backend2.example.com; }IP 哈希:根据客户端
IP地址分配请求,使得同一IP地址的请求始终发送到同一个后端服务器。upstream backend { ip_hash; server backend1.example.com; server backend2.example.com; }
9. Nginx 中的 location 块是什么?如何根据 URL 路径匹配请求?
location 块 用于指定如何处理与特定 URL 路径匹配的请求。
location 指令可以根据 URL 的前缀或正则表达式匹配来确定将请求路由到哪个处理块。
前缀匹配:
匹配以某个前缀开头的
URL路径。location /images/ { root /data/images; }所有以
/images/开头的 URL 将在/data/images目录下查找文件。
精确匹配
用
=来实现完全匹配。location = /login { proxy_pass http://backend/login; }只有完全匹配
/login的请求会被处理。
正则表达式匹配
使用
~表示区分大小写的正则匹配,~*表示不区分大小写。location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; }所有以
.php结尾的请求将交给 FastCGI 处理。
优先级
- Nginx 会根据精确匹配、前缀匹配和正则匹配的顺序来处理请求。先匹配精确,后匹配前缀,再匹配正则。
10. 如何在 Nginx 中配置 SSL 以支持 HTTPS?
生成或获取 SSL 证书和私钥
- 可以使用
Let’s Encrypt免费获取证书,或者从认证机构购买证书。
在 Nginx 配置文件中启用 SSL
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
root /var/www/html;
index index.html;
}
}
listen 443 ssl:表示监听HTTPS请求的443端口,并启用SSL。ssl_certificate和ssl_certificate_key:分别指定SSL证书和私钥的路径。ssl_protocols:指定使用的SSL/TLS协议版本。ssl_ciphers:指定安全加密套件。
HTTP 到 HTTPS 重定向:
server {
listen 80;
server_name example.com;
# 将 HTTP 请求重定向到 HTTPS。
return 301 https://$host$request_uri;
}
11. 如何在 Nginx 中设置缓存?Nginx 缓存的常见应用场景有哪些?
Nginx 通过 代理缓存 或 静态文件缓存 来提升性能,减少后端服务器的负担。
Nginx 可以缓存后端服务器的响应数据,当再次请求相同的内容时,直接从缓存中返回,避免重复访问后端。
配置 Nginx 缓存的示例
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m;
server {
location / {
proxy_cache my_cache;
proxy_pass http://backend_server;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
}
}
proxy_cache_path:定义缓存存储的位置和参数,如keys_zone表示缓存区域大小,max_size限制缓存大小为1GB。proxy_cache:在location中启用缓存。proxy_cache_valid:指定缓存不同状态码的有效期,如200和302状态的响应缓存10分钟。
常见的缓存应用场景
静态文件缓存:如图片、
CSS、JS等文件,缓存这些资源可以大幅减少服务器负载。API 响应缓存:对频繁访问的
API响应进行缓存,减轻后端应用的压力。代理缓存:在反向代理场景下缓存后端服务器的响应,提高响应速度。
12. Nginx 中的 upstream 指令是什么?如何使用它来配置后端服务器组?
upstream 指令 用于定义后端服务器组,Nginx 可以将请求分发到多个后端服务器,从而实现负载均衡和高可用性。
配置 upstream 指令的示例
upstream backend_servers {
server backend1.example.com;
server backend2.example.com;
}
server {
location / {
proxy_pass http://backend_servers;
}
}
upstream backend_servers:定义了一个名为backend_servers的后端服务器组,包括backend1和backend2。proxy_pass:将请求转发给后端服务器组。
作用
实现负载均衡,将请求分发给多个后端服务器。
提供高可用性,当某个服务器出现故障时,
Nginx会自动将请求转发到可用的服务器。
13. 如何在 Nginx 中限制请求速率?
Nginx 提供了 限速 功能,用于限制客户端的请求速率,以防止恶意访问或过载攻击。
配置请求速率限制示例
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;
server {
location / {
limit_req zone=one burst=10 nodelay;
proxy_pass http://backend_server;
}
}
}
limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s:根据客户端IP地址定义速率限制,最大允许5个请求/秒。limit_req:在location中启用限速,burst=10表示允许短时突发请求最多10个,nodelay表示立即处理突发请求。
作用
防止某些用户恶意请求导致服务器过载。
保护后端服务器,减少流量激增带来的压力。
14. 如何在 Nginx 中设置访问控制,允许或拒绝特定 IP 的访问?
Nginx 提供了 访问控制列表(ACL),可以通过 allow 和 deny 指令来控制对特定 IP 地址的访问权限。
我们可以允许或拒绝某些 IP 或 IP 段的访问,从而增强安全性。
配置访问控制示例
server {
listen 80;
server_name example.com;
location / {
# 允许特定的 IP 地址访问
allow 192.168.1.10;
allow 192.168.1.0/24; # 允许特定的 IP 段
deny all; # 拒绝所有其他 IP 访问
root /var/www/html;
index index.html;
}
}
allow 192.168.1.10:允许 IP 地址192.168.1.10访问该服务器。allow 192.168.1.0/24:允许 IP 段192.168.1.0/24的所有地址访问。deny all:拒绝所有未在allow列表中的IP访问。
作用
可以用于限制某些敏感区域的访问(如管理后台),只允许特定
IP或IP段访问。提升系统的安全性,阻止未授权用户的访问。
注意
allow和deny的顺序很重要,Nginx会按照配置的顺序进行匹配,一旦找到匹配的规则,就不会再继续检查后续规则。如果需要精细化的访问控制,可以根据不同的
location块为不同路径配置不同的IP访问权限。