2

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?

2

You have a file located at /var/www/ghost/pdfs/form.pdf that you would like to access using the URI /form.pdf. The obvious answer is to set the root to /var/www/ghost/pdfs. See this document for details.

Your current attempt with the alias directive is relying on the index directive to return the file. The actual URI being returned is /form.pdf/form.pdf, but Nginx appends the value of the index directive when a URI ends with /. See this document for details.

So the correct solution to return a single URI at a specific location is:

location = /form.pdf { root /var/www/ghost/pdfs; }

See this document for details.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.