diff --git a/src/backend/internal/nginx.js b/src/backend/internal/nginx.js index 6167a2d4..dfbb8413 100644 --- a/src/backend/internal/nginx.js +++ b/src/backend/internal/nginx.js @@ -127,20 +127,28 @@ const internalNginx = { return '/data/nginx/' + host_type + '/' + host_id + '.conf'; }, + /** + * Generates custom locations + * @param {Object} host + * @returns {Promise} + */ renderLocations: (host) => { return new Promise((resolve, reject) => { - const tpl = ` - location {{ path }} { - proxy_pass {{ forward_scheme }}://{{ forward_host }}:{{ forward_port: }}; - {{ advanced_config }} - } - `; + let template; + + try { + template = fs.readFileSync(__dirname + '/../templates/_location.conf', {encoding: 'utf8'}); + } catch (err) { + reject(new error.ConfigurationError(err.message)); + return; + } + let renderer = new Liquid(); let renderedLocations = ''; const locationRendering = async () => { for (let i = 0; i < host.locations.length; i++) { - renderedLocations += await renderer.parseAndRender(tpl, host.locations[i]); + renderedLocations += await renderer.parseAndRender(template, host.locations[i]); } } @@ -175,8 +183,10 @@ const internalNginx = { } let locationsPromise; + let origLocations; if (host.locations) { + origLocations = [].concat(host.locations); locationsPromise = internalNginx.renderLocations(host).then((renderedLocations) => { host.locations = renderedLocations; }); @@ -194,6 +204,9 @@ const internalNginx = { logger.success('Wrote config:', filename, config_text); } + // Restore locations array + host.locations = origLocations; + resolve(true); }) .catch(err => { diff --git a/src/backend/models/proxy_host.js b/src/backend/models/proxy_host.js index cc7fb370..faa5d068 100644 --- a/src/backend/models/proxy_host.js +++ b/src/backend/models/proxy_host.js @@ -26,9 +26,6 @@ class ProxyHost extends Model { this.meta = {}; } - // Serialize custom locations - this.locations = JSON.stringify(this.locations); - this.domain_names.sort(); } diff --git a/src/backend/templates/_location.conf b/src/backend/templates/_location.conf new file mode 100644 index 00000000..af471be1 --- /dev/null +++ b/src/backend/templates/_location.conf @@ -0,0 +1,8 @@ + location {{ path }} { + 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; + proxy_pass {{ forward_scheme }}://{{ forward_host }}:{{ forward_port: }}; + {{ advanced_config }} + } \ No newline at end of file diff --git a/src/frontend/js/app/nginx/proxy/form.ejs b/src/frontend/js/app/nginx/proxy/form.ejs index 8f2d358b..6c2330a0 100644 --- a/src/frontend/js/app/nginx/proxy/form.ejs +++ b/src/frontend/js/app/nginx/proxy/form.ejs @@ -17,7 +17,7 @@