Я пытаюсь создать раздел «разрешенные пользователи», и мне это удалось, но я застрял.Как перенаправить параметры url из Nginx в API моего сервера, чтобы я мог разрешить/запретить пользователям просматривать определенные файлы?
Я использую модуль auth_request для Nginx и Express.js.
Как я могу отправить запрошенный url на свой маршрут api?
"/"
является общим URL-адресом, но /api/:filename
следует уволить только тогда, когда посетитель пытается получить доступ к файлу независимо от местонахождения/URL-адреса этого файла. Короче говоря, я хочу сделать следующее: «Хорошо, я Nginx, и я вижу, что какой-то посетитель пытается получить доступ к этому файлу (или файлы, он проверяет индивидуально). Давайте передадим это имя на сервер Express.js и позволим ему проверьте, разрешено ли этому пользователю видеть этот образ или нет. Если он говорит 200, я разрешу его. Если это 403, то нет. "
app.get('/api/:filename', function(req,res,next) {
// This part decides what you're allowed to see.
// Redis database query. Returns 0 or 1.
// 1 means 200, 0 means 403.
res.sendStatus(200);
// It works if I omit :filename part, so this part is done in theory,
// but we didn't get the file name, so right now all we have is "yes
// to all" or "no to all", it's not dynamic.
});
Вопрос заключается в том, я не знаю, как передать требуемый параметр URL-адрес из Nginx моего приложения Express.js (например image.jpg
video.mp4
, в формате http://localhost/api/:filename
), так что я могу проверить разрешение пользователя по базе данных и возврату динамический ответ для каждого файла.
Вот моя конфигурация Nginx.
upstream localhost {
ip_hash;
server 127.0.0.1:8000;
server 127.0.0.1:8001;
server 127.0.0.1:8002;
server 127.0.0.1:8003;
}
server {
listen 80;
server_name localhost;
location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|pdf|txt|tar|wav|bmp|rtf|js|flv|swf)$ {
root images;
auth_request /api; // How to append requested filename to this URL?
}
location/{
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_pass http://localhost;
}
}
EDIT 1
location = /api {
proxy_pass http://localhost;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Original-URI $request_uri;
}
Я не уверен, что это ясно, что это такое, что вы просите ... – cnst