2013-05-29 56 views
23

只是想帮助某人。是的,你只是想使用nginx的服务静态文件,你得到的一切权利nginx.confNginx服务静态文件并得到403禁止

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

不过,到最后,你失败了。您从浏览器中获得“403禁止”...

----------------------------------- ----- The Answer Answer: --------------------------------------- -

解决方案是很简单的:


方式1:作为用户的 '/根/下载/盒/' 所有者nginx的运行

nginx.conf

#user nobody; 
worker_processes 1; 

#error_log logs/error.log; 
#error_log logs/error.log notice; 

YES,在第一行的“#user noboy; “只是删除” “变” 无人 “以自己的用户名中的Linux/OS X,即变更为” “测试。重启nginx的。

注意 ,你最好不要只是为了测试运行nginx的!在这里,这是危险的黑客。

更多参考,请参阅nginx (engine X) – What a Pain in the BUM! [13: Permission denied]


方法2:更改 '/根/下载/盒/' 所有者 'www数据' 或 '无人'

终端

ps aux | grep nginx 

获取用户名运行nginx的。应该是'www-data''nobody'由nginx的版本决定。然后,在终端(使用'WWW的数据'例如)击中:

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

-------------------------- ---- 更重要的是: ------------------------------

这些父目录“/”“/根”“/根/下载”应该得到执行(x)的权限'www数据''无人'。即

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

更多参考,请参阅Resolving "403 Forbidden" errorNginx 403 forbidden for all files

+1

你也可以给文件权限的组nginx的是,这就是通常做的,也更符合逻辑 – rednaw

+0

一点点检查我的回答 – rednaw

+0

@rednaw,我是在stackoverflow中也是新的,对于前面的评论感到抱歉,是的,我在你回答之后做了它,但是我再次失败了。我确实将所有者更改为文件,但浏览器显示“403禁止”。 – isaacselement

回答

38

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

运行Nginx的过程与此用户的user指令在nginx的配置,通常位于的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您可以更改文件的用户和组所有者。在这个命令中,我只更改组,如果您也要更改用户,您可以指定用户名BEFORE冒号,如chown www-data:www-data my-file.html。但是设置组权限正确应该足以让nginx能够读取文件。

+4

'用户根'使问题消失,永远不再显示它的脸。 (可能过度换气开始!;-) – necromancer

+3

这可能是一个简单的解决方法,但以root身份运行程序可能会很危险。如果Nginx中存在一个利用漏洞,并且它以root身份运行,那么破解者可能会接管完整的操作系统。 – rednaw

+0

看到我过度换气的评论。是的,这是一个值得关注的问题,但通常这台机器专门用于nginx或者没有关键信息,所以即使一个破解者接管它也没什么大不了的。如果你在一个服务器上运行nginx,它也有你所有的公司IP和你的电子邮件 – necromancer

1

为接受的答案

sudo chown -R :www-data static_folder

改变所有文件的组所有者对该文件夹

1

挖成非常有用的答案后,决定收集相关权限配方一切。具体而言,具有最大安全性的最简单解决方案(=最小权限)。

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

    DR-XR-XR-X根根/
    drwxr-XR-X根的根主
    drwxr-X ---管理nginx的管理
    drwx - X ---管理nginx的WebProject
    drwx - X ---管理nginx的网站
    drwx-- x ---管理员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. 最后,在/静态目录中的文件更改权限:sudo chmod g+r /home/admin/WebProject/site/static/*

(当然,你可以创建一个专门的组和改变用户名,但这会掩盖叙述不重要的细节。)

0

由于Nginx正在直接处理静态文件,它需要访问适当的d irectories。我们需要为其主目录提供可执行权限。

最安全的方法是将Nginx用户添加到我们自己的用户组中。然后,我们可以将执行权限添加到我们的主目录的组拥有者,让刚刚够准入Nginx的服务文件:

须藤usermod命令-a -G your_user nginx的

搭配chmod 710 /家用/ your_user