我正在尝试使用 nginx.conf 中的以下指令来提供受保护的文件:
location /secure/ {
internal;
alias /home/ldr/webapps/nginx/app/secure/;
}
我以以下形式传递路径:“/myfile.doc”
该文件的路径为:/home/ldr/webapps/nginx/app/secure/myfile.doc
当我访问“http://myserver/secure/myfile.doc”时,我只得到 404(在 http 后插入空格以阻止 ServerFault 将其转换为链接)
我尝试去掉位置指令末尾的 / ,但这并没有什么区别。
两个问题:
- 我如何解决它!
- 我该如何自己调试这样的问题?我该如何让 Nginx 报告它正在寻找哪条路径?error.log 什么都不显示,access.log 只告诉我正在请求哪个 URL - 这是我已经知道的部分!在没有任何反馈的情况下随机尝试是没有意思的。
这是我的整个 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/;
}
}
}
编辑:
我正在尝试一些建议这里
所以我尝试过:
location /secure/ {
internal;
alias /home/ldr/webapps/nginx/app/;
}
无论位置上有无尾随斜杠。
我也尝试过将这个块移到“location /”指令之前。
我链接到的页面在“位置”后有 ^~,内容为:
location ^~ /secure/ { ...etc...
不确定这意味着什么但它也不起作用!
答案1
看来您误解了 x-accel-redirect 的意义。此功能的意义在于允许您的后端处理身份验证、日志记录等,然后将文件服务交给 Nginx。
这意味着您不能直接访问 URI,但您的后端会发出 x-accel-redirect 标头,并且 Nginx 将为文件提供服务而不是您的后端,从而释放它来执行其他操作。
如果这就是您所说的内容,I'm passing in paths in the form: "/myfile.doc"
那么您的 URI 与位置不匹配。您实际上是在向 Nginx 发出新请求,以便它进行正常的位置匹配。因此,如果您希望它匹配,location /secure/
您需要向它传递一个以 开头的 URI ,/secure/
然后/secure/myfile.doc
Nginx 就会提供服务/home/ldr/webapps/nginx/app/secure/myfile.doc
答案2
尝试使用 root 而不是别名。
location /secure/ {
internal;
root /home/ldr/webapps/nginx/app/;
}