设置 nginx 来提供子目录中的文件

设置 nginx 来提供子目录中的文件

我正在设置一个非常简单的文件服务器系统。我安装 nginx 并将其根目录设置为 ,/home以使其为用户主目录中的文件提供服务。

http://12.34.56.78/user1/testfile.bin但是,当我尝试使用浏览器下载文件时,它显示“403 Forbidden”。但是,当我使用浏览器连接时http://12.34.56.78/,它会显示我放入的默认索引页面/home/

如何让 nginx 为用户目录中的文件提供服务?例如

/home/user1

/home/user2

另外,如果我想排除根目录

/home

和系统文件

.bash_history .bash_profile .bashrc (例如,所有名称以点开头的文件)

从正在提供的文件中?

答案1

Nginx无权读取用户文件。将所有用户文件放在网络上是一个非常糟糕的主意。

更好的想法是只提供专用目录在用户主目录中。

www在访问时提供每个用户文件夹中的文件夹/<USER>,请使用以下位置:

location ~ ^/(.+?)(/.*)?$ {
  alias /home/$1/www$2;
  index  index.html index.htm;
  autoindex on;
}

您还应该允许 Nginx 访问此目录。

$ chmod 0755 /home/$USER/www

答案2

很多时候403错误是由于权限问题造成的。 Web 目录中的文件应该是全局可读的(chmod 644 或 664),目录应该是全局可读和可执行的(chmod 755 或 775)。

答案3

以上所有答案都给出了有效的解释。到目前为止还没有提到的是,error 403即使在设置了正确的权限之后,由于缓存的原因,这种情况也可能会持续存在,具体取决于您的缓存设置。

为了确保不是这种情况,请重置缓存:

rm -r /path/to/nginx/cache/*
systemctl restart nginx

相关内容