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

svn checkout на сервере SVN приводит к сбою репо с ошибкой 301

У нас есть сервер nginx, который подключается к стандартной настройке Apache + SVN. Настройка nginx - это очень простой прокси:

server {
    server_name svn.ourdomain.tld;
    location / {
        proxy_pass http://localhost:8080;
    }
}

Apache настроен следующим образом:

<Location />
    DAV svn
    SVNParentPath /var/svn
    AuthType Basic
    AuthName "Authentication Required"
    AuthUserFile /var/svn/.auth
    Require valid-user
</Location>

... что позволяет нам получать доступ к репозиториям, используя что-то вроде http://svn.ourdomain.tld/repo. Мы эксплуатируем эту установку уже около 2 лет без проблем.

Недавно мы обнаружили, что нам нужно проверить один из репозиториев на самом сервере, однако всякий раз, когда мы это делаем, кажется, что репо нарушается. С этого момента он будет отвечать только 301 Moved Permanently ошибка.

Мы пробовали:

Также попробовал обойти nginx и получил ту же ошибку:

Выписка с другого компьютера работает должным образом до того как мы пытаемся проверить на сервере, после этого он отказывается с тем же 301 ошибка.

Что еще более сбивает с толку, так это то, что на этом сервере репозитория также размещаются наши HudsonCI-сервер, который ежечасно загружает и строит наши проекты. Это заставляет нас подозревать, что именно клиент svn вызывает ошибку связи.

Также очень сбивает с толку, что удаление, а затем повторное создание репо с использованием svnadmin не сбрасывает ошибку - репо по-прежнему недоступен, даже если он «новый»! Перезапуск apache и subversion (svnserve) не влияет ни на эту ошибку, ни на исходную ошибку.

Информация о версии:

ОБНОВИТЬ:

Это также происходит с svn export при запуске на сервере репо. Запустил из любого другого ящика / клиента, проблем нет. Вот рабочий процесс, который поможет прояснить ошибку:

  1. [~repo-server~]# svnadmin create {repo}; chown -Rf www:www {repo}
  2. [remote-client]# svn checkout http://svn.ourdomain.tld/repo
  3. [remote-client]# svn add file; svn ci -m ''
  4. [~repo-server~]# cd /var/www; svn export file:///path/to/repo/trunk ourproject
  5. [remote-client]# svn update выходит из строя с ошибкой 301

Я также могу подтвердить, что имя хоста коробки здесь не влияет, что очень странно: независимо от того, svn.ourdomain.tld добавлен к /etc/hosts он все еще ломается - мы думали, что это может быть проблема с маршрутизацией localhost, но похоже, что это не так.

Нам не хватает чего-то в документации, в котором говорится, что вы не можете оформить заказ на репо, когда сервер находится в том же ящике? Как мы можем предотвратить повреждение репозиториев при локальном оформлении заказа?

svn не обрабатывает перенаправления HTTP (вот что такое ошибка 301), посмотрите, где перенаправления указывают на (wget, wirehark), проверьте оттуда.

Также это проблема, специфичная для apache, конфигурация виртуального хоста может нарушить ее.