我有一台在 Rails 上运行应用程序(Redmine)的服务器,带有 Passenger,我需要编写脚本访问 Redmine REST API(从服务器本身 - 我不需要远程访问)。
问题在于 Redmine 位于 Apache 反向代理后面。在我真正访问 Redmine 之前,需要进行 OIDC 登录,我发现这很难处理(客户端必须先获取访问令牌,然后才能发出 cURL 请求)。
问题:是否有某种方法可以从本地主机进行 API 调用,绕过 Apache 前端,这样我就不必处理 SSL 和 OIDC 登录?使用我熟悉的其他 (Java) 反向代理,Apache 会将 HTTP 请求传递到已知端口,然后我就可以直接在该端口上访问应用程序,绕过 SSL 和 OIDC。但是,似乎没有办法使用 Passenger 做到这一点。
您需要连接到 Passenger,而不是绕过它。如果 Apache 已在运行一个实例,则可以运行另一个实例。您必须设置
passenger_document_root
(这将解决//public
错误)。假设您处于生产环境中,Passenger 正在监听 3000(检查日志或 netstat/etc):确保管理员设置启用 REST API(管理 > 设置 > API > 启用 REST Web 服务)。现在您可以直接从客户端 cURL 进行操作。这应该会为您提供一个用户列表:
您需要管理员用户名和密码才能执行许多 API 操作。这会完全绕过前端,因此无需 SSL 证书等。
编辑
我根据一些旧笔记写了这个。我又试了一次,我认为设置
passenger_document_root
环境变量是没有必要的。但是,似乎必须从passenger start
安装目录(包含目录的目录)运行config
。大概有另一个环境变量可以在不更改该目录的情况下处理这个问题。