Я пытаюсь обслуживать защищенные файлы, используя эту директиву в моем nginx.conf:
location /secure/ {
internal;
alias /home/ldr/webapps/nginx/app/secure/;
}
Я передаю пути в форме: "/myfile.doc"
и путь к файлу будет: /home/ldr/webapps/nginx/app/secure/myfile.doc
Я просто получаю 404, когда открываю "http: //myserver/secure/myfile.doc" (после http вставляется пробел, чтобы ServerFault не преобразовывал его в ссылку)
Я пробовал убрать директиву завершения / отключения местоположения, и это не имеет значения.
Два вопроса:
Вот весь мой 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', что дает:
location ^~ /secure/ { ...etc...
Не уверен, что это означает, но это тоже не сработало!
Похоже, вы неправильно поняли суть 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
Попробуйте использовать root вместо псевдонима.
location /secure/ {
internal;
root /home/ldr/webapps/nginx/app/;
}