Como encaminhar parâmetros de url do Nginx para a API do meu servidor? [fechadas]

1

Estou tentando criar uma seção "somente usuário" e consegui chegar até aqui, mas estou preso. Como posso enviar o URL solicitado para minha API?

Aqui está minha rota da API Express.js, muito simples. O usuário visita um link (link direto, links incorporados / vídeos em uma página, etc.) e tenta visualizá-lo. Eu redireciono o seu pedido para o meu / api e verifico se ele pode ver ou não. Coisas que estão abaixo do trabalho se eu remover a parte: file e testar com 200 e 403, mas eu preciso poder verificá-las dinamicamente.

Uma explicação mais clara está abaixo. "/" é o URL genérico, mas / api deve ser acionado apenas quando um visitante tentar acessar um arquivo, independentemente da localização / URL do arquivo. Então, o que eu quero fazer é: "Ok, eu sou Nginx e vejo que alguns visitantes tentam acessar alguns arquivos. Vamos passar o nome desse arquivo para o servidor Express.js e deixar verificar se esse usuário tem permissão para ver essa imagem ou não. Se diz 200, eu vou permitir. Se é 403, então não. "

app.get('/api/:file', function(req,res,next) {
  // This part decides what you're allowed to see.
  // Redis database query. Returns 0 or 1. 
  // 1 returns 200, 0 returns 403.
  res.sendStatus(200); // It works, so this part is done.
});

Mas eu não sei como passar o parâmetro url solicitado do Nginx para o meu aplicativo Express.js (por exemplo, image.jpg, video.mp4 em link format) para que eu possa verificar a permissão do usuário em relação ao banco de dados e retornar uma resposta dinâmica para cada arquivo.

Aqui está minha configuração atual do 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|html|htm)$ {
    root images;
    auth_request /api;
  }

  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;
  }
}
    
por salep 05.05.2016 / 19:06

1 resposta

1

Tente:

location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|pdf|txt|tar|wav|bmp|rtf|js|flv|swf|html|htm)$ {
    rewrite ^ /api/$1?$args permanent;
}

Isso deve reescrever o pedido de arquivo para o caminho da API. Então você api pode decidir se deixar o usuário passar de não.

    
por 07.05.2016 / 22:08

Tags