我正在设置一个非常简单的文件服务器系统。我安装 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