目标:
我正在使用一个 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
- 尝试通过 www-data 挂载 sshfs这里
- 尝试在 sshfs 之外设置根目录并连接到站点
检查配置中是否有行
索引 index.html index.htm;
或者通过完整链接连接到网站,例如 192.168.0.20/index.html
- 尾部-f你的 nginx 访问和错误日志