tags:

views:

2922

answers:

2

I've set up Nginx as my main web server and have two Mochiweb based servers behind it. Certain requests are reverse-proxied to these two servers. now, I want to access phpmyadmin (located at /var/www/nginx-default/phpMyAdmin) using nginx, but it keeps saying Error 404 not found. Am I missing something obvious here?

server {
    ############### General Settings ####################
    listen   80;
    server_name  localhost;
    access_log  /home/me/dev/wwwaccess.log;

    ############## Document Root ####################### 
    location / {
     root   /home/me/dev;
     index  index.html index.htm index.php;
    }

    ############## PHPMyAdmin ####################### 
    location /phpmyadmin {
     root   /var/www/nginx-default/phpMyAdmin;
     index  index.html index.htm index.php;
    }

    ############## Proxy Settings for FastCGI Server #####
    location ~ \.php$ {
     fastcgi_pass   127.0.0.1:9000;
     fastcgi_index  index.php;
     fastcgi_param  SCRIPT_FILENAME  /home/me/dev$fastcgi_script_name;
     include /etc/nginx/fastcgi_params;
    }


    ############# Proxy Settings for Mochi1 ###############
    location /mochi1 {
            proxy_pass         http://127.0.0.1:8000;
            proxy_redirect     off;

            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

            client_max_body_size       10m;
            client_body_buffer_size    128k;

            proxy_connect_timeout      90;
            proxy_send_timeout         90;
            proxy_read_timeout         3600;

            proxy_buffering off;
        }

    ############# Proxy Settings for Mochi2 ###############
    location /mochi2 {
            proxy_pass         http://127.0.0.1:8001;
            proxy_redirect     off;

            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

            client_max_body_size       10m;
            client_body_buffer_size    128k;

            proxy_connect_timeout      90;
            proxy_send_timeout         90;
            proxy_read_timeout         3600;

            proxy_buffering off;
        }

    ############# Error redirection pages ################
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
     root   /home/me/dev;
    }
}
A: 

Perhaps it searches for index.html? Try changing to

location /phpmyadmin {
    root   /var/www/nginx-default/phpMyAdmin;
    index index.php;
}

and add section below, to avoid case-related issues

location /phpMyAdmin {
   rewrite ^/* /phpmyadmin last;
}
windyjonas
+3  A: 

The problem here is that only the "best" location directive gets taken, in this order:

 location =  <path>  (longest match wins)
 location ^~ <path>  (longest match wins)
 location ~  <path>  (first defined match wins)
 location    <path>  (longest match wins)

Using this ruleset, your /myPhpAdmin location directive is beaten out by the regular expression ".php$" location directive, so the former is ignored entirely. Additionally, your php fastcgi directive is hard-wired to your /home/me/dev directory, which means that myphpadmin is totally inaccessible. You can use a rewrite to get the correct root for your myphpadmin scripts:

location ~ \.php$ {
    set $php_root /home/me/dev;
    if ($request_uri ~* /myphpadmin) {
        set $php_root /var/www/nginx-default/phpMyAdmin;
    }

    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $php_root$fastcgi_script_name;
    include /etc/nginx/fastcgi_params;
}
Marcus Griep
Thanks for the answer! I tried this a long time back but it never worked back then. I always got HTTP 404 errors. Only now I figured out the problem. I had the phpmyadmin files under /var/www/nginx-default/phpmyadmin. When nginx processes the directive for a php file, it searches inside /var/www/nginx-default/phpmyadmin/phpmyadmin the second phpmyadmin being the one from the request. That is from the root directory, it searches for the relative directory which is again phpmyadmin. So I had to create another directory inside phpmyadmin and put all the files there. Now it works!
ErJab
+1 I just burned up the last 2 hours trying to figure out the issue with my nginx.conf and FINALLY ended up here... I'm new to nginx and it's very frustrating to get things just right...
xyld