![Nginx: regex de localização para vários caminhos](https://rvso.com/image/623655/Nginx%3A%20regex%20de%20localiza%C3%A7%C3%A3o%20para%20v%C3%A1rios%20caminhos.png)
Eu tenho dois locais na configuração do nginx que funcionam:
location ^~ /media/ {
proxy_pass http://backend.example.com;
}
location ^~ /static/ {
proxy_pass http://backend.example.com;
}
Como posso combinar esses dois em um único local?
O que eu já fiz:
tenteiesta sugestão
location ~ ^/(static|media)/ {
proxy_pass http://backend.example.com;
}
mas não funciona para mim.
Além disso, quando não uso backends, a seguinte configuração está funcionando corretamente:
location ~ ^/(static|media)/ {
root /home/project_root;
}
atualizar(algumas strings do log)
xx.xx.xx.xx - - [31/Dec/2013:13:48:18 +0000] "GET /content/11160/ HTTP/1.1" 200 5310 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36 OPR/18.0.1284.68"
xx.xx.xx.xx - - [31/Dec/2013:13:48:18 +0000] "GET /static/font-awesome/css/font-awesome.min.css HTTP/1.1" 404 200 "http://www.example.com/content/11160/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome$
xx.xx.xx.xx - - [31/Dec/2013:13:48:18 +0000] "GET /static/bootstrap/css/bootstrap.min.css HTTP/1.1" 404 200 "http://www.example.com/content/11160/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.$
xx.xx.xx.xx - - [31/Dec/2013:13:48:18 +0000] "GET /static/css/custom.css HTTP/1.1" 404 200 "http://www.example.com/content/11160/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/53$
xx.xx.xx.xx - - [31/Dec/2013:13:48:18 +0000] "GET /static/colorbox/colorbox.css HTTP/1.1" 404 200 "http://www.example.com/content/11160/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Sa$
xx.xx.xx.xx - - [31/Dec/2013:13:48:18 +0000] "GET /static/colorbox/jquery.colorbox-min.js HTTP/1.1" 404 200 "http://www.example.com/content/11160/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.$
xx.xx.xx.xx - - [31/Dec/2013:13:48:18 +0000] "GET /static/js/scripts.js HTTP/1.1" 404 200 "http://www.example.com/content/11160/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537$
SOLUÇÃO
Na verdade, minha solução funciona bem:
location ~ ^/(static|media)/ {
root /home/project_root;
}
e o problema não tem nada a ver com back-ends. Como bem percebeu Guido Vaccarella, ele apenas seguia outro location ~ ...
que combinava, de modo que location ~ ...
não tive chance de correr.
Responder1
De acordo comdocumentação nginx:
Em seguida, as expressões regulares são verificadas, na ordem em que aparecem no arquivo de configuração. A busca de expressões regulares termina na primeira correspondência e a configuração correspondente é usada.
Na sua configuração, o seguinte local é definido antes daquele com proxy_pass e corresponde à solicitação de arquivos js e css emestático:
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
}
Infelizmente, a cláusula "log_not_found off" desativa o registro de qualquer erro de arquivo não encontrado relacionado a este local, é por isso que seu error_log está vazio!
Você pode tentar comentar este local ou movê-lo após o local com proxy_pass (se precisar dele para outros arquivos que não estejamestático/meios de comunicação).
Responder2
location ~ ^/(static|media)/ {
proxy_pass http://backend.example.com;
) <-----------
Deveria estar...
location ~ ^/(static|media)/ {
proxy_pass http://backend.example.com;
} <-----------
O fechamento precisa ser uma chave {}, não um colchete ().
Não posso acreditar quanto tempo demorou para ver isso. Guido estava certo nos comentários.