Назад | Перейти на главную страницу

Как правильно использовать директиву NginX location?

Я пытаюсь использовать пакет phpmyadmin, установленный через apt в Ubuntu 10.10 с NginX, и хотя в конечном итоге мне удалось заставить его работать, я не думаю, что делаю это правильно:

server {
  listen   80; ## listen for ipv4

  server_name  vpsnet.dev;

  error_log   /home/robin/dev/vpsnet/error.log;
  access_log  /var/log/nginx/vpsnet.access.log;

  location / {
    root   /home/robin/dev/vpsnet/webroot;
    index  index.php index.html;

    if (-f $request_filename) {
        break;
    }

    if (!-f $request_filename) {
        rewrite ^/(.+)$ /index.php?url=$1 last;
        break;
    }
  }

  location /phpmyadmin {
    root /usr/share;
    index index.php index.html;
  }

  location ~ ^/phpmyadmin/.*\.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /usr/share/$fastcgi_script_name;
    include /etc/nginx/fastcgi_params;
    fastcgi_param SERVER_NAME $host;
  }

  location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /home/robin/dev/vpsnet/webroot/$fastcgi_script_name;
    include /etc/nginx/fastcgi_params;
    fastcgi_param SERVER_NAME $host;
  }
}

Речь идет, в частности, об этой части:

  location /phpmyadmin {
    root /usr/share;
    index index.php index.html;
  }

  location ~ ^/phpmyadmin/.*\.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /usr/share/$fastcgi_script_name;
    include /etc/nginx/fastcgi_params;
    fastcgi_param SERVER_NAME $host;
  }

Если я установлю root директива к /usr/share/phpmyadmin и соответственно fastcgi_param SCRIPT_FILENAME к /usr/share/phpmyadmin/$fastcgi_script_name; Я получаю 404.

Я полагаю, что сервер передает /phpmyadmin/ часть URL-адреса сервера fastcgi, но меня это смущает, поскольку я исхожу из использования Apache, и это не то, как подобные вещи работают с этим.

Мне просто интересно, может ли кто-нибудь пролить свет на это, почему он действует так и делаю ли я что-то не так. «Идеальная» установка была бы отличной, или, по крайней мере, некоторая информация о том, как лучше понять конфигурацию NginX.

Посмотрите, работает ли это:

location /phpmyadmin {
  alias /usr/share/phpmyadmin;
  index index.php index.html;
}

location ~ .php$ {
  fastcgi_pass 127.0.0.1:9000;
  fastcgi_index index.php;
  fastcgi_param SCRIPT_FILENAME /usr/share/$fastcgi_script_name;
  include /etc/nginx/fastcgi_params;
  fastcgi_param SERVER_NAME $host;
}

Ваша конфигурация не неправильно или что-нибудь. С помощью root внутри location блоков не рекомендуется, потому что, если вы получаете много блоков местоположения, он начинает запутываться (поэтому лучше иметь один корень на каждый блок сервера), но это не ваш случай, и fastcgi настройки обычно делаются шире (для всех запросов php).