Я делаю простой веб-сайт для размещения репозиториев git, очень похожий на github. я использую Gittornado для обработки git Smart HTTP-запросов, и он отлично работает локально; Я могу клонировать, нажимать, тянуть и т. Д. Но когда я кладу его за Nginx, команды git перестают работать, не выдавая никаких ошибок, кроме: «фатальный: удаленный конец неожиданно завис»
Я знаю, что проблема возникает из-за Nginx, потому что, если я открою порт, на котором работает Tornado, и попробую через него свои команды git (например, "git pull \http://mysite.com:8000/myrepository master вместо git pull \http://mysite.com/myrepository master "[добавлены обратные косые черты, потому что сбой сервера сообщает, что у меня слишком много ссылок]) все работает, как ожидалось. Журналы доступа и ошибок Nginx, похоже, не говорят ничего интересного, поэтому я достаточно уверен, что это как-то связано с способ, которым Nginx сжимает или разбивает запросы / ответы, заставляя git думать, что произошло неожиданное зависание, но я не уверен, что делать, чтобы исправить это, поскольку это мой первый раз с Nginx.
Мой файл конфигурации Nginx в основном является клоном найденного Вот; Я пробовал комментировать различные варианты, которые кажутся вероятными, чтобы узнать, не вызывали ли они проблему, но ни один из них не исправил ее, поэтому я предполагаю, что есть какое-то поведение по умолчанию, которое мне нужно подавить, я просто не уверен, что именно.
Есть мысли, как это исправить? Поскольку он работает не через Nginx, я подумываю просто перенаправить запросы git на порт торнадо, но это похоже на взлом, а не на чистое решение ...
Обычно проблемы связаны с фрагментированной кодировкой передачи, которую использует git. То же самое с gittornado и серверной частью CGI, поставляемой с git.
Видеть этот ответ serverfault предлагая настройку proxy_buffering off;
в блоке локации.