在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配置,但这个问题仍然让我困扰了好几个小时。非常感谢您帮助解决此问题。
答案 0 :(得分:0)
成为root应该解决问题。你试图访问图像“mycat.jpg”时是否是root用户?您可以使用“chmod”
更改它们的访问规则