nginx 无法读取已挂载的 /usr/share/nginx/html

nginx 无法读取已挂载的 /usr/share/nginx/html

目标:

我正在使用一个 NGINX 容器,在其中挂载了一个远程 SSHFS 文件系统 /usr/共享/nginx/html,目的是每次使用一个新的无状态的 nginx 容器,但具有相同的持久内容。

执行的步骤:

- 确保 SSHFS 服务器已启动并正在运行。-
在 nginx 容器(sshfs 客户端)上,我将远程 sshfs 文件系统挂载到 /usr/share/nginx/html

/ # sshfs  [email protected]:/data /usr/share/nginx/html
[email protected]'s password:  / #

- 安装看起来不错:

/ # mount | grep sshfs

[email protected]:/data on /usr/share/nginx/html type fuse.sshfs
(rw,nosuid,nodev,relatime,user_id=0,group_id=0)  

/ # df -h
Filesystem                 Size  Used Avail Use% Mounted on  
rootfs                     886G  681G  161G  81% /  
none                       886G  681G  161G  81% /  
tmpfs                      7.9G     0  7.9G   0% /dev  
tmpfs                      7.9G     0  7.9G   0% /sys/fs/cgroup  
/dev/sda1                  886G  681G  161G  81% /gns3  
shm                         64M     0   64M   0% /dev/shm  
[email protected]:/data  976M  2.6M  907M   1% /usr/share/nginx/html  

- 放置几个文件,每个人都可以读取:

/ # ls -la /usr/share/nginx/html

total 36 drwxr-xr-x 1 root root  4096 Aug 20 11:48 . drwxr-xr-x 5 root
root  4096 Aug 20 11:36 ..
-rw-r--r-- 1 root root   537 Aug 20 11:48 50x.html
-rw-r--r-- 1 root root   612 Aug 20 11:48 index.html  
drwx------ 1 root root 16384 Aug 20 11:23 lost+found
-rw-r--r-- 1 root root   310 Aug 20 11:48 test.php

期望结果:

无论新的 nginx 容器是什么,我都会挂载远程 SSHFS,并且用户会浏览相同的信息。

得到结果:

Nginx 不会读取 /usr/share/nginx/html 的内容。它表现得像没有索引文件。
浏览器中什么也没有显示:

在此处输入图片描述


nginx 日志:

/ # tail /var/log/nginx/error.log
2017/08/20 15:47:16 [crit] 139#0: *3 stat() "/usr/share/nginx/html/" failed (13: Permission denied), client: 192.168.122.247, server: ajnouri.local, request: "GET / HTTP/1.1", host: "192.168.122.100"  
2017/08/20 15:47:16 [crit] 139#0: *3 stat() "/usr/share/nginx/html/404.html" failed (13: Permission denied), client: 192.168.122.247, server: ajnouri.local, request: "GET / HTTP/1.1", host: "192.168.122.100"  
2017/08/20 15:47:16 [crit] 139#0: *3 stat() "/usr/share/nginx/html/404.html" failed (13: Permission denied), client: 192.168.122.247, server: ajnouri.local, request: "GET / HTTP/1.1", host: "192.168.122.100"  

看起来“www-data”需要写入目录。

####################### 更新

因此,设法使“www-data”用户成为服务器上的普通用户,并且 sshfs 客户端成功使用“www-data”挂载“/var/www”

在服务器上,我将“www-data”主目录(/var/www)的所有者更改为 www-data:www-data

/# chown -R www-data:www-data /var/www

/ # ls -la /var/www
total 36
drwxr-xr-x 1 www-data www-data  4096 Aug 20 11:48 .
drwxr-xr-x 5 root     root      4096 Aug 20 11:36 ..
-rw-r--r-- 1 www-data www-data   537 Aug 20 11:48 50x.html
-rw-r--r-- 1 www-data www-data   612 Aug 20 11:48 index.html
drwx------ 1 www-data www-data 16384 Aug 20 11:23 lost+found
-rw-r--r-- 1 www-data www-data   310 Aug 20 11:48 test.php

######################

似乎没有解决问题。


Nginx 容器(sshfs 客户端)和 sshfs 服务器使用相同的操作系统:

/ # lsb_release -a

Distributor ID: Ubuntu
Description:    Ubuntu 14.04.1 LTS
Release:    14.04
Codename:   trusty

答案1

对于那些可能在将来有所帮助的人来说,我遇到了这个问题,经过更多的搜索后,我发现添加-o allow_other到 mount 调用可以使其工作

不知道它背后到底在做什么,或者为什么有必要这样做(设置 uid 或 gid 不会产生任何作用),但我们就这样做了。

来源:https://stackoverflow.com/questions/29330382/how-to-enable-writing-to-sshfs-directory-in-php

答案2

  1. 尝试通过 www-data 挂载 sshfs这里
  2. 尝试在 sshfs 之外设置根目录并连接到站点
  3. 检查配置中是否有行

    索引 index.html index.htm;

或者通过完整链接连接到网站,例如 192.168.0.20/index.html

  1. 尾部-f你的 nginx 访问和错误日​​志

相关内容