Elixir Phoenix生产服务器存在Letsencrypt更新问题



我有一个用Elixir Phoenix框架建造的网站。该网站在开发和生产模式下运行良好。

当phoenix服务器在开发模式下运行时,我没有问题续订Let's Encrypt证书,但当完全相同的应用程序在生产模式下运行,我在尝试续订时不断收到权限错误。请注意,我说的是完全相同的应用程序,位于相同的reeBSD服务器上,由同一个用户执行-两者都是不带sudo的命令。唯一的差异是MIX_ENV=prod

我还注意到,在prod模式下,当Letsencrypt试图访问我的priv/static/.well-known/acme-challenge/(some-unique-string)时,phoenix服务器记录了一个404错误

问题是:phoenix服务器如何在"prod"one_answers"dev"模式下区别对待目录/文件权限

  • 使用Elixir 1.2.4和Phoenix 1.1.4

更新:

各位,由于LetsCrypt和Phoenix框架发展迅速,如果您使用LetsCrypto和Phoenix1.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中管理(添加/删除)挑战,而无需重新部署。

最新更新