# 反向代理（Reverse Proxy）是什么？

> 反向代理是代表后端服务器接收客户端连接、再把请求转发给后端的服务器，通常同时承担 TLS 终止。

Source: https://ssl.sh/zh/glossary/reverse-proxy/
Last updated: 2026-11-10

反向代理代表一台或多台后端服务器接收客户端连接，再把每个请求转发到合适的后端。客户端只看得到代理的地址和证书。Nginx、HAProxy、Apache、Caddy、Envoy、CDN 和云负载均衡都经常扮演这个角色，宝塔面板里的“反向代理”功能本质上也是生成 Nginx 配置。它与正向代理相反，正向代理是替客户端去访问外部服务器。

## 为什么重要
大多数 HTTPS 部署都在反向代理上做 [TLS 终止](https://ssl.sh/zh/glossary/tls-termination/)：证书集中放在一处，统一控制协议版本和 [HSTS](https://ssl.sh/zh/glossary/hsts/)，把 HTTP 跳转到 HTTPS，后端在内网里只跑明文 HTTP。代理还要把后端看不到的信息转交过去：原始 Host、客户端 IP 和原始协议。缺少 `X-Forwarded-Proto` 时，很多框架会以为请求走的是 HTTP，于是生成 `http://` 链接或陷入重定向循环。代理上常见的证书错误有两个：只配了叶子证书而不是[完整证书链](https://ssl.sh/zh/glossary/fullchain/)，以及证书和私钥不配对。

## 例子
```nginx
server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    http2 on;
    server_name example.com;
    ssl_certificate     /etc/ssl/example.com/fullchain.pem;
    ssl_certificate_key /etc/ssl/example.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:8080;
        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;
    }
}
```

## 常见误区
- **后端应用也要装证书。** 只有终止 TLS 的组件需要证书，除非代理到后端还要重新加密。
- **后端能看到访客的真实 IP。** 后端看到的是代理的地址，除非代理转交了客户端 IP，且后端只信任来自代理的这个请求头。
- **反向代理和正向代理是一回事。** 正向代理服务于向外访问的客户端，反向代理服务于访问网站的访客。

## 相关术语

- [TLS 终止](https://ssl.sh/zh/glossary/tls-termination/): TLS 终止是指网络路径上客户端 TLS 连接结束并被解密的位置，可以是 CDN 边缘、负载均衡、反向代理，也可以是应用服务器本身。
- [SSL 卸载](https://ssl.sh/zh/glossary/ssl-offloading/): SSL 卸载是把 TLS 握手和加解密的计算工作从应用服务器转移到专门的代理、负载均衡或硬件设备上。
- [HSTS](https://ssl.sh/zh/glossary/hsts/): HSTS 是一个 HTTP 响应头，告诉浏览器在指定时间内只通过 HTTPS 访问该站点，并且遇到证书错误时不允许用户继续访问。
- [fullchain](https://ssl.sh/zh/glossary/fullchain/): fullchain 是依次包含站点证书和中间证书的 PEM 文件，让客户端能把站点证书连到受信任的根证书。
- [SNI](https://ssl.sh/zh/glossary/sni/): SNI 是 TLS 的一个扩展，客户端在 ClientHello 中写明要访问的域名，使同一个 IP 能为多个 HTTPS 站点分别返回各自的证书。
- [混合内容](https://ssl.sh/zh/glossary/mixed-content/): 混合内容是指通过 HTTPS 加载的页面中，部分脚本、图片、iframe 等子资源仍通过明文 HTTP 加载，削弱了整个页面的安全性。
