nginx - solicitação sendo manipulada por vários blocos de localização

1

Estou testando uma configuração em que gostaria de ter o nginx apresentando mídia estática e fazer proxy de todas as outras solicitações para outro back-end. Minha configuração é assim:

location /media    {alias /var/httpd/media;}
location /         {proxy_pass http://127.0.0.1:8080;}

No entanto, se uma solicitação for feita para um recurso de mídia não existente, por exemplo, /media/foo.js , nginx tenta procurar por /var/httpd/media/foo.js e, quando não encontrado, também tenta fazer proxy da solicitação para 127.0.0.1:8080 . Aqui estão os registros de erro do nginx:

2012/05/18 17:09:21 [error] 10073#0: *1 open() "/var/httpd/media/foo.js" failed (2: No such file or directory), client: 127.0.0.1, server: www.example.com, request: "GET /media/foo.js HTTP/1.1", host: "www.example.com"
2012/05/18 17:09:21 [error] 10073#0: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 127.0.0.1, server: www.example.com, request: "GET /media/foo.js HTTP/1.1", upstream: "http://127.0.0.1:8080/media/foo.js", host: "www.example.com"

Além disso, percebo que, se existir /var/httpd/media/foo.js , mas não for legível pelo processo que está executando nginx, o nginx não tentará usar proxy para http://127.0.0.1:8080 e retornará 403 Forbidden . Registo de erros:

2012/05/18 17:09:33 [error] 10073#0: *1 open() "/var/httpd/media/foo.js" failed (13: Permission denied), client: 127.0.0.1, server: www.example.com, request: "GET /media/foo.js HTTP/1.1", host: "www.example.com"

Por que o primeiro cenário faz com que ambos os blocos de localização sejam processados e o segundo cenário apenas faça com que o bloco de localização de mídia seja processado? Como posso fazer o primeiro cenário processar apenas o bloco de localização de mídia e não tentar fazer proxy para o back-end?

Observação: eu também tentei adicionar um prefixo ^~ ao bloco de localização de mídia:

location ^~ /media    {alias /var/httpd/media;}

... mas isso não alterou o comportamento do nginx, pois continuou a cair no bloco / após falhar no bloco /media .

    
por Gary 19.05.2012 / 01:19

1 resposta

1

Eu acho que você tem error_page 404 definido para algum lugar no segundo local

    
por 19.05.2012 / 06:07

Tags