mirror of
https://github.com/caddyserver/caddy.git
synced 2025-02-08 17:16:36 +01:00
add caddyfile implementation
Signed-off-by: Mohammed Al Sahaf <msaa1990@gmail.com>
This commit is contained in:
parent
6836afbd28
commit
18cd1c0525
5 changed files with 138 additions and 22 deletions
|
@ -0,0 +1,40 @@
|
||||||
|
:8884
|
||||||
|
reverse_proxy 127.0.0.1:65535 {
|
||||||
|
transport http {
|
||||||
|
forward_proxy none
|
||||||
|
}
|
||||||
|
}
|
||||||
|
----------
|
||||||
|
{
|
||||||
|
"apps": {
|
||||||
|
"http": {
|
||||||
|
"servers": {
|
||||||
|
"srv0": {
|
||||||
|
"listen": [
|
||||||
|
":8884"
|
||||||
|
],
|
||||||
|
"routes": [
|
||||||
|
{
|
||||||
|
"handle": [
|
||||||
|
{
|
||||||
|
"handler": "reverse_proxy",
|
||||||
|
"transport": {
|
||||||
|
"network_proxy": {
|
||||||
|
"from": "none"
|
||||||
|
},
|
||||||
|
"protocol": "http"
|
||||||
|
},
|
||||||
|
"upstreams": [
|
||||||
|
{
|
||||||
|
"dial": "127.0.0.1:65535"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,41 @@
|
||||||
|
:8884
|
||||||
|
reverse_proxy 127.0.0.1:65535 {
|
||||||
|
transport http {
|
||||||
|
forward_proxy url http://localhost:8080
|
||||||
|
}
|
||||||
|
}
|
||||||
|
----------
|
||||||
|
{
|
||||||
|
"apps": {
|
||||||
|
"http": {
|
||||||
|
"servers": {
|
||||||
|
"srv0": {
|
||||||
|
"listen": [
|
||||||
|
":8884"
|
||||||
|
],
|
||||||
|
"routes": [
|
||||||
|
{
|
||||||
|
"handle": [
|
||||||
|
{
|
||||||
|
"handler": "reverse_proxy",
|
||||||
|
"transport": {
|
||||||
|
"network_proxy": {
|
||||||
|
"from": "url",
|
||||||
|
"url": "http://localhost:8080"
|
||||||
|
},
|
||||||
|
"protocol": "http"
|
||||||
|
},
|
||||||
|
"upstreams": [
|
||||||
|
{
|
||||||
|
"dial": "127.0.0.1:65535"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1074,6 +1074,22 @@ func (h *HTTPTransport) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
|
||||||
}
|
}
|
||||||
h.ForwardProxyURL = d.Val()
|
h.ForwardProxyURL = d.Val()
|
||||||
|
|
||||||
|
case "forward_proxy":
|
||||||
|
if !d.NextArg() {
|
||||||
|
return d.ArgErr()
|
||||||
|
}
|
||||||
|
modStem := d.Val()
|
||||||
|
modID := "caddy.network_proxy.source." + modStem
|
||||||
|
unm, err := caddyfile.UnmarshalModule(d, modID)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
// TODO: should we validate here?
|
||||||
|
// ca, ok := unm.(caddy.ProxyFuncProducer)
|
||||||
|
// if !ok {
|
||||||
|
// return d.Errf("module %s is not a caddy.ProxyFuncProducer", modID)
|
||||||
|
// }
|
||||||
|
h.NetworkProxyRaw = caddyconfig.JSONModuleObject(unm, "from", modStem, nil)
|
||||||
case "dial_timeout":
|
case "dial_timeout":
|
||||||
if !d.NextArg() {
|
if !d.NextArg() {
|
||||||
return d.ArgErr()
|
return d.ArgErr()
|
||||||
|
|
3
modules/caddytls/proxy.go
Normal file
3
modules/caddytls/proxy.go
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
package caddytls
|
||||||
|
|
||||||
|
import _ "github.com/caddyserver/caddy/v2/modules/internal/network"
|
|
@ -1,4 +1,4 @@
|
||||||
package standard
|
package network
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
@ -9,28 +9,12 @@ import (
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
|
|
||||||
"github.com/caddyserver/caddy/v2"
|
"github.com/caddyserver/caddy/v2"
|
||||||
|
"github.com/caddyserver/caddy/v2/caddyconfig/caddyfile"
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
caddy.RegisterModule(ProxyFromEnvironment{})
|
|
||||||
caddy.RegisterModule(ProxyFromURL{})
|
caddy.RegisterModule(ProxyFromURL{})
|
||||||
}
|
caddy.RegisterModule(ProxyFromNone{})
|
||||||
|
|
||||||
type ProxyFromEnvironment struct{}
|
|
||||||
|
|
||||||
// ProxyFunc implements ProxyFuncProducer.
|
|
||||||
func (p ProxyFromEnvironment) ProxyFunc() func(*http.Request) (*url.URL, error) {
|
|
||||||
return http.ProxyFromEnvironment
|
|
||||||
}
|
|
||||||
|
|
||||||
// CaddyModule implements Module.
|
|
||||||
func (p ProxyFromEnvironment) CaddyModule() caddy.ModuleInfo {
|
|
||||||
return caddy.ModuleInfo{
|
|
||||||
ID: "caddy.network_proxy.source.environment",
|
|
||||||
New: func() caddy.Module {
|
|
||||||
return ProxyFromEnvironment{}
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type ProxyFromURL struct {
|
type ProxyFromURL struct {
|
||||||
|
@ -111,16 +95,48 @@ func (p ProxyFromURL) ProxyFunc() func(*http.Request) (*url.URL, error) {
|
||||||
return pUrl, err
|
return pUrl, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return func(*http.Request) (*url.URL, error) {
|
return func(r *http.Request) (*url.URL, error) {
|
||||||
return url.Parse(p.URL)
|
return url.Parse(p.URL)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UnmarshalCaddyfile implements caddyfile.Unmarshaler.
|
||||||
|
func (p *ProxyFromURL) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
|
||||||
|
d.Next()
|
||||||
|
d.Next()
|
||||||
|
p.URL = d.Val()
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type ProxyFromNone struct{}
|
||||||
|
|
||||||
|
func (p ProxyFromNone) CaddyModule() caddy.ModuleInfo {
|
||||||
|
return caddy.ModuleInfo{
|
||||||
|
ID: "caddy.network_proxy.source.none",
|
||||||
|
New: func() caddy.Module {
|
||||||
|
return &ProxyFromNone{}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalCaddyfile implements caddyfile.Unmarshaler.
|
||||||
|
func (p ProxyFromNone) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// ProxyFunc implements ProxyFuncProducer.
|
||||||
|
func (p ProxyFromNone) ProxyFunc() func(*http.Request) (*url.URL, error) {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
_ caddy.Module = ProxyFromEnvironment{}
|
|
||||||
_ caddy.ProxyFuncProducer = ProxyFromEnvironment{}
|
|
||||||
_ caddy.Module = ProxyFromURL{}
|
_ caddy.Module = ProxyFromURL{}
|
||||||
_ caddy.Provisioner = &ProxyFromURL{}
|
_ caddy.Provisioner = &ProxyFromURL{}
|
||||||
_ caddy.Validator = ProxyFromURL{}
|
_ caddy.Validator = ProxyFromURL{}
|
||||||
_ caddy.ProxyFuncProducer = ProxyFromURL{}
|
_ caddy.ProxyFuncProducer = ProxyFromURL{}
|
||||||
|
_ caddyfile.Unmarshaler = &ProxyFromURL{}
|
||||||
|
|
||||||
|
_ caddy.Module = ProxyFromNone{}
|
||||||
|
_ caddy.ProxyFuncProducer = ProxyFromNone{}
|
||||||
|
_ caddyfile.Unmarshaler = ProxyFromNone{}
|
||||||
)
|
)
|
Loading…
Reference in a new issue