![Nginx: expresión regular de ubicación para múltiples rutas](https://rvso.com/image/623655/Nginx%3A%20expresi%C3%B3n%20regular%20de%20ubicaci%C3%B3n%20para%20m%C3%BAltiples%20rutas.png)
Tengo dos ubicaciones en la configuración de nginx que funcionan:
location ^~ /media/ {
proxy_pass http://backend.example.com;
}
location ^~ /static/ {
proxy_pass http://backend.example.com;
}
¿Cómo puedo combinar estos dos en una sola ubicación?
Lo que ya he hecho:
Lo intentéesta sugerencia
location ~ ^/(static|media)/ {
proxy_pass http://backend.example.com;
}
pero no me funciona.
Además, cuando no uso backends, la siguiente configuración funciona correctamente:
location ~ ^/(static|media)/ {
root /home/project_root;
}
actualizar(algunas cadenas del registro)
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$
SOLUCIÓN
En realidad mi solución funciona bien:
location ~ ^/(static|media)/ {
root /home/project_root;
}
y el problema no tiene nada que ver con los backends. Como Guido Vaccarella notó correctamente, simplemente siguió a otro location ~ ...
que coincidía, por lo que location ~ ...
no tuve oportunidad de correr.
Respuesta1
De acuerdo adocumentación nginx:
Luego se verifican las expresiones regulares, en el orden de aparición en el archivo de configuración. La búsqueda de expresiones regulares finaliza con la primera coincidencia y se utiliza la configuración correspondiente.
En su configuración, la siguiente ubicación se define antes de la que tiene proxy_pass y coincide con la solicitud de los archivos js y css enestático:
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
}
Desafortunadamente, la cláusula "log_not_found off" desactiva el registro de cualquier error de archivo no encontrado relacionado con esta ubicación, ¡es por eso que su error_log está vacío!
Puede intentar comentar esta ubicación o moverla después de la ubicación con proxy_pass (si lo necesita para otros archivos que no están enestático/medios de comunicación).
Respuesta2
location ~ ^/(static|media)/ {
proxy_pass http://backend.example.com;
) <-----------
Debiera ser...
location ~ ^/(static|media)/ {
proxy_pass http://backend.example.com;
} <-----------
El cierre debe ser una llave {}, no un paréntesis ().
No puedo creer cuánto tiempo tomó ver eso. Guido tenía razón en los comentarios.