Nginx servers all the static content from the root directory to the root URL. For example if the root content location is configured as /usr/share/nginx/html which contains a file /usr/share/nginx/html/foo.html, then the url http://localhost/foo.html will serve that html file. I want to prefix a context path in the URL such that http://localhost/myapp/foo.html should serve /usr/share/nginx/html/foo.html file. 
I tried changing the location and adding an alias but that gives a 404.
  location / {
    root   /usr/share/nginx/html;
    index  index.html index.htm;
  }
  location /myapp/ {
    alias   /usr/share/nginx/html/;
  }
I also want that http://localhost/myapp should serve /usr/share/nginx/html/index.html
I'm using nginx's 1.12.1-alpine docker image
Try this
  index  index.html index.htm;
  location / {
    root   /usr/share/nginx/html;
  }
  location /myapp/ {
    alias   /usr/share/nginx/html/;
  }
If that doesn't work then try below
  index  index.html index.htm;
  location / {
    root   /usr/share/nginx/html;
  }
  location /myapp/ {
    alias   /usr/share/nginx/html/;
    try_files $uri $uri/ =404;
  }
Edit-1
If you want it to work without trailing / then you should use below
location ~ /app(/.*)?$ {
   alias   /usr/share/nginx/html/;
   try_files $uri $uri/ =404;
}
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With