Nginx的服务静态文件,并得到403禁止

只是想帮助别人。 是的,你只是想用nginx来提供静态文件,而且你在nginx.conf里有了一切:

location /static { autoindex on; #root /root/downloads/boxes/; alias /root/downloads/boxes/; } 

但最后你失败了 你从浏览器中获得“403禁止”…

—————————————- 以下答案: —— ———————————-

解决scheme非常简单:


方法1:以'/ root / downloads / boxes /'所有者的身份运行nginx

nginx.conf中

 #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; 

是的,在第一行“ #user noboy; ”中,删除“ ”,在Linux / OS X中将“ nobody ”更改为你自己的用户名,也就是换成“ root ”进行testing。 重新启动nginx。

注意 ,你最好不要以root身份运行nginx ! 这里只是为了testing,对黑客来说是危险的。

有关更多参考,请参见nginx(引擎X) – 在BUM中是多么痛苦! [13:许可被拒绝]


方法2:将“/ root / downloads / boxes /”所有者更改为“www-data”或“nobody”

docker

 ps aux | grep nginx 

获取运行nginx的用户名。 它应该是'www-data''nobody'由nginx的版本决定的。 然后点击terminal(例如使用“www-data” ):

 chown -R www-data:www-data /root/downloads/boxes/ 

—————————— 更重要的是: ————– —————-

这些父目录“/”“/ root”“/ root / downloads”应该赋予“www-data”“nobody”的执行权限。 即

 ls -al /root chmod o+x /root chmod o+x /root/downloads 

有关更多参考资料,请参阅解决 所有文件禁止的 “403禁止”错误和Nginx 403

你应该给nginx权限来读取文件。 这意味着你应该给运行nginx进程权限的用户读取文件。

运行nginx进程的用户可以通过nginx配置中的user指令进行配置,通常位于nginx.conf顶部的某处:

 user www-data 

http://wiki.nginx.org/Coremodulee#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指定用户名,比如chown www-data:www-data my-file.html 。 但设置组权限正确应该足以使nginx能够读取文件。

在深入挖掘非常有用的答案后,决定收集与权限有关的所有信息作为配方。 具体来说, 最安全的最简单的解决方案 (=最小的权限)。

  1. 假设我们以用户admin身份部署网站,也就是说,她拥有站点目录和其中的所有内容。 我们不想以这个用户运行nginx(权限太多)。 可以测试,不用于产品。
  2. 默认情况下,Nginx以worker用户nginx身份运行worker,也就是说,config包含line user nginx
  3. 默认情况下,用户nginx在同名的组中: nginx
  4. 我们希望在不更改文件所有权的情况下为用户nginx提供最小权限。 这似乎是最安全的天真选择。
  5. 为了提供静态文件,文件夹层次结构中的最小必需权限(请参阅组权限)应该是这样的(使用命令名称namei -l /home/admin/WebProject/site/static/hmenu.css ):

    dr-xr-xr-x root root /
    drwxr-xr-x根目录
    drwxr-x —管理员nginx admin
    drwx – x — admin nginx WebProject
    drwx – x — admin nginx网站
    drwx – x — admin nginx静态
    -rwxr —–管理员nginx hmenu.css

  6. 接下来,如何获得这个美丽的图片? 要更改dirs的组所有权,我们首先应用sudo chown :nginx /home/admin/WebProject/site/static ,然后从右侧一个一个地重复删除dirs命令。

  7. 要更改dirs的权限,我们应用sudo chmod g+x /home/admin/WebProject/site/static并再次剥离dirs。

  8. 更改/静态目录中的文件组: sudo chown -R :nginx /home/admin/WebProject/site/static

  9. 最后,更改/ static目录中的文件权限: sudo chmod g+r /home/admin/WebProject/site/static/*

(当然可以创建一个专门的小组并更改用户名,但是这会使叙述变得模糊不清。)

为接受答案

sudo chown -R :www-data static_folder

用于更改该文件夹中所有文件的组所有者

由于Nginx正在直接处理静态文件,因此需要访问相应的目录。 我们需要给它的主目录的可执行权限。

最安全的方法是将Nginx用户添加到我们自己的用户组中。 然后,我们可以将可执行权限添加到我们的主目录的组所有者,给予Nginx足够的访问权限来提供文件:

sudo usermod -a -G your_user nginx

chmod 710 / home / your_user