diff --git a/backend/migrations/20230811144605_forward_path.js b/backend/migrations/20230811144605_forward_path.js new file mode 100644 index 00000000..b1e7bc59 --- /dev/null +++ b/backend/migrations/20230811144605_forward_path.js @@ -0,0 +1,42 @@ +const migrate_name = 'identifier_for_migrate'; +const logger = require('../logger').migrate; + +/** + * Migrate + * + * @see http://knexjs.org/#Schema + * + * @param {Object} knex + * @param {Promise} Promise + * @returns {Promise} + */ +exports.up = function (knex) { + + logger.info('[' + migrate_name + '] Migrating Up...'); + + + return knex.schema.alterTable('proxy_host', function(table){ + table.string('forward_path_prefix').notNull().defaultTo('' ); + }) + .then(function() { + logger.info('[' + migrate_name + '] Migrating Up Complete'); + }); +}; + +/** + * Undo Migrate + * + * @param {Object} knex + * @param {Promise} Promise + * @returns {Promise} + */ +exports.down = function (knex) { + logger.info('[' + migrate_name + '] Migrating Down...'); + + return knex.schema.alterTable('proxy_host', function(table){ + table.dropColumn('forward_path_prefix'); + }) + .then(() => { + logger.info('[' + migrate_name + '] Migrating Down Complete'); + }); +}; diff --git a/backend/schema/endpoints/proxy-hosts.json b/backend/schema/endpoints/proxy-hosts.json index 9a3fff2f..8d6b61d2 100644 --- a/backend/schema/endpoints/proxy-hosts.json +++ b/backend/schema/endpoints/proxy-hosts.json @@ -32,6 +32,11 @@ "minimum": 1, "maximum": 65535 }, + "forward_path_prefix":{ + "type":"string", + "pattern": "^(\/[^/]+)*$", + "maxLength":255 + }, "certificate_id": { "$ref": "../definitions.json#/definitions/certificate_id" }, @@ -102,6 +107,10 @@ "forward_path": { "type": "string" }, + "forward_path_prefix":{ + "type":"string", + "pattern": "^(\/[^/]+)*$" + }, "advanced_config": { "type": "string" } @@ -221,6 +230,9 @@ "forward_port": { "$ref": "#/definitions/forward_port" }, + "forward_path_prefix":{ + "$ref": "#/definitions/forward_path_prefix" + }, "certificate_id": { "$ref": "#/definitions/certificate_id" }, @@ -294,6 +306,9 @@ "forward_port": { "$ref": "#/definitions/forward_port" }, + "forward_path_prefix":{ + "$ref": "#/definitions/forward_path_prefix" + }, "certificate_id": { "$ref": "#/definitions/certificate_id" }, diff --git a/backend/templates/_location.conf b/backend/templates/_location.conf index b7563227..02e715ff 100644 --- a/backend/templates/_location.conf +++ b/backend/templates/_location.conf @@ -6,7 +6,7 @@ proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Real-IP $remote_addr; - proxy_pass {{ forward_scheme }}://{{ forward_host }}:{{ forward_port }}{{ forward_path }}; + proxy_pass {{ forward_scheme }}://{{ forward_host }}:{{ forward_port }}{{ forward_path_prefix }}{{ forward_path }}; {% include "_access.conf" %} {% include "_assets.conf" %} diff --git a/backend/templates/proxy_host.conf b/backend/templates/proxy_host.conf index d23ca46f..d7fc3681 100644 --- a/backend/templates/proxy_host.conf +++ b/backend/templates/proxy_host.conf @@ -8,6 +8,7 @@ server { set $forward_scheme {{ forward_scheme }}; set $server "{{ forward_host }}"; set $port {{ forward_port }}; + set $path_prefix "{{ forward_path_prefix }}"; {% include "_listen.conf" %} {% include "_certificates.conf" %} diff --git a/docker/rootfs/etc/nginx/conf.d/default.conf b/docker/rootfs/etc/nginx/conf.d/default.conf index e4262e1d..af7ff1b1 100644 --- a/docker/rootfs/etc/nginx/conf.d/default.conf +++ b/docker/rootfs/etc/nginx/conf.d/default.conf @@ -6,6 +6,7 @@ server { set $forward_scheme "http"; set $server "127.0.0.1"; set $port "80"; + set $path_prefix ""; server_name localhost-nginx-proxy-manager; access_log /data/logs/fallback_access.log standard; diff --git a/docker/rootfs/etc/nginx/conf.d/include/proxy.conf b/docker/rootfs/etc/nginx/conf.d/include/proxy.conf index d346c4ef..82879b40 100644 --- a/docker/rootfs/etc/nginx/conf.d/include/proxy.conf +++ b/docker/rootfs/etc/nginx/conf.d/include/proxy.conf @@ -4,5 +4,5 @@ proxy_set_header X-Forwarded-Scheme $scheme; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; -proxy_pass $forward_scheme://$server:$port$request_uri; +proxy_pass $forward_scheme://$server:$port$path_prefix$request_uri; diff --git a/frontend/js/app/nginx/proxy/form.ejs b/frontend/js/app/nginx/proxy/form.ejs index 8e7a2a2d..20077efe 100644 --- a/frontend/js/app/nginx/proxy/form.ejs +++ b/frontend/js/app/nginx/proxy/form.ejs @@ -54,6 +54,12 @@ +
+
+ + +
+
-
<%- forward_scheme %>://<%- forward_host %>:<%- forward_port %>
+
<%- forward_scheme %>://<%- forward_host %>:<%- forward_port %><%- forward_path_prefix %>
<%- certificate && certificate_id ? i18n('ssl', certificate.provider) : i18n('ssl', 'none') %>
diff --git a/frontend/js/app/nginx/proxy/location-item.ejs b/frontend/js/app/nginx/proxy/location-item.ejs index 466cb9ba..36a12f5f 100644 --- a/frontend/js/app/nginx/proxy/location-item.ejs +++ b/frontend/js/app/nginx/proxy/location-item.ejs @@ -48,6 +48,12 @@
+
+
+ + +
+
diff --git a/frontend/js/i18n/messages.json b/frontend/js/i18n/messages.json index 0bbde454..4c4003a6 100644 --- a/frontend/js/i18n/messages.json +++ b/frontend/js/i18n/messages.json @@ -125,6 +125,7 @@ "forward-scheme": "Scheme", "forward-host": "Forward Hostname / IP", "forward-port": "Forward Port", + "forward-path-prefix": "Forward Path Prefix", "delete": "Delete Proxy Host", "delete-confirm": "Are you sure you want to delete the Proxy host for: {domains}?", "help-title": "What is a Proxy Host?", diff --git a/frontend/js/models/proxy-host-location.js b/frontend/js/models/proxy-host-location.js index 2a35059f..0a3ceb83 100644 --- a/frontend/js/models/proxy-host-location.js +++ b/frontend/js/models/proxy-host-location.js @@ -10,7 +10,8 @@ const model = Backbone.Model.extend({ advanced_config: '', forward_scheme: 'http', forward_host: '', - forward_port: '80' + forward_port: '80', + forward_path_prefix:'' } }, diff --git a/frontend/js/models/proxy-host.js b/frontend/js/models/proxy-host.js index b82d09fe..3b328610 100644 --- a/frontend/js/models/proxy-host.js +++ b/frontend/js/models/proxy-host.js @@ -12,6 +12,7 @@ const model = Backbone.Model.extend({ forward_scheme: 'http', forward_host: '', forward_port: null, + forward_path_prefix: '', access_list_id: 0, certificate_id: 0, ssl_forced: false,