Назад | Перейти на главную страницу

nginx - запрос обрабатывается несколькими блоками местоположения

Я тестирую установку, в которой я хотел бы, чтобы nginx обслуживал статические носители и проксировал все остальные запросы на другой сервер. Моя конфигурация выглядит так:

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

Однако, если запрос сделан для несуществующего медиаресурса, например /media/foo.js, nginx пытается найти /var/httpd/media/foo.js а затем, когда он не найден, он также пытается проксировать запрос на 127.0.0.1:8080. Вот журналы ошибок 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"

Кроме того, я заметил, что если /var/httpd/media/foo.js делает существует, но не может быть прочитан процессом, выполняющим nginx, тогда nginx не пытается прокси-сервер http://127.0.0.1:8080 и возвращает 403 Forbidden. Журнал ошибок:

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"

Почему в первом сценарии обрабатываются оба блока местоположения, а во втором сценарии обрабатывается только блок местоположения носителя? Как я могу сделать так, чтобы первый сценарий обрабатывал только блок местоположения мультимедиа, а не пытался проксировать серверную часть?

Примечание: я также попытался добавить ^~ префикс к блоку размещения носителя:

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

... но это не повлияло на поведение nginx, поскольку он продолжал падать в / блокировать после сбоя в /media блок.

Я думаю, у вас error_page 404 установлена ​​где-то во втором месте