Configuration

如何正確使用 NginX 位置指令?

  • April 7, 2011

我正在嘗試使用通過 apt 在帶有 NginX 的 Ubuntu 10.10 上安裝的 phpmyadmin 軟體包,雖然我最終讓它工作了,但我認為我做的不正確:

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 請求)。

引用自:https://serverfault.com/questions/256782