【Nginx 入门】Nginx 反向代理
系列文章目录
【Nginx 入门】1、Nginx 简介
【Nginx 入门】2、Nginx 安装与基本配置
【Nginx 入门】3、Nginx 基本命令
【Nginx 入门】4、Nginx 配置语法
【Nginx 入门】5、Nginx 处理请求的流程
【Nginx 入门】6、Nginx 反向代理(本文)
【Nginx 入门】7、静态文件服务
【Nginx 入门】8、Nginx 日志管理
反向代理是 Nginx 最常用的功能之一,它可以作为客户端和服务器之间的中间人,接收客户端的请求并将其转发给后端服务器处理。Nginx 反向代理不仅可以隐藏后端服务器的真实地址,还可以实现负载均衡、缓存和安全防护等功能。
1. 什么是反向代理?
反向代理服务器位于客户端和后端服务器之间,客户端的请求首先到达反向代理服务器,然后由反向代理服务器将请求转发给后端服务器处理,最后将后端服务器的响应返回给客户端。
1.1 反向代理的优势
- 隐藏后端服务器:反向代理可以隐藏后端服务器的真实地址,增强安全性。
- 负载均衡:反向代理可以将请求分发到多台后端服务器,减轻单台服务器的压力。
- 缓存:反向代理可以缓存后端服务器的响应,提高响应速度和减少后端服务器的负载。
- SSL 卸载:反向代理可以处理 SSL/TLS 加密,减轻后端服务器的负担。
2. 配置反向代理
2.1 基本配置
下面是一个简单的 Nginx 反向代理配置示例:
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;
}
}
在这个配置中:
listen 80;
:Nginx 监听 80 端口。server_name example.com;
:为example.com
配置虚拟主机。location /
:匹配所有 URI。proxy_pass http://backend_server;
:将请求转发到后端服务器http://backend_server
。proxy_set_header
指令:设置传递到后端服务器的请求头。
2.2 负载均衡配置
Nginx 支持多种负载均衡策略,如轮询、最少连接和 IP 哈希。下面是一个配置示例:
upstream backend {
server backend1.example.com;
server backend2.example.com;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
在这个配置中:
upstream backend
定义了一个后端服务器组,包括backend1.example.com
和backend2.example.com
。proxy_pass http://backend;
:将请求转发到后端服务器组backend
,Nginx 会自动进行负载均衡。
2.3 更高级的负载均衡策略
2.3.1 最少连接负载均衡
最少连接策略将新请求分配给当前活动连接最少的服务器:
upstream backend {
least_conn;
server backend1.example.com;
server backend2.example.com;
}
2.3.2 IP 哈希负载均衡
IP 哈希策略根据客户端 IP 地址分配请求,确保来自同一客户端的请求总是分配到同一台服务器:
upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
}
3. 配置缓存
Nginx 反向代理可以配置缓存来存储后端服务器的响应,提高响应速度和减少后端服务器的负载。下面是一个配置示例:
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
server {
listen 80;
server_name example.com;
location / {
proxy_cache my_cache;
proxy_pass http://backend_server;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
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_cache_path
定义了缓存路径、缓存区域大小和其他参数。proxy_cache my_cache;
:启用缓存。proxy_cache_valid
指令:定义缓存的有效时间。
4. SSL 卸载
Nginx 可以处理 SSL/TLS 加密,解除后端服务器的加密负担。下面是一个配置示例:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
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;
}
}
在这个配置中:
listen 443 ssl;
:Nginx 监听 443 端口并启用 SSL。ssl_certificate
和ssl_certificate_key
指定了 SSL 证书和私钥的路径。
5. 完整示例
下面是一个完整的 Nginx 反向代理配置示例,包括负载均衡、缓存和 SSL 卸载:
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
upstream backend {
least_conn;
server backend1.example.com;
server backend2.example.com;
}
server {
listen 80;
server_name example.com;
location / {
proxy_cache my_cache;
proxy_pass http://backend;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
location / {
proxy_cache my_cache;
proxy_pass http://backend;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
6. 常用反向代理指令
proxy_pass
将请求转发到后端服务器。例如:
location / {
proxy_pass http://backend_server;
}
proxy_set_header
设置传递到后端服务器的请求头。例如:
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_cache
启用缓存。例如:
proxy_cache my_cache;
proxy_cache_valid
设置缓存的有效时间。例如:
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
7. 总结
在本章中,我们详细介绍了 Nginx 反向代理的配置,包括基本配置、负载均衡、缓存和 SSL 卸载。通过这些配置,你可以充分利用 Nginx 的反向代理功能,提高网站的性能和安全性。在接下来的教程中,我们将探讨 Nginx 的静态文件服务,敬请期待!