环境:
CentOS7.5 + Nginx1.16 + PHP7.2.17已搭好一切,运行正常,phpinfo(); 输出正常。现准备新开一个网站,由于本机服务器的磁盘空间不足,便挂载同一局域网内的另一台服务器的共享文件夹,用于新网站的根目录。于是:mount -t  nfs  10.x.x.xxx:/dev/db4/test   /mnt/test   # 这条命令是成功执行的。且在本机上是可以列出/mnt/test 目录下的文件,且具有读写权限。并设置为开机自动挂载,一切正常!!那问题来了。。在 NGINX 的 配置文件里将网站根目录指向本机的 /mnt/test ,也就是同一局域网内的另一台服务器的共享文件夹,并在此目录下有一个 index.php 的文件,是phpinfo();的,无论修改什么,访问网站都永远是 403 错误,curl 127.0.0.1 得到的不是phpinfo();  而是得到如下:[root@server ~]# curl 127.0.0.1
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.16.0</center>
</body>
</html>然后,umount 后,在/mnt/test  下新建一个 index.php,是phpinfo();    则可以显示相应的 内容。。
请高手解答!!!

解决方案 »

  1.   

    nginx 默认禁止访问目录, 可以使用 autoindex on; 命令解除目录访问限制
      

  2.   

    贴一下 nginx的 error.log 吧
      

  3.   

    估计还是权限的问题, nginx worker的用户是nginx或者nobody, 看看这个账户是不是有权限
    # 编辑文件 /etc/fstab ,添加如下一行,保存后重启(id信息可以通过终端中的id命令查看)
    //10.1.1.100/home/ /media/smbfs cifs defaults,username=xxx,password=yyy,uid=uid,gid=gid 0 0  //有密码的samba共享//10.1.1.100/home/ /media/smbfs cifs defaults,guest 0 0                                      //无密码的samba共享
      

  4.   

    另外 mount -t  nfs  10.x.x.xxx:/dev/db4/test   /mnt/test  这条命令有问题吧
    /dev/db4 设备下哪里来的 test文件夹 ?
      

  5.   


    嗯,,对,,,,这个命令是为了不泄露我的信息,特地修改为这样的,实际的命令是可以正确执行的。。具体就不写了。。贴上 error.log 相应的敏感信息还是会隐藏一下的。。请谅解[root@server nginx]# cat /usr/local/nginx/error.log
    2019/05/24 09:15:08 [notice] 5300#5300: signal process started
    2019/05/24 09:37:36 [notice] 5354#5354: signal process started
    2019/05/24 09:37:44 [error] 5358#5358: *1 "/mnt/test/index.php" is forbidden (13: Permission denied), client: 10.x.xxx.xx, server: localhost, request: "GET / HTTP/1.1", host: "10.x.x.xxx"
    2019/05/24 09:37:47 [error] 5358#5358: *1 "/mnt/test/index.php" is forbidden (13: Permission denied), client: 10.x.xxx.xx, server: localhost, request: "GET / HTTP/1.1", host: "10.x.x.xxx"
    2019/05/24 09:37:47 [error] 5358#5358: *1 "/mnt/test/index.php" is forbidden (13: Permission denied), client: 10.x.xxx.xx, server: localhost, request: "GET / HTTP/1.1", host: "10.x.x.xxx"
    2019/05/24 09:37:47 [error] 5358#5358: *1 "/mnt/test/index.php" is forbidden (13: Permission denied), client: 10.x.xxx.xx, server: localhost, request: "GET / HTTP/1.1", host: "10.x.x.xxx"
    2019/05/24 10:01:32 [error] 3866#3866: *1 "/mnt/test/index.php" is forbidden (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET / HTTP/1.1", host: "127.0.0.1"
    2019/05/24 11:16:45 [error] 3866#3866: *2 "/mnt/test/index.php" is forbidden (13: Permission denied), client: 10.x.xxx.xx, server: localhost, request: "GET / HTTP/1.1", host: "10.x.x.xxx"-----------------------------------------------
    其中 10.x.x.xxx  和 10.x.xxx.xx  确定是网段可以互通的。。
      

  6.   


    这个 cifs 的方式,我试过无法挂载另一台Linux 服务器的 共享文件夹。可能是我不会弄吧。。不过,我安装了相关软件后,可以通过:smbclient -L 10.x.x.xxx -U user%pass 列出目标服务器的相应共享明细。。
      

  7.   

    [error] 3866#3866: *1 "/mnt/test/index.php" is forbidden ???nginx 应该用 root /mnt/test; 命令之地web根目录, 之后直接访问 index.php, 怎么能访问 /mnt/test/index.php ?
      

  8.   

    权限问题。web服务器映射完以后,获取的权限对应到nfs服务器应该是nobody用户。改一下nfs服务器目录的权限试试,或者在共享nfs的时候用(rw, no_root_squash)参数
      

  9.   

    web服务器挂载了nfs,此时你的php使用nobody身份访问nfs服务器的资源,但是权限不够,所以失败。
    在nfs服务器10.x.x.xxx上,修改一下exports参数,/dev/db4/test *(rw,sync,no_subtree_check,no_root_squash)
    测试一下如果还不行,给/dev/db4/test设置成777看看有没有效果。