Add IMGPROXY_PATH_PREFIX config

This commit is contained in:
DarthSim
2020-04-07 17:54:00 +06:00
parent 31250f0250
commit 70e26cdd97
6 changed files with 19 additions and 5 deletions

View File

@@ -3,6 +3,7 @@
## [Unreleased]
## Addded
- Video thumbnails.
- `IMGPROXY_PATH_PREFIX` config.
## Changed
- Quantizr updated to 0.2.0 in Docker image.

View File

@@ -167,6 +167,8 @@ type config struct {
SoReuseport bool
PathPrefix string
MaxSrcDimension int
MaxSrcResolution int
MaxSrcFileSize int
@@ -295,6 +297,8 @@ func configure() error {
boolEnvConfig(&conf.SoReuseport, "IMGPROXY_SO_REUSEPORT")
strEnvConfig(&conf.PathPrefix, "IMGPROXY_PATH_PREFIX")
intEnvConfig(&conf.MaxSrcDimension, "IMGPROXY_MAX_SRC_DIMENSION")
megaIntEnvConfig(&conf.MaxSrcResolution, "IMGPROXY_MAX_SRC_RESOLUTION")
intEnvConfig(&conf.MaxSrcFileSize, "IMGPROXY_MAX_SRC_FILE_SIZE")

View File

@@ -37,6 +37,7 @@ echo $(xxd -g 2 -l 64 -p /dev/random | tr -d '\n')
* `IMGPROXY_TTL`: duration (in seconds) sent in `Expires` and `Cache-Control: max-age` HTTP headers. Default: `3600` (1 hour);
* `IMGPROXY_CACHE_CONTROL_PASSTHROUGH`: when `true` and source image response contains `Expires` or `Cache-Control` headers, reuse those headers. Default: false;
* `IMGPROXY_SO_REUSEPORT`: when `true`, enables `SO_REUSEPORT` socket option (currently on linux and darwin only);
* `IMGPROXY_PATH_PREFIX`: URL path prefix. Example: when set to `/abc/def`, imgproxy URL will be `/abc/def/%signature/%processing_options/%source_url`. Default: blank.
* `IMGPROXY_USER_AGENT`: User-Agent header that will be sent with source image request. Default: `imgproxy/%current_version`;
* `IMGPROXY_USE_ETAG`: when `true`, enables using [ETag](https://en.wikipedia.org/wiki/HTTP_ETag) HTTP header for HTTP cache control. Default: false;
* `IMGPROXY_CUSTOM_REQUEST_HEADERS`: <img class="pro-badge" src="assets/pro.svg" alt="pro" /> list of custom headers that imgproxy will send while requesting the source image, divided by `\;` (can be redefined by `IMGPROXY_CUSTOM_HEADERS_SEPARATOR`). Example: `X-MyHeader1=Lorem\;X-MyHeader2=Ipsum`;

View File

@@ -996,10 +996,17 @@ func parsePathBasic(parts []string, headers *processingHeaders) (string, *proces
}
func parsePath(ctx context.Context, r *http.Request) (context.Context, error) {
var err error
path := r.URL.RawPath
if len(path) == 0 {
path = r.URL.Path
}
if len(conf.PathPrefix) > 0 {
path = strings.TrimPrefix(path, conf.PathPrefix)
}
parts := strings.Split(strings.TrimPrefix(path, "/"), "/")
if len(parts) < 2 {
@@ -1007,7 +1014,7 @@ func parsePath(ctx context.Context, r *http.Request) (context.Context, error) {
}
if !conf.AllowInsecure {
if err := validatePath(parts[0], strings.TrimPrefix(path, fmt.Sprintf("/%s", parts[0]))); err != nil {
if err = validatePath(parts[0], strings.TrimPrefix(path, fmt.Sprintf("/%s", parts[0]))); err != nil {
return ctx, newError(403, err.Error(), msgForbidden)
}
}
@@ -1021,7 +1028,6 @@ func parsePath(ctx context.Context, r *http.Request) (context.Context, error) {
var imageURL string
var po *processingOptions
var err error
if conf.OnlyPresets {
imageURL, po, err = parsePathPresets(parts[1:], headers)

View File

@@ -27,6 +27,7 @@ type route struct {
}
type router struct {
prefix string
Routes []*route
PanicHandler panicHandler
}
@@ -43,8 +44,9 @@ func (r *route) IsMatch(req *http.Request) bool {
return strings.HasPrefix(req.URL.Path, r.Prefix)
}
func newRouter() *router {
func newRouter(prefix string) *router {
return &router{
prefix: prefix,
Routes: make([]*route, 0),
}
}
@@ -52,7 +54,7 @@ func newRouter() *router {
func (r *router) Add(method, prefix string, handler routeHandler, exact bool) {
r.Routes = append(
r.Routes,
&route{Method: method, Prefix: prefix, Handler: handler, Exact: exact},
&route{Method: method, Prefix: r.prefix + prefix, Handler: handler, Exact: exact},
)
}

View File

@@ -17,7 +17,7 @@ var (
)
func buildRouter() *router {
r := newRouter()
r := newRouter(conf.PathPrefix)
r.PanicHandler = handlePanic