Estoy tratando de configurar un nginx config de la siguiente manera: Al recibir una petición como /tile/SteveCountryVic/1/2/3.png
:
- Intenta pasarlo a
http://localhost:5005/1/2/3.png
- Si eso 404s, pasarlo a otro servidor como
/tile/SteveCountryVic/1/2/3.png
Aquí está mi configuración que no está funcionando del todo:
server {
listen 80;
server_name localhost; error_log /tmp/nginx.error.log notice;
access_log /tmp/nginx.access.log;
location /tile/SteveCountryVic/ {
rewrite_log on;
#rewrite ^.*/(\d+)/(\d+)/(\d+).*$ /$1/$2/$3.png break;
proxy_intercept_errors on;
error_page 404 = @dynamiccycletour;
#proxy_set_header Host $http_host;
#proxy_pass http://127.0.0.1:5005;
proxy_redirect /tile/SteveCountryVic/ http://localhost:5005/;
location @dynamiccycletour {
rewrite_log on;
#rewrite ^(\d+)/(\d+)/(\d+).*$ /tile/SteveCountryVic/$1/$2/$3.png break;
proxy_pass http://115.x.x.x:20008;
}
location /tile/ {
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:20008;
proxy_cache my-cache;
proxy_cache_valid 200 302 60m;
proxy_cache_valid 404 1m;
}
...
En esta configuración, todas las peticiones parecen ser redirigidas al servidor proxy, pero las imágenes son finalmente servidas. Además, el registro de errores contiene estas líneas:
2013/09/10 09:44:11 [error] 564#0: *138 open() "/etc/nginx/html/tile/SteveCountryVic/13/7399/5027.png" failed (2: No such file or directory), client: 118.x.x.x, server: localhost, request: "GET /tile/SteveCountryVic/13/7399/5027.png?updated=15 HTTP/1.1", host: "mydomain.org"
Si en lugar de utilizar proxy_redirect
Utilizo rewrite
y proxy_pass
:
rewrite ^.*/(\d+)/(\d+)/(\d+).*$ /$1/$2/$3.png break;
proxy_pass http://127.0.0.1:5005;
Entonces ahora sí que veo los mensajes 404 en el navegador (es decir, no se interceptan).
Mis preguntas:
- ¿Qué estoy haciendo mal?
- ¿Por qué nginx busca archivos en /etc/nginx/html/...?
- ¿Hay alguna forma de obtener aún más información de registro (concretamente, para comprender mejor proxy_redirect)?