У нас есть сервер репо, работающий в Windows-боксе, обслуживающий некоторые статические файлы, которые должны быть получены нашими рабочими узлами с помощью Python-urllib. Проблема заключается в том, что когда мы делаем запрос к файлу, который, как мы знаем, существует с использованием Python, мы получаем ошибку 404, однако, если я обращаюсь к файлу непосредственно из моего браузера, используя ту же ссылку, что и Python-urllib, он работает отлично, и файл загружен. Пример журнала доступа:
xxx.xxx.xxx.xxx - - [24/Jul/2013:17:15:53 -0400] "POST /x/dl/Bukkit_Beta.jar.conf HTTP/1.1" 405 172 "-" "Python-urllib/2.7"
Я заметил что-то странное в error.log:
2013/08/04 22:29:11 [error] 6456#2696: *807 CreateFile() "C:\Users\Administrator\Desktop\Nginx/html/MCProHosting/dl/405" failed (2: The system cannot find the file specified), client: 198.15.64.226, server: localhost, request: "GET /MCProHosting/dl/405 HTTP/1.1", host: "repo.mcprohosting.com"
Похоже, что из этих журналов создается 405, а не 404, но Python показывает страницу 404. Обратите внимание, что это свежая загрузка nginx та же структура каталогов работает под Apache, если мы переносим через папку htdocs / html.
Никаких изменений конфигурации Nginx не производилось.
Вы не можете делать запросы POST к статическим ресурсам в nginx, вот и все.
Но вы можете проделать трюк, используя error_page
директива:
error_page 405 =200 $request_uri;
Страница ошибки 404 вызвана тем, что nginx не находит страницу ошибки 405, как вы можете видеть из журнала ошибок nginx. Итак, настоящая ошибка - это неправильный запрос, возвращающий ошибку 405.
Проверка Код ошибки HTTP вы можете видеть, что 405 - «Метод запрещен»:
10.4.6 405 Method Not Allowed
The method specified in the Request-Line is not allowed for the resource identified
by the Request-URI. The response MUST include an Allow header containing a list of
valid methods for the requested resource.
Таким образом, вы, вероятно, неправильно используете Python-urllib ... скорее всего, вы используете неправильный метод POST. У тебя есть x-www-form-urlencoded (например: данные POST находятся в URL-адресе) и Multipart / form-data (например: данные POST в загруженном файле).
Так что перепроверьте, как вы делаете запрос POST.