跳至主要內容

反向代理

2023年11月16日大约 3 分钟教程推荐Linux

反向代理

一个系统可能有一堆服务器,一台服务器上可能运行着一堆服务。反代是一种中间件,将不同请求转发到不同服务上,兼顾了加密,负载均衡等。more

caddy

caddy 是一个更年轻的工具,提供非常简单的语法和自动 https(自动签证书)。

能有多简单呢,例如我需要部署一个静态站点(用于 vps 伪装),只需要在 /etc/caddy/Caddyfile 中写入:

<域名> {
  root * <(静态)资源路径>
  file_server
}

然后启动 caddy 服务即可。

这个配置文件可以将 http 自动重定向到 https,并且不用自己签证书。

如果要用自己的证书就加一句 tls <crt> <key> 即可。

而我在 nginx 上得自己用 acme.sh 签证书,然后写一大坨的配置文件,还得去看看 nginx 命令行用法,signal 有哪些,才能把我的网站搞好。

反代也很简单,只需将 file_server 换成 reverse_proxy :8000(端口号)。

caddy 最大的问题是性能,因此不适合在高并发环境下使用。

日志

caddy 默认将日志输出 stderr,可以用 journalctl 查看。但也可以将其输出至文件,或者按域名分流日志等。

{
  log default {
    output file <file_path>
  }
}

更具体的应用请参考文档:log 参数 | 全局 log default

其他资料

nginx

Nginx 502 bad gateway 😦 nginx 是老牌反代大哥了,但是它其实不是今天&这里的主角()。

Several features that are free (in caddy) which cost money in nginx. 😦

nginx 的 quic 还是 module。 NGINX now officially supports HTTP/3 with QUIC. It is available as part of NGINX 1.25.1 mainline version for open source users and NGINX Plus R30 for enterprise customers.

所以到底如何选

观点:激进派

虽然 go 写的 caddy 性能可能比纯 c 写的、经过时间检验的 nginx 差,但是流量不大的情况下真的缺那点性能吗?nginx 那坨配置我得上 gpt 才能勉强懂,折腾技术还是用尽可能简单的,减少自己精神内耗的比较好。选择 caddy 是在为自己的脑子着想,兄弟。

因此在自己搞着玩的小流量服务器上用 caddy 准没错。

目前 caddy 在 github 上有 50k star,也侧面反映了 caddy 的优秀。

遇到的问题

caddy 无法建立连接

我想开一个 file server,静态文件没有任何问题(就是我的 blog)。然而 caddy 开了以后一访问就是 js 执行错误。我也用 nginx 试了一下,是可用的。

手动 caddy run 却是好的,可能是 service 出了问题。

ERR_ADDRESS_UNREACHABLE

用 caddy 和 nginx 都试了一遍,浏览器访问 ERRADDRESS_UNREACHABLE,本地访问 403,说明不是防火墙的问题。nginx 有报错 _13: Permission denied,然后搜一下发现需要 chmod +x <root>。加了以后还是没用,原来 root 的全路径都需要 chmod +x。。问题解决。

external

  1. reddit: Caddy vs Nginx: How Do These Web Servers / Reverse Proxies Compare?
  2. Why Caddy 2 over NGINX