只是想帮助别人。是的,你只想使用nginx提供静态文件,你在nginx.conf中得到了一切:
location /static {
autoindex on;
#root /root/downloads/boxes/;
alias /root/downloads/boxes/;
}
但是,最后,你失败了。你从浏览器得到“403禁止”......
----------------------------------------下面的答案:------ ----------------------------------
解决方案非常简单:
方法1:以用户身份运行nginx作为'/ root / downloads / boxes /'所有者
在nginx.conf中:
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
是的,在第一行“#user nobody;” ,只需删除“#”,并在Linux / OS X中将“nobody”更改为您自己的用户名,即更改为“root”进行测试。重启nginx。
注意,你最好不要以root身份运行nginx!这里只是为了测试,对黑客来说是危险的。
有关更多参考,请参阅nginx (engine X) – What a Pain in the BUM! [13: Permission denied]
方式2:将'/ root / downloads / boxes /'所有者更改为'www-data'或'nobody'
在终端:
ps aux | grep nginx
获取运行nginx的用户名。应该是'www-data'或'nobody'由nginx的版本决定。然后点击终端(例如使用'www-data'):
chown -R www-data:www-data /root/downloads/boxes/
------------------------------一件更重要的事情是:-------------- ----------------
这些父目录“/”,“/ root”,“/ root / downloads”应该赋予'www-data'或'nobody'执行权限(x)。即
ls -al /root
chmod o+x /root
chmod o+x /root/downloads
有关更多参考,请参阅Resolving "403 Forbidden" error和Nginx 403 forbidden for all files
您应该授予nginx读取文件的权限。这意味着您应该为运行nginx进程权限的用户提供读取文件的权限。
运行nginx进程的用户可以使用nginx配置中的user
指令进行配置,通常位于nginx.conf
顶部的某个位置:
user www-data
http://wiki.nginx.org/CoreModule#user
你给user
的第二个参数是组,但如果你没有指定它,它使用与用户相同的参数,所以在我的例子中,用户和组都是www-data
。
现在,您要使用nginx提供的文件应具有正确的权限。 Nginx应该有权读取文件。您可以将组www-data
读取权限授予如下文件:
chown :www-data my-file.html
http://linux.die.net/man/1/chown
使用chown
,您可以更改文件的用户和组所有者。在此命令中,我只更改组,如果您也要更改用户,则应在冒号前指定用户名,如chown www-data:www-data my-file.html
。但是设置组权限应该足以让nginx能够读取文件。
由于Nginx直接处理静态文件,因此需要访问相应的目录。我们需要为它的主目录赋予它可执行权限。
最安全的方法是将Nginx用户添加到我们自己的用户组。然后,我们可以将可执行权限添加到主目录的组所有者,为Nginx提供足够的访问权限来提供文件:
sudo usermod -a -G your_user nginx
chmod 710 / home / your_user
接受的答案
sudo chown -R :www-data static_folder
用于更改该文件夹中所有文件的组所有者
在深入研究非常有用的答案后,决定收集与权限相关的所有内容作为配方。具体而言,最简单的解决方案具有最大安全性(=最小权限)。
admin
用户身份部署网站,也就是说,她拥有网站目录及其中的所有内容。我们不希望以此用户身份运行nginx(权限太多)。它可以用于测试,而不是用于测试。nginx
运行worker,即config包含行user nginx
nginx
位于具有相同名称的组中:nginx
。nginx
提供最低权限。这似乎是最安全的天真选择。namei -l /home/admin/WebProject/site/static/hmenu.css
):
dr-xr-xr-x root root /
drwxr-xr-x root root home
drwxr-x --- admin nginx admin
drwx - x --- admin nginx WebProject
drwx - x --- admin nginx网站
drwx - x --- admin nginx static
-rwxr ----- admin nginx hmenu.csssudo chown :nginx /home/admin/WebProject/site/static
,然后重复从右侧逐个剥离dirs的命令。sudo chmod g+x /home/admin/WebProject/site/static
并再次剥离dirs。sudo chown -R :nginx /home/admin/WebProject/site/static
sudo chmod g+r /home/admin/WebProject/site/static/*
(当然,可以创建一个专用组并更改用户名,但这会使叙述模糊不清。)
在nginx中设置用户root可能非常危险。必须为所有文件层次结构设置权限可能很麻烦(想象文件夹的完整路径超过10个子文件夹)。
我要做的是镜像你要共享的文件夹,在/ usr / share / nginx / any_folder_name下具有nginx配置用户的权限(通常是www-data)。你可以用bindfs做的。
在你的情况下,我会这样做:
sudo bindfs -u www-data -g www-data /root/downloads/boxes/ /usr/share/nginx/root_boxes
它会将/ root / downloads / boxes挂载到/ usr / share / nginx / root_boxes,并具有用户www-data的所有权限。现在,您在位置块配置中设置该路径
location /static {
autoindex on;
alias /usr/share/nginx/root_boxes/;
}