Question

Nginx downloads a file instead of going to index once you go to a folder url

I’m trying to setup phpmyadmin on my new ubuntu server running nginx. When I do domain.com/phpmyadmin/ it downloads a file consisting of php code etc while if I do domain.com/phpmyadmin/index.php it loads in correct. Got no idea why. This is my server block:

server {
    listen 80;
    listen [::]:80;

    root /var/www/domain.com/html;
    index index.php index.html index.htm index.nginx-debian.html;

    server_name domain.com;

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.2-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }

    location / {
        try_files $uri/ $uri =404;
    }
}

and I have set ‘’‘cgi.fix_pathinfo=0’‘’.


Submit an answer


This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Sign In or Sign Up to Answer

These answers are provided by our Community. If you find them useful, show some love by clicking the heart. If you run into issues leave a comment, or add your own answer to help others.

Accepted Answer

Didn’t know file downloads were cached. Forgot to clear cache. Now I feel dumb cause ofcourse downloads are cached and I’m just dumb.

Jonathan Tittle
DigitalOcean Employee
DigitalOcean Employee badge
June 30, 2019

@DreamplaySE

You can use root or alias within the location block to set the path (though you should only use one or the other, not both)–alias is often preferred (root is generally used to set the high-level path, outside of location blocks). I’ve provided a few examples below.

For root, you’ll want to set the base path sans phpmyadmin. NGINX will look within the root path for the directories and files being requested. For example:

location ^~ /phpmyadmin {
    root /var/www;
    try_files $uri $uri/ =404;
}

When /phpmyadmin is requested, the path updates to reflect the request. For example:

/var/www/phpmyadmin

Unlike root, alias can only be used within location blocks and alias overrides the default root directory. For alias, you’ll want to use the full path to where phpmyadmin is located (the physical directory, not the symlink). For example:

location ^~ /phpmyadmin {
    alias /var/www/phpmyadmin;
    try_files $uri $uri/ =404;
}

With alias, NGINX does not postfix /phpmyadmin to the end of the path. In many ways, this functions much like a symlink would, though you’re linking to the physical directory where phpmyadmin is.

Oh I just realized it’s because I’ve linked phpmyadmin thru a symlink. Any way to fix the problem or is the best way to set root to the php folder instead?

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Get our biweekly newsletter

Sign up for Infrastructure as a Newsletter.

Hollie's Hub for Good

Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.

Become a contributor

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

Welcome to the developer cloud

DigitalOcean makes it simple to launch in the cloud and scale up as you grow — whether you're running one virtual machine or ten thousand.

Learn more
DigitalOcean Cloud Control Panel