为什么要用反向代理?常见的那几款
服务器上跑几个服务,每个都占一个端口:网盘 3000,博客 4000,接口 5000。要是把这三个端口全开到公网上,不好记,也不放心。
反向代理就是来解决这个问题的。外面只开一个门,请求先到它这里,它再按域名或路径分给后面的服务。
它到底干了什么
用户访问 blog.example.com,DNS 指到这台服务器。反向代理听着 80 和 443 端口,看到请求里的域名是 blog.example.com,就转给本机 4000;看到 api.example.com,就转给 5000。
用户那边感觉不到后面有几台机器、开了几个端口,看到的只是一个域名。
为什么要用
只暴露一个入口。 80 和 443 对外开放,后面那些服务只监听 127.0.0.1 或内网地址。
HTTPS 只配一次。 证书装在反代上,后面的服务继续跑 HTTP,不用每个服务都折腾一遍证书。
一个域名挂多个服务。 可以按子域名分,blog. 一个、api. 一个;也可以按路径分,/notes、/api 各走各的。
后端随便换。 服务从 3000 挪到 3100,只改反代里的一行,用户那边没感觉。
分流。 同一个服务起了三台,反代轮流把请求发过去。
统一加东西。 缓存、压缩、限流、IP 白名单、访问日志,都放在这一层做。
常见的三款
-
Nginx:2002 年由 Igor Sysoev 开发,2004 年开源,最早是为了扛住上万个并发连接。2019 年被 F5 以 6.7 亿美元收购,开源版一直在。配置是手写文本,功能全、资料多,HTTPS 要自己配 certbot 之类的工具。
-
Caddy:Go 写的,最大的特点是自动 HTTPS。给它一个域名,它自己去 Let’s Encrypt 或 ZeroSSL 申请证书并续期。配置就几行:
blog.example.com { reverse_proxy localhost:4000 }支持 HTTP/1、HTTP/2、HTTP/3,WebSocket、gRPC、FastCGI 也能转。
-
Apache httpd:比 Nginx 还老,1995 年就有了。用
mod_proxy做反代,老项目和共享主机上还很多,.htaccess那一套只有它熟。
一张表放一起看:
| 工具 | 语言 | 上手 | 自动 HTTPS | 适合 |
|---|---|---|---|---|
| Nginx | C | 中 | 要另配 | 通用、资料最多 |
| Caddy | Go | 低 | 自带 | 个人项目、小站 |
| Apache httpd | C | 中 | 要另配 | 老项目、.htaccess |
怎么选
想省事:Caddy。
已经会 Nginx,或者要抄别人的配置:Nginx。
老项目、依赖 .htaccess:Apache。
我这边
服务器上用的是 Nginx,systemd 管着,前面挡着应用,证书用 certbot 申请和续期。Caddy 和 Apache 只读过文档,没在这台机器上实际部署过,上面关于它们的内容是按官方文档整理的。
- 点赞
- 收藏
- 关注作者
评论(0)