【Nginx 入门】6、Nginx 反向代理

【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.combackend2.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_certificatessl_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 的静态文件服务,敬请期待!

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值