Use upstream in host config
This commit is contained in:
parent
bc6825c148
commit
17a108f75f
@ -156,9 +156,9 @@ INSERT INTO `nginx_template` (
|
||||
|
||||
{{#unless Host.IsDisabled}}
|
||||
server {
|
||||
set $forward_scheme {{Host.ForwardScheme}};
|
||||
set $server ""{{Host.ForwardHost}}"";
|
||||
set $port {{Host.ForwardPort}};
|
||||
set $forward_scheme {{Host.ForwardScheme}} http; # todo
|
||||
set $server ""{{Host.ForwardHost}}""; # todo
|
||||
set $port {{Host.ForwardPort}} 80; # todo
|
||||
|
||||
{{#if Config.Ipv4}}
|
||||
listen 80;
|
||||
@ -168,11 +168,13 @@ server {
|
||||
{{/if}}
|
||||
|
||||
{{#if Certificate.ID}}
|
||||
{{#if Config.Ipv4}}
|
||||
listen 443 ssl {{#if Host.HTTP2Support}}http2{{/if}};
|
||||
{{/if}}
|
||||
{{#if Config.Ipv6}}
|
||||
listen [::]:443 ssl {{#if Host.HTTP2Support}}http2{{/if}};
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
server_name {{#each Host.DomainNames}}{{this}} {{/each}};
|
||||
|
||||
@ -222,6 +224,8 @@ server {
|
||||
|
||||
# default location:
|
||||
location / {
|
||||
proxy_http_version 1.1;
|
||||
|
||||
{{#if Host.AccessListID}}
|
||||
# Authorization
|
||||
auth_basic ""Authorization required"";
|
||||
@ -245,11 +249,22 @@ server {
|
||||
{{#if Host.AllowWebsocketUpgrade}}
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection $http_connection;
|
||||
proxy_http_version 1.1;
|
||||
{{/if}}
|
||||
|
||||
# Proxy!
|
||||
include conf.d/include/proxy.conf;
|
||||
add_header X-Served-By $host;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Forwarded-Scheme $scheme;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_set_header X-Forwarded-For $remote_addr;
|
||||
|
||||
{{#if Upstream.ID}}
|
||||
# upstream
|
||||
proxy_pass $forward_scheme://npm_upstream_{{Upstream.ID}};
|
||||
{{else}}
|
||||
# proxy
|
||||
proxy_pass $forward_scheme://$server:$port;
|
||||
{{/if}}
|
||||
}
|
||||
|
||||
# Legacy Custom Configuration
|
||||
|
@ -55,7 +55,7 @@ type Model struct {
|
||||
Certificate *certificate.Model `json:"certificate,omitempty"`
|
||||
NginxTemplate *nginxtemplate.Model `json:"nginx_template,omitempty"`
|
||||
User *user.Model `json:"user,omitempty"`
|
||||
Upstream *upstream.Model `json:"upstream,omitempty"`
|
||||
Upstream upstream.Model `json:"upstream,omitempty"`
|
||||
}
|
||||
|
||||
func (m *Model) getByQuery(query string, params []interface{}) error {
|
||||
@ -119,7 +119,7 @@ func (m *Model) Expand(items []string) error {
|
||||
if m.UpstreamID > 0 {
|
||||
var u upstream.Model
|
||||
u, err = upstream.GetByID(m.UpstreamID)
|
||||
m.Upstream = &u
|
||||
m.Upstream = u
|
||||
}
|
||||
|
||||
if util.SliceContainsItem(items, "user") && m.ID > 0 {
|
||||
@ -140,6 +140,12 @@ func (m *Model) Expand(items []string) error {
|
||||
m.NginxTemplate = &templ
|
||||
}
|
||||
|
||||
if util.SliceContainsItem(items, "upstream") && m.UpstreamID > 0 {
|
||||
var ups upstream.Model
|
||||
ups, err = upstream.GetByID(m.UpstreamID)
|
||||
m.Upstream = ups
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
@ -171,6 +177,7 @@ func (m *Model) GetTemplate() Template {
|
||||
Status: m.Status,
|
||||
ErrorMessage: m.ErrorMessage,
|
||||
IsDisabled: m.IsDisabled,
|
||||
Upstream: m.Upstream,
|
||||
}
|
||||
|
||||
return t
|
||||
|
@ -1,13 +1,6 @@
|
||||
package host
|
||||
|
||||
type TemplateUpstream struct {
|
||||
Hostname string
|
||||
Port int
|
||||
BalanceMethod string
|
||||
MaxFails int
|
||||
FailTimeout int
|
||||
AdvancedConfig string
|
||||
}
|
||||
import "npm/internal/entity/upstream"
|
||||
|
||||
// Template is the model given to the template parser, converted from the Model
|
||||
type Template struct {
|
||||
@ -34,5 +27,5 @@ type Template struct {
|
||||
AdvancedConfig string
|
||||
Status string
|
||||
ErrorMessage string
|
||||
Upstreams []TemplateUpstream
|
||||
Upstream upstream.Model
|
||||
}
|
||||
|
@ -14,7 +14,7 @@ import (
|
||||
// ConfigureHost will attempt to write nginx conf and reload nginx
|
||||
func ConfigureHost(h host.Model) error {
|
||||
// nolint: errcheck, gosec
|
||||
h.Expand([]string{"certificate", "nginxtemplate"})
|
||||
h.Expand([]string{"certificate", "nginxtemplate", "upstream"})
|
||||
|
||||
var certificateTemplate certificate.Template
|
||||
if h.Certificate != nil {
|
||||
@ -22,10 +22,15 @@ func ConfigureHost(h host.Model) error {
|
||||
}
|
||||
|
||||
data := TemplateData{
|
||||
ConfDir: fmt.Sprintf("%s/nginx/hosts", config.Configuration.DataFolder),
|
||||
DataDir: config.Configuration.DataFolder,
|
||||
Host: h.GetTemplate(),
|
||||
Certificate: certificateTemplate,
|
||||
ConfDir: fmt.Sprintf("%s/nginx/hosts", config.Configuration.DataFolder),
|
||||
Config: Config{ // todo
|
||||
Ipv4: true,
|
||||
Ipv6: false,
|
||||
},
|
||||
DataDir: config.Configuration.DataFolder,
|
||||
Host: h.GetTemplate(),
|
||||
Upstream: h.Upstream,
|
||||
}
|
||||
|
||||
filename := fmt.Sprintf("%s/host_%d.conf", data.ConfDir, h.ID)
|
||||
|
@ -92,7 +92,7 @@ server {
|
||||
Certificate: test.cert.GetTemplate(),
|
||||
}
|
||||
|
||||
output, err := generateHostConfig(template, templateData)
|
||||
output, err := renderTemplate(template, templateData)
|
||||
assert.Equal(t, test.want.err, err)
|
||||
assert.Equal(t, test.want.output, output)
|
||||
})
|
||||
|
@ -13,25 +13,29 @@ import (
|
||||
"github.com/aymerick/raymond"
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
Ipv4 bool
|
||||
Ipv6 bool
|
||||
}
|
||||
|
||||
// TemplateData is a struct
|
||||
type TemplateData struct {
|
||||
ConfDir string
|
||||
Config Config
|
||||
DataDir string
|
||||
Host host.Template
|
||||
Certificate certificate.Template
|
||||
Upstream upstream.Model
|
||||
}
|
||||
|
||||
func generateHostConfig(template string, data TemplateData) (string, error) {
|
||||
func renderTemplate(template string, data TemplateData) (string, error) {
|
||||
logger.Debug("Rendering Template - Template: %s", template)
|
||||
logger.Debug("Rendering Template - Data: %+v", data)
|
||||
return raymond.Render(template, data)
|
||||
|
||||
// todo: apply some post processing to this config, stripe trailing whitespace from lines and then remove groups of 2+ \n's so the config looks nicer
|
||||
}
|
||||
|
||||
func writeTemplate(filename, template string, data TemplateData) error {
|
||||
output, err := generateHostConfig(template, data)
|
||||
output, err := renderTemplate(template, data)
|
||||
if err != nil {
|
||||
output = fmt.Sprintf("# Template Error: %s", err.Error())
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user