测试机器为一个debian的lxd容器,本地安装nginx默认配置文件在/etc/nginx/nginx.conf文件下,保持配置文件不修改,确保include /etc/nginx/conf.d/*.conf未被注释,默认是有的。

基本配置

使用虚拟主机,在/etc/nginx/conf.d/文件夹下添加如下download.conf配置文件

server {
        listen 80;
        # 访问日志
        access_log /var/log/nginx/d_access.log;
        # 错误日志
        error_log /var/log/nginx/d_error.log;

        # 存放文件的目录
        root /var/www/html;

        location / {
                # 开启文件索引
                autoindex on;
                # 关闭文件的实际大小on为bytes,off为M、K、G单位
                autoindex_exact_size off;
                # 默认为off,显示的文件时间为GMT时间,on为本地时间
                autoindex_localtime on;
                # 修复中文乱码
                charset utf-8,gbk;
        }
}

运行nginx -t检测配置是否准确

systemctl start nginx.service启动服务,现在浏览器输入http://ip会列出/var/www/html目录下的文件问题。

使用远程smb共享文件夹

说明下如何使用远程smb共享文件夹作为下载站根目录。

挂载smb远程文件夹

mount -t cifs -o uid=www-data,gid=www-data,ro,username=用户名,password=密码,vers=2.0 //远程服务器ip/文件夹 本地挂载路径

注意

  • uid=www-data,gid=www-data必须加,否则会报403错误
  • 群晖需要指定smb版本,加参数vers=2.0,其他系统可以不加

修改download.conf文件中的路径为挂载路径,重启nginx即可。

问题

挂载smb报权限错误

mount.nfs: Operation not permitted

因为容器是非特权容器,在容器内使用root并不是真正的特权用户,因此仍然无法挂载NFS文件系统,CIFS也是一样的问题。

解决办法:将容器设置为特权容器:

$ lxc config set container raw.lxc "lxc.apparmor.profile=unconfined"
$ lxc config set container security.privileged true
$ lxc restart container

pve需要在创建容器的时候指定特权用户,即不要勾选unprivileged container

CleanShot-2021-01-20_17.13.39@2x

参考

https://fythonfang.com/blog/post/3

https://michalkowol.github.io/posts/2016-11-07-nginx-cifs/

https://openwares.net/2019/10/24/lxd-container-mount-nfs-cifs/