我有一个使用 Elixir Phoenix 框架构建的网站。该网站在开发和生产模式下都运行良好。
当phoenix服务器在开发模式下运行时,我更新Let's Encrypt证书没有问题,但是当完全一样应用程序正在生产模式下运行,尝试更新时我不断收到权限错误。请注意,我正在谈论完全一样应用程序,在sameFreeBSD 服务器,由same用户 - 两个命令都没有sudo
. The only区别在于MIX_ENV=prod
我还注意到,在 prod 模式下,当 Letsencrypt 尝试访问我的时,phoenix 服务器会记录 404 错误priv/static/.well-known/acme-challenge/(some-unique-string)
我对 Phoenix + LetsEncrypt 的基本设置详细介绍于这篇博文 https://medium.com/@a4word/phoenix-app-secured-with-let-s-encrypt-469ac0995775#.dkziajbxe
问题是:phoenix 服务器如何在“prod”和“dev”模式之间以不同的方式处理目录/文件权限?
- 使用 Elixir 1.2.4 和 Phoenix 1.1.4
UPDATE:
各位,由于 LetsEncrypt 和 Phoenix 框架发展迅速,如果您使用 LetsEncrypt 和 Phoenix 1.2.0 的最新 cerbot,我上面列出的问题不再是问题
但这不一定是原始问题的答案。
我已经通过使用路线而不是文件解决了这个问题:
scope "/.well-known", MyApp do
get "/acme-challenge/:challenge", AcmeChallengeController, :show
end
还有一个简单的控制器..
defmodule AcmeChallengeController do
use MyApp, :controller
def show(conn, %{"challenge" => "the_random_file_name"}) do
send_resp(conn, 200, "TheHashInTheFile")
end
def show(conn, _) do
send_resp(conn, 200, "Not valid")
end
end
这是硬编码、编译的,并且比发送文件更快,但是,也可以使用某种键/值存储,并在 UI 内管理(添加/删除)挑战,而无需重新部署。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)