How do I configure nginx to serve files with a prefix?

Viewed 594

I am trying to host static files in kubernetes with an nginx container, and expose them on a private network with istio.

I want the root of my server to exist at site.com/foo, as I have other applications existing at site.com/bar, site.com/boo, etc.

My istio virtual service configuration:

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: cluster-foo
  namespace: namespace
spec:
  gateways:
  - cluster-gateway
  hosts:
  - site.com
  http:
  - match:
    - name: http
      port: 80
      uri:
        prefix: /foo
    route:
    - destination:
        host: app.namespace.svc.cluster.local
        port:
          number: 80

All of my static files exist in the directory /data on my nginx container. My nginx config:

events {}
http {
    server {
        root /data;

        location /foo {
            autoindex on;
        }
    }
}

Applying this virtual service, and a kube deployment that runs an nginx container with this config, I get a nginx server at site.com/foo that serves all of the static files in /data on the container. All good. The problem is that the autoindexing that nginx does, does not respect the prefix /foo. So all the file links that nginx indexes at site.com/foo, look like this: site.com/page.html, rather than site.com/foo/page.html. Furthermore, when I put site.com/foo/page.html in my browser manually, site.com/foo/page.html is displayed correctly, So I know that nginx is serving it in the correct location, just the links that it is indexing are incorrect.

Is there any way to configure nginx autoindex with a prefix?

0 Answers
Related