How to remove trailing slash after file extension using Nginx?

July 5, 2019 328 views
Nginx Ubuntu 16.04

I have a Ghost site at example.com and www.example.com (internally, it’s running on port 2368). At the same time, I have a file named form.pdf and I want to make it available (view in browser, not to ask user to download) at:

  • example.com/form.pdf
  • www.example.com/form.pdf

With configuration below, it only works if it contains trailing slash after the .pdf extension like so:

  • example.com/form.pdf/
  • www.example.com/form.pdf/

PDF file path:

/var/www/ghost/pdfs/form.pdf

Config file path:

/etc/nginx/sites-available/ghost

Config file:

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    server_name 123.45.678.901 localhost example.com *.example.com;

    root /usr/share/nginx/html;
    index index.html index.htm;

    client_max_body_size 100M;

    location "/form.pdf" {
        alias /var/www/ghost/pdfs;
        index form.pdf;
    }

    location / {
        proxy_pass http://localhost:2368;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_buffering off;
    }
}

When I remove the trailing slash after the .pdf extension, I got 404 error.

Question:

How to correctly configure Nginx to make it work without the trailing slash at the end?

1 Answer

I found the answer. This one worked for me:

location = /form.pdf {
        root /var/www/ghost/pdfs;
}
Have another answer? Share your knowledge.