# 说明

本来 Vbox 虚拟机的共享文件夹用的好好的
因为电脑突然断电,重新挂载共享文件夹后发现,nginx 无法访问共享文件夹的静态文件
其他目录下,nginx 倒是访问好好的
始终没找到解决办法
最后想试试不用 Vbox 的共享文件夹,直接 windows 设置共享后挂载,最后可以访问正常了

#资源访问报错
net::ERR_CONTENT_LENGTH_MISMATCH 200 (OK)
#error log 日志
[alert] 82080#0: *53 sendfile () failed (22: Invalid argument) while sending response to client,

# 设置 windows 共享文件夹

选择一个文件夹 [share],右键 选择属性 弹出属性窗口 选择分页共享
创建共享,分配权限,可以新建一个用户比如账密为 share, 专门用来访问这个共享文件夹
成功后路径就是 //ip 地址 /share

# Linux 挂载 windows 共享文件夹

使用 mount.cifs 来挂载 windows 共享文件夹
参考链接 https://www.cnblogs.com/xia-weiwen/p/7416666.html

# 安装依赖

使用 mount.cifs 需要 cifs-utils 软件包(以及 cifs-utils 依赖的软件包)

sudo apt install cifs-utils

# 挂载共享文件夹

挂载命令

#参考
sudo mount.cifs //[address]/[folder] [mount point] -o user=[username],passwd=[pw]
#或者
sudo mount -t cifs //[address]/[folder] [mount point] -o user=[username],passwd=[pw]
# 我的具体命令
# 先创建挂载点目录
sudo mkdir /mnt/www
sudo mount -t cifs /mnt/www -o //192.168.0.179/share username="share",password="share"

挂载成功后发现,nginx 静态资源能正常访问了 [思考为什么之前 Vbox 的共享文件夹不能访问]
不过这样添加后,nginx 访问 php 项目报错 file_put_contents 权限问题,只能读,不能写

以上命令还有一些额外参数

#参考
sudo mount.cifs //[address]/[folder] [mount point] -o user=[username],passwd=[pw],uid=[UID]
#先卸载原先的挂载
sudo umount [mount point]
# 我需要 www 权限 id 为 1001 也可以设置,dir_mode=0777,file_mode=0777
id -u [username]
#我的具体命令
mount -t cifs //192.168.0.179/share /mnt/www -o username="share",password="share",uid=1001,dir_mode=0777,file_mode=0777

这样 nginx 下的 php 项目就能正常访问了

# 开机时自动挂载

使用 mount 挂载的方法在系统重新启动后就会失效,如果希望开机时自动挂载
根据自己的具体情况将下面设置加入 /etc/fstab 文件最后面就可以了。

//192.168.0.179/share /mnt/www cifs defaults,username=share,password=share,uid=1001,dir_mode=0777,file_mode=0777 0 2

# 进阶

vbox 网络 之前一直选择桥接模式,并且设置了固定 IP, 方便局域网内的其他主机访问。
但是家庭和工作网络环境差异,IP 网段差异,不能正常使用虚拟机。
可以设置双网卡,比如,一个桥接,一个 host-only,
其中 host-only 模式下,默认网段 192.168.56.* ,宿主机默认 IP 192.168.56.1
可以根据个人需要设置,并且不会因为网络环境改变,影响虚拟机的使用

# 遇到的坑

起先挂载是不顺利 一直报错
参考链接 https://blog.csdn.net/u010886217/article/details/102781023

mount error(13): Permission denied
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs) and kernel log messages (dmesg)

Windwos 的安全策略

  • win+r 然后输入 “gpedit.msc”
  • 网络访问:本地账户的共享和安全模型
  • 修改设置为 “经典”

Alt

# failed: Host is down

实际主机是正常的,挂载远程 NAS 时可以尝试指定不同的版本:vers=2.0,如果 2.0 不行,可以尝试 1.0 或 3.0

mount -t cifs //192.168.0.179/share /mnt/www -o username="share",password="share",uid=1001,dir_mode=0777,file_mode=0777,vers=2.0