关于caddy:基于-Caddy-反向代理盘古业务网关节点

本文以部署盘古 Admin 在线演示零碎为例解说如何基于 Caddy 部署盘古 Admin 的动态资源和 Web 节点(业务网关)。 部署成果:https://pangu-admin.pulanit.com 充当 WebServer 部署我的项目动态网站。充当流量网关方向代理后端的 Web 节点(业务网关)。全站主动 SSL。蕴含动态网站和 API 申请。解决跨域申请;解决前端 https 后端 http 的协定适配问题。nginx 也能够做同样的事件。解析二级域名登录域名服务商控制台,增加一条二级域名 pangu-admin.pulanit.com 的解析记录。 批改配置文件# vi /etc/caddy/Caddyfilepangu-admin.pulanit.com { # Set this path to your site's directory. root * /var/www/pangu-admin encode gzip # Enable the static file server. file_server # Another common task is to set up a reverse proxy: reverse_proxy /api/* { # 能够指定多个后端业务网关 WEB 节点 to localhost:8080 }}动态资源文件上传到目录:/var/www/pangu-admin。后端 Dubbo 微服务集群的部署不在本文探讨范畴,本文仅通过 Caddy 方向情理后端业务网关。通过如上配置,网站和 API 主动都领有了 https 的能力。上述部署构造,使得动态网站和 API 处于同一域名下,解决了跨域的问题。但如果 API 须要反向代理到不同的端口下或者域名下,则能够设置业务网关的参数开启跨域反对,也能够在 Caddy 配置文件配置响应头参数以反对跨域拜访。彩蛋盘古开发框架 是一套轻量持重的工业级 Web 接口服务和中后盾业务零碎开发框架。 ...

December 19, 2022 · 1 min · jiezi

caddy四Run详解

caddy(四)Run详解 前言平时我们使用 caddy 都是使用 它的 二进制 分发文件,我们现在来分析 caddy 的 Run 函数。从最外层抽象的看它都做了些什么。 Caddy Run我们来看看 Caddy Run 中引入了哪些包和操作,对 Caddy 的总体行为做一个概览caddy/caddymain/run.go首先看 init 函数 func init() { caddy.TrapSignals() flag.BoolVar(&certmagic.Default.Agreed, "agree", false, "Agree to the CA's Subscriber Agreement") flag.StringVar(&certmagic.Default.CA, "ca", certmagic.Default.CA, "URL to certificate authority's ACME server directory") flag.StringVar(&certmagic.Default.DefaultServerName, "default-sni", certmagic.Default.DefaultServerName, "If a ClientHello ServerName is empty, use this ServerName to choose a TLS certificate") flag.BoolVar(&certmagic.Default.DisableHTTPChallenge, "disable-http-challenge", certmagic.Default.DisableHTTPChallenge, "Disable the ACME HTTP challenge") flag.BoolVar(&certmagic.Default.DisableTLSALPNChallenge, "disable-tls-alpn-challenge", certmagic.Default.DisableTLSALPNChallenge, "Disable the ACME TLS-ALPN challenge") flag.StringVar(&certmagic.Default.Email, "email", "", "Default ACME CA account email address") flag.DurationVar(&certmagic.HTTPTimeout, "catimeout", certmagic.HTTPTimeout, "Default ACME CA HTTP timeout") flag.StringVar(&revoke, "revoke", "", "Hostname for which to revoke the certificate") flag.StringVar(&disabledMetrics, "disabled-metrics", "", "Comma-separated list of telemetry metrics to disable") flag.StringVar(&conf, "conf", "", "Caddyfile to load (default \""+caddy.DefaultConfigFile+"\")") flag.StringVar(&cpu, "cpu", "100%", "CPU cap") flag.BoolVar(&printEnv, "env", false, "Enable to print environment variables") flag.StringVar(&envFile, "envfile", "", "Path to file with environment variables to load in KEY=VALUE format") flag.BoolVar(&fromJSON, "json-to-caddyfile", false, "From JSON stdin to Caddyfile stdout") flag.BoolVar(&toJSON, "caddyfile-to-json", false, "From Caddyfile stdin to JSON stdout") flag.BoolVar(&plugins, "plugins", false, "List installed plugins") flag.StringVar(&logfile, "log", "", "Process log file") flag.IntVar(&logRollMB, "log-roll-mb", 100, "Roll process log when it reaches this many megabytes (0 to disable rolling)") flag.BoolVar(&logRollCompress, "log-roll-compress", true, "Gzip-compress rolled process log files") flag.StringVar(&caddy.PidFile, "pidfile", "", "Path to write pid file") flag.BoolVar(&caddy.Quiet, "quiet", false, "Quiet mode (no initialization output)") flag.StringVar(&serverType, "type", "http", "Type of server to run") flag.BoolVar(&version, "version", false, "Show version") flag.BoolVar(&validate, "validate", false, "Parse the Caddyfile but do not start the server") caddy.RegisterCaddyfileLoader("flag", caddy.LoaderFunc(confLoader)) caddy.SetDefaultCaddyfileLoader("default", caddy.LoaderFunc(defaultLoader))}然后我们来看 Run() 函数 ...

August 20, 2019 · 5 min · jiezi

最低成本搭建-golang-透明代理

目标由于众所周知的原因,golang.org 无法直接访问,golang 文档和安装包无法下载,golang.org/x/net 等官方包无法下载。 常见解决方案是无脑挂代理,解决一切问题,但为了以最小成本解决,我折腾出了这种方法,完全本机运行,无需外部代理和额外的服务器。是不是很爽? 思路其实有官方镜像可以用: golang.org:https://golang.google.cn/官方包:https://github.com/golang/在本机自建 https 透明代理服务,通过 hosts 把 golang.org 解析到本机,代理服务再去请求镜像站。 这里就有另一个需要解决的问题,如 golang.org/x/net 包,经过透明代理后,实际访问的网址是 https://golang.google.cn/x/net。虽然这个网址直接打开没问题,但并不能通过 go get 拉取到包。原因可以看网页源码,里面其实记录了一个跳转网址,告诉 go get 工具,应该到 https://go.googlesource.com/net 拉取源码。很不幸,go.googlesource.com 也无法访问,但可以用官方 github 镜像代替:https://github.com/golang/net。 https 自签证书这个教程已经遍地都是了,我这里就直接上代码了。由于我的电脑系统是 win10,这些命令其实是在 wsl 中执行的。 # 创建工作目录mkdir ~/sslcd ~/ssl# CA 证书openssl genrsa -des3 -out ca.key 2048openssl req -sha256 -new -x509 -days 365 -key ca.key -out ca.crt \ -subj "/C=CN/ST=HN/L=XC/O=wzv5/OU=wzv5/CN=wzv5Root"# 这里会提示输入密码,记好密码,之后要用# 要制作的证书名字及 DNSexport KEYNAME=golangexport DNSNAME="DNS:golang.org,DNS:go.googlesource.com"# 创建 https 证书openssl genrsa -des3 -out $KEYNAME.key 2048# 这里会提示输入密码,随便输一个openssl rsa -in $KEYNAME.key -out $KEYNAME.key# 输入上一步的密码,这行命令其实是用来清除密码的openssl req -new \ -sha256 \ -key $KEYNAME.key \ -out $KEYNAME.csr \ -subj "/C=CN/ST=HN/L=XC/O=wzv5/OU=wzv5/CN=$KEYNAME"openssl x509 -req \ -days 365 -sha256 \ -CA ca.crt \ -CAkey ca.key \ -in $KEYNAME.csr \ -out $KEYNAME.crt \ -extensions SAN \ -extfile <(printf "[SAN]\nsubjectAltName=$DNSNAME")# 这里会要求输入 CA 证书的密码我们只需要 .crt 和 .key 文件,前者是公钥,后者是私钥。 ...

June 16, 2019 · 2 min · jiezi