nginx反向代理及负载均衡
nginx反向代理及负载均衡
反向代理
以下是一个简单的 Nginx 反向代理配置示例:
1
2
3
4
5
6
7
8
9
10
11
12
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
proxy_pass
:将请求转发到指定的后端服务器。proxy_set_header
:设置传递给后端服务器的 HTTP 头部信息。
负载均衡
负载均衡将网络请求分发到多个服务器上,以实现系统的高可用。
负载均衡的策略:
- 轮询(Round Robin):依次将请求分发到每个服务器。
- 最少连接(Least Connections):将请求分发到当前连接数最少的服务器。
- IP 哈希(IP Hash):根据客户端 IP 地址的哈希值分发请求,保证同一客户端的请求被分发到同一服务器。
以下是一个 Nginx 负载均衡配置示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
http {
upstream backend_servers {
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}
upstream
:定义一个上游服务器组。server
:指定上游服务器地址。
使用不同负载均衡策略:
- 轮询(默认):
1 2 3 4 5
upstream backend_servers { server backend1.example.com; server backend2.example.com; server backend3.example.com; }
- 最少连接:
1 2 3 4 5 6
upstream backend_servers { least_conn; server backend1.example.com; server backend2.example.com; server backend3.example.com; }
- IP 哈希:
1 2 3 4 5 6
upstream backend_servers { ip_hash; server backend1.example.com; server backend2.example.com; server backend3.example.com; }
高级配置与优化
-
健康检查: 使用
ngx_http_upstream_module
的health_check
指令进行健康检查。1 2 3 4 5 6
upstream backend_servers { server backend1.example.com; server backend2.example.com; server backend3.example.com; health_check; }
-
缓存配置: 使用
proxy_cache
指令缓存后端服务器的响应。1 2 3 4 5 6 7 8 9 10
proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off; server { location / { proxy_pass http://backend_servers; proxy_cache my_cache; proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m; } }
-
SSL/TLS 配置: 在反向代理服务器上处理 SSL/TLS 加密。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
server { listen 443 ssl; server_name example.com; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; location / { proxy_pass http://backend_servers; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
本文由作者按照
CC BY 4.0
进行授权