Serving protected files using Nginx's X-Accel-Redirect header
- by andybak
I'm trying to serve protected files using this directive in my nginx.conf:
location /secure/ {
internal;
alias /home/ldr/webapps/nginx/app/secure/;
}
I'm passing in paths in the form: "/myfile.doc"
and the file's path would be: /home/ldr/webapps/nginx/app/secure/myfile.doc
I just get 404's when I access "http: //myserver/secure/myfile.doc" (space inserted after http to stop ServerFault converting it to a link)
I've tried taking the trailing / off the location directive and that makes no difference.
Two questions:
How do I fix it!
How can I debug problems like this myself? How can I get Nginx to report which path it's looking for? error.log shows nothing and access.log just tells me which url is being requested - this is the bit I already know! It's no fun trying things randomly without any feedback.
Here's my entire nginx.conf:
daemon off;
worker_processes 2;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
server {
listen 21534;
server_name my.server.com;
client_max_body_size 5m;
location /media/ {
alias /home/ldr/webapps/nginx/app/media/;
}
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
fastcgi_pass unix:/home/ldr/webapps/nginx/app/myproject/django.sock;
fastcgi_pass_header Authorization;
fastcgi_hide_header X-Accel-Redirect;
fastcgi_hide_header X-Sendfile;
fastcgi_intercept_errors off;
include fastcgi_params;
}
location /secure {
internal;
alias /home/ldr/webapps/nginx/app/secure/;
}
}
}
EDIT:
I'm trying some of the suggestions here
So I've tried:
location /secure/ {
internal;
alias /home/ldr/webapps/nginx/app/;
}
both with and without the trailing slash on location.
I've also tried moving this block before the "location /" directive.
The page I linked to has ^~ after 'location' giving:
location ^~ /secure/ { ...etc...
Not sure what that signifies but it didn't work either!