nginx目录索引被禁止(403错误)

时间:2018-05-06 02:49:19

标签: nginx http-status-code-403

在node.js应用程序中,我遇到了一个奇怪的问题,即所有媒体文件都会从nginx中获得403错误。 文件结构是这样的:

/www/
└── app
    ├── assets
    │   ├── fonts
    │   │   └── bootstrap
    │   ├── images
    │   │   ├── ios
    │   │   └── photoswipe
    │   ├── js
    │   └── vendor-css
    └── public  <-----------(here is the problem)
        └── files
            ├── attachments
            │   ├── thumbnails
            │   └── thumbnails2
            └── profilepics

这是我的nginx配置

server {
  listen example.com:80 default_server;
  server_name example.com;
  root /www/app;

  location ~ ^/media/ {
   alias /www/app/public/files;
  }


  location / {
   root /www/app;
  }

 location ~ ^/assets/ {
   root /www/app;
  }

  location ~ ^.+\..+$ {
    try_files $uri =404;
  }

}


server {
  listen api.example.com:80;
  server_name api.example.com;
  location / {
   proxy_pass http://localhost:3000;
   proxy_http_version 1.1;
   proxy_set_header X-Forwarded-Proto https;
   proxy_set_header Upgrade $http_upgrade;
   proxy_set_header Connection 'upgrade';
   proxy_set_header Host $host;
   proxy_cache_bypass $http_upgrade;

  }
}

我已将777设置为/www的文件权限(我知道这不是好习惯,只是为了测试):

# ls -al /www
total 6212
drwxrwxrwx  3 www-data www-data    4096 May  4 03:26 .
drwxr-xr-x 24 root     root        4096 May  4 00:24 ..
drwxrwxrwx  4 www-data www-data    4096 May  5 16:08 app



ls -al /www/app/public/files
total 16
drwxrwxrwx 4 www-data www-data 4096 May  5 15:59 .
drwxrwxrwx 3 www-data www-data 4096 May  5 15:59 ..
drwxrwxrwx 4 www-data www-data 4096 May  5 16:10 attachments
drwxrwxrwx 2 www-data www-data 4096 May  5 15:59 profilepics

示例nginx错误日志:

  

[错误] 30102#30102:* 34目录索引&#34; / www / app / public / files&#34;是   禁止,客户端:1.2.3.4,server:example.com,request:&#34; GET   /media/attachments/mycat.jpg/ HTTP / 1.1&#34;,主持人:&#34; example.com&#34;,   推荐人:&#34; http://example.com/&#34;

请注意,nginx会自动添加尾部斜杠。

当我尝试使用curl获取mycat.jpg(没有斜线)时,我得到:

  

301永久移动

正确呈现其他路径上的文件,即/www/app/assets

我已经移动到/public/files的路径并且使用了nginx配置,但这个问题仍然让我困扰了好几个小时。非常感谢您帮助解决此问题。

1 个答案:

答案 0 :(得分:0)

成为root应该解决问题。你试图访问图像“mycat.jpg”时是否是root用户?您可以使用“chmod”

更改它们的访问规则