У меня в настоящее время есть сервер подвешивания с чередованием 1.4.2 с несколькими репозициями, которые я хочу обновить. Я хочу сделать несколько вещей:Proxying Multiple Subversion Repos с nginx
- Перехода к более поздней версии (1.7+) подрывной
- Split хранилища на разные машины
- Изменения имен хостов (я объясню это в секунде)
- Изменение на использование доменного имени, а не путь по URL (< - Это проблема, у меня есть)
Однако, я хочу, очень мало времени простоя и я хочу сделать это постепенно и (в в значительной степени) шов меньше для наших пользователей.
Таким образом, сервер в данный момент решен: svn.svr.mycompany.co.uk Я хочу, чтобы пользователи, чтобы перейти к использованию: svn.mycompanyglobal.net
Это новое имя будет перенаправлен на DNS в соответствующий сервер, в зависимости от того, на каком континенте он включен. Это работает.
что указывает на Apache2 установить с SVN DAV доступа стандартного типа:
<VirtualHost 10.11.22.33>
Servername svn.svr.mycompany.co.uk
<Location /main>
DAV svn
SVNPath /home/svnrepo/main
[... Some regular auth stuff ...]
SVNIndexXSLT /svnindex.xsl
</Location>
<Location /data>
DAV svn
SVNPath /home/svnrepo/data
[... Some regular auth stuff ...]
SVNIndexXSLT /svnindex.xsl
</Location>
</VirtualHost>
Там это обычные вещи, связанные с документировать корни и модули, но это суть его.
Таким образом, на данный момент я могу проверить код из: http://svn.svr.mycompany.co.uk/data/Core/Blah
Теперь я поставил Nginx обратный прокси перед этим. Он имеет глобальное имя хоста и я могу просматривать код по адресу: http://data.svn.mycompanyglobal.net/Core/Blah (Примечание что я переместил «данные» от пути к имени хоста). Я достиг этого Nginx, добавив следующую конфигурацию:
server {
listen 80;
server_name data.svn.mycompanyglobal.net;
proxy_set_header Host svn.svr.mycompany.co.uk;
location = /svnindex.xsl {
proxy_pass http://svn.svr.mycompany.co.uk/svnindex.xsl;
}
location /data/ {
proxy_pass http://svn.svr.mycompany.co.uk/data/;
}
location/{
proxy_pass http://svn.svr.mycompany.co.uk/;
rewrite ^(.*)$ /data$1 break;
}
}
Это все работает. Я могу просматривать код в веб-браузере и через браузер репо в TortoiseSVN или через командную строку «svn ls». Все это через прокси.
Однако, когда я пытаюсь проверить код, я получаю ошибку
Unusable URI: it does not refer to this repository
Я пришел к выводу, что это клиент делает это решение (т.е. поднять ошибку). Глядя на исходный код SVNKit, ясно, что клиент svn сравнивает запрошенный путь к пути, возвращаемому сервером - я не уверен, почему, но это то, на что это похоже (см. DavUtils).
я могу решить эту проблему (вроде), изменив URL я в кассу от этого:
http://data.svn.mycompanyglobal.net/data
[т.е. я добавить имя хранилища до конца]
Это, вероятно, работает из-за «/ data /» маршрут, который я добавил выше.
Неужели кому-нибудь удалось сделать что-нибудь подобное? Есть ли что-то, что я могу сделать на сервере Subversion или прокси-сервере, который изменяет представление пути к клиенту подрывной деятельности?
Я знаю, что как только я получу это на отдельных серверах, он перестанет быть проблемой, потому что на каждом сервере будет только одно «местоположение» (корень), но в данный момент у меня нет роскоши этого ,
Кроме того, вы должны, вероятно, помнить, что этот ящик был предназначен для ослов, и есть много жестко закодированных ссылок на него. Вот почему мне нужно проксировать его, чтобы я мог постепенно переместить все ссылки на новый формат URL.
Я ценю, что это длинный вопрос, но я надеюсь, что я дал понять, чего я хочу достичь. Не стесняйтесь сказать мне, что я просто сумасшедший - мне просто кажется, что я так близок к тому, чтобы заставить его работать :).
Спасибо! Я действительно разработал, как это сделать - я ответил своим решением. –
Прохладный без проблем. если ответ был возможным решением, пожалуйста, сообщите мне, «проверив» его, чтобы я знал, что мое моджо все еще работает;) – crockpotveggies