眾所周知,nginx目前是不支持svn的,並且由於機房網絡只開了80和22(ssh)端口,所以這時候就沒法單獨在服務器上搭建apache+svn 。所以就產生了 nginx + apache + svn的需求,具體做法是將外網通過80端口進來的請求到達nginx之后轉發到apache上,然后進行svn操作。具體的安裝及詳細的配置這里不一一贅述了 網上有很多解決方案。主要說一下,nginx做反向代理到apache的配置及經常容易出現的權限不足問題。
首先通過iptables打開一個本機的8080端口作為apache端口,由於機房網絡禁用了8080端口,所以這時候請求是不能通過8080端口到達服務器的,但是可以通過nginx的80端口到達nginx,這時候再在本機轉發給apache的8080端口就可以了,具體nginx配置文件如下
server {
listen 80;
server_name yourdomain;
location / {
root html/svn;
index index.html index.htm;
proxy_pass http://127.0.0.1:8080;
}
}
其余的ngixn、apache、svn配置按常規配,這時候不需要在svn里配置用戶密碼及訪問規則了,因為是通過apache過來的請求,這時候只要在apache里配置好用戶密碼及訪問規則文件就可以了。
其余省略1萬字。
接下來,在配置完全正確的情況下,還是會經常會出現各種各樣的權限問題,比如可以下載更新svn,但是不能提交上傳。只要出現這樣的權限問題說明了,肯定在某個地方的權限配置還是存在錯誤的地方。一般會出現在這2個地方。
1 首先,倉庫的存放目錄,如果放在 /usr/local ... 等目錄下,是不可以的,應該將倉庫目錄放在 /var/* 目錄下,比如 /var/www/repos
2 在目錄放正確的情況下,還是會出現上傳權限不夠的情況是什么原因呢?這時候看看 apache配置文件里的用戶和組 都是 apahce 而 /var/www/repos 的用戶和組是非apache的用戶,問題就出在這里。因為nginx把請求轉發給apache之后,apahce將請求交給svn,這時候svn的用戶是誰啊?是apache ,所以只要將/var/www/repos的用戶和組改為 apache:apache 即可,問題基本解決。
其余的種種問題網上基本都有解決方案,所以只寫這點關鍵部分吧。如果在查了N多資料還是解決不了 nginx + apache + svn 搭建過程中遇到的問題,請聯系我!