我正在尝试使用在 Ubuntu 10.10 上通过 apt 安装的 phpmyadmin 包和 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 配置的信息。
答案1
看看是否有效:
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 请求)。