public 目录是对外所有可见的,但是有些资源我不想被直接访问。Rails 生产环境下,默认把资源文件预编译到 public/assets,这样安全吗?
这样做的 目的 是为了不走 Rails 应用程序,直接通过 nginx 获取资源文件,从而提高响应速度。 另外由于 assets 中存放的是 css,js,image 等一些静态文件 所以不存在安全问题。
#1 楼 @meeasyhappy 但是有些 images 我想只让特定用户可以访问。如果这样的话,放在 public/assets 会不会不太好?有没有好的解决办法?
@wcc526 public/assets/images 下面的 一些图片是为 Rails 应用程序服务,按照 Rails 的约定,这下面的文件是所有人都 能访问的。
还有一些图片是用户上传的 常放到 public/uploads/文件下。一般来说 在 Rails view 层面 控制 是否显示 就够了。如果说 用户知道图片名字可以 在浏览器 直接敲入 url 访问。
如果说 你非要控制 一些人 不管怎样 都不能访问,比如说 public/upload/vip 下面的一些文件 不能访问,那么 可以通过配置 nginx 将 请求 url 包括这个前缀的请求 转发到 Rails 应用程序 处理,然后在程序里面 控制 访问权限了。
看了你的场景,这些 images 肯定不能放在 assets 里面,因为它们本来就不是 assets,而是用户上传的文件。应该放在 uploads 或类似文件夹下,就像@meeasyhappy 说的。
对于这个场景,我觉得可以这么处理:
user_a.images << complex_token.jpg
@wcc526 就像你说的,确实不合理。应用是应用,数据是数据,两者不能混在一起。如果是 assets 图片,那么也是应用的一部分,可以在一起。如果是数据类型的图片,那就不太合适。
这个情况,如果是图简便的话,也可以这么做: