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:
Probé 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;
}
actualización (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, solo siguió a otro location ~ ...
que coincidía, por lo que location ~ ...
no tuve oportunidad de correr.
Respuestas:
De acuerdo con la documentación de nginx :
En su configuración, la siguiente ubicación se define antes de la que tiene proxy_pass y coincide con la solicitud de archivos js y css en estática :
Lamentablemente, la cláusula "log_not_found off" desactiva el registro de cualquier error de archivo no encontrado relacionado con esta ubicación, ¡por eso su error_log está vacío!
Puede intentar comentar esta ubicación o moverla después de la ubicación con el proxy_pass (si lo necesita para otros archivos que no estén en modo estático / multimedia ).
fuente
Debiera ser...
El cierre debe ser una llave {}, no un paréntesis ().
No puedo creer cuánto tiempo llevó ver eso. Guido tenía razón en los comentarios.
fuente
|media)
en la cadena comenzó con la "ubicación". Pero la llave incorrecta aquí es solo un error tipográfico (corregido en cuestión). De lo contrario, esta configuración nginx no se cargaría y arrojaría un error similar aunexpected ")"...
Lo siento, nuevamente.