众所周知,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 搭建过程中遇到的问题,请联系我!