Nginx – svn using nginx Commit failed: path not found

apache-2.2nginxsvn

I have built svn server on my nginx webserver. my nginx configuration is

server {
        listen  80;
        server_name svn.mysite.com;
        location / {
        access_log off;
        proxy_pass http://svn.mysite.com:81;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
        location ~ \.php$ {
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                include fastcgi_params;
        }
}

Now, i can svn co and svn up normally without having any problem
and when i try to commit i get error:

$svn up
At revision 1285.
$ svn info
Path: .
URL: http://svn.mysite.com/elpis-repo/crons
Repository Root: http://svn.mysite.com/elpis-repo
Repository UUID: 5303c0ba-bda0-4e3c-91d8-7dab350363a1
Revision: 1285
Node Kind: directory
Schedule: normal
Last Changed Author: alaa
Last Changed Rev: 1280
Last Changed Date: 2012-04-29 10:18:34 +0300 (Sun, 29 Apr 2012)

$svn st
M       config.php
$svn ci -m "Just a test, add blank line to config" config.php
Sending        config.php
svn: Commit failed (details follow):
svn: File 'config.php' is out of date
svn: '/elpis-repo/!svn/bc/1285/crons/config.php' path not found

if i try to svn co on port 81 (my proxy_pass which is apache) and then svn ci, it will work smoothly!
but why it doesn't work when i use nginx to accomplish it?
any idea is highly appreciated.

Best Answer

The request is being caught by your \.php$ location block, and being passed to PHP via FastCGI. You need to make sure that SVN requests are always proxied to Apache. If you don't need PHP on this virtual host, just remove that location directive. If you need PHP under specific paths, make the location block more specific, such as ^/phpstuff/.*\.php$. If that isn't possible, add an empty location block before the PHP one to catch .php files under the SVN repo paths, such as:

location ~ ^/elpis-repo/.*\.php$ {}