0

我正在尝试使用 Apache 2.2、Passenger 4.0.59 和 XSendFile 0.12 配置 Rails 生产服务器。应用程序通过 Capistrano 部署。

部署的应用程序生成(可能很大)PDF#{Rails.root}/tmp并使用send_file.

问题是 Capistrano 使用符号链接指向当前部署的应用程序版本。另一方面,如果文件的实际位置在文档根目录之外,则 XSendFile 会取消引用符号链接并拒绝提供文件,即使XSendFilePath. Apache 的 error.log 状态:

(20023)The given path was above the root path: xsendfile: unable to find file: /resolved/path/to/file.pdf

PassengerAppRoot当我设置到XSendFilePath当前版本的应用程序的实际位置时,一切正常,路径上没有符号链接。但是直到下一次部署都可以,这需要重新配置apache。不是很有用。

我应该如何配置 Capistrano 部署和 XSendFile 参数以使其协同工作?

我尝试了Capistrano & X-Sendfilemod_xsendfileln -nFs中描述的解决方案,但没有一个有效。

4

1 回答 1

0

我终于设法使它工作。给遇到 XSendFile 问题的人的一些提示

  1. 我设置XSendFilePath为用户的$HOME,路径上没有符号链接$HOME,所以它可以工作。从功能和安全的角度来看,我可以接受这一点,但这显然是一种解决方法。
  2. 请注意,XSendFilePath它对包含多个斜杠的路径很敏感/like//this。我正在使用 apache 宏,在连接XSendFilePath一些宏参数的参数时,我放了一些过时的斜杠。这导致 XSendFile 拒绝发送文件。

祝你好运!

于 2015-03-04T20:32:44.323 回答