Nginx不会重定向到phpmyadmin

时间:2016-03-17 08:24:58

标签: nginx centos7

我刚刚安装了nginx,php-fpm和phpmyadmin。 这是我的www文件夹。

[root@vmi67073 etc]# ll /usr/share/nginx/html/
-rw-r--r-- 1 root root 3650 Feb 13 18:45 404.html
-rw-r--r-- 1 root root 3693 Feb 13 18:45 50x.html
drwxr-xr-x 3 root root   40 Mar 17 06:14 myapp.eu
-rw-r--r-- 1 root root 3700 Feb 13 18:45 index.html
lrwxrwxrwx 1 root root   22 Mar 17 06:52 mysql -> /usr/share/phpMyAdmin/

我在myapp.conf文件下的phpmyadmin的nginx conf文件位置如下所示

location /mysql {
        alias /usr/share/phpMyAdmin;
        location ~ \.php$ {
                index index.php index.html index.htm;
                include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $request_filename;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass 127.0.0.1:9000;
        }
}

问题: 如果我尝试访问myapp.eu/mysql我在nginx日志中出现以下错误

2016/03/17 09:21:01 [error] 2119#0: *28 directory index of "/usr/share/phpMyAdmin/" is forbidden, client: 84.52.168.135, server: euro-swap.eu, request: "GET /mysql/ HTTP/1.1", host: "euro-swap.eu"

但如果我尝试访问myapp.eu/mysql/index.php,则会显示phpmyadmin。所以我猜测nginx应该以某种方式重定向到index.php页面。

是什么导致了这个问题?怎么解决?如果您需要任何其他信息,请告诉我,我会提供。

3 个答案:

答案 0 :(得分:2)

当您尝试打开myapp.eu/mysql时,它会被外部location指令捕获。但没有为外部定义的索引。所以解决方案是从内部location移动索引指令:

location /mysql {
        alias /usr/share/phpMyAdmin;
        index index.php index.html index.htm;

        location ~ \.php$ {
                include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $request_filename;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass 127.0.0.1:9000;
        }
}

答案 1 :(得分:1)

问题出在第二个位置。 location ~ \.php$匹配以.php结尾的路径,而您的路径不是:/mysql。尝试删除它。

location /mysql {
    alias /usr/share/phpMyAdmin;
    index index.php index.html index.htm;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $request_filename;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass 127.0.0.1:9000;
}

答案 2 :(得分:1)

这是我在子域上运行phpmyadmin的解决方案。

另外,下次我遇到此问题时,我知道我可以复制/粘贴自己的解决方案:)

server {
    listen 80;
    server_name secret-sql-subdomain.site.com;
    root /usr/share/phpMyAdmin;
    location / {
        fastcgi_pass php-fpm;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}