众所周知,nginx目前是不支持svn的,而且因为机房网络只开了80和22(ssh)端口,因此这时候就无法单独在服务器上搭建apache+svn 。因此就产生了 nginx + apache + svn的需求,具体作法是将外网经过80端口进来的请求到达nginx以后转发到apache上,而后进行svn操做。具体的安装及详细的配置这里不一一赘述了 网上有不少解决方案。主要说一下,nginx作反向代理到apache的配置及常常容易出现的权限不足问题。html
首先经过iptables打开一个本机的8080端口做为apache端口,因为机房网络禁用了8080端口,因此这时候请求是不能经过8080端口到达服务器的,可是能够经过nginx的80端口到达nginx,这时候再在本机转发给apache的8080端口就能够了,具体nginx配置文件以下nginx
server {
listen 80;
server_name yourdomain;
location / {
root html/svn;
index index.html index.htm;
proxy_pass http://127.0.0.1:8080;
}
}apache
其他的ngixn、apache、svn配置按常规配,这时候不须要在svn里配置用户密码及访问规则了,由于是经过apache过来的请求,这时候只要在apache里配置好用户密码及访问规则文件就能够了。服务器
其他省略1万字。网络
接下来,在配置彻底正确的状况下,仍是会常常会出现各类各样的权限问题,好比能够下载更新svn,可是不能提交上传。只要出现这样的权限问题说明了,确定在某个地方的权限配置仍是存在错误的地方。通常会出如今这2个地方。dom
1 首先,仓库的存放目录,若是放在 /usr/local ... 等目录下,是不能够的,应该将仓库目录放在 /var/* 目录下,好比 /var/www/reposssh
2 在目录放正确的状况下,仍是会出现上传权限不够的状况是什么缘由呢?这时候看看 apache配置文件里的用户和组 都是 apahce 而 /var/www/repos 的用户和组是非apache的用户,问题就出在这里。由于nginx把请求转发给apache以后,apahce将请求交给svn,这时候svn的用户是谁啊?是apache ,因此只要将/var/www/repos的用户和组改成 apache:apache 便可,问题基本解决。svn
其他的种种问题网上基本都有解决方案,因此只写这点关键部分吧。若是在查了N多资料仍是解决不了 nginx + apache + svn 搭建过程当中遇到的问题,请联系我!代理