我已在我的 Phoenix 应用程序中添加了一些新的 Let's Encrypt SSL 证书,如此处指南中所述:https://phoenixframework.readme.io/docs/configuration-for-ssl
当我尝试在生产模式下启动服务器时,出现以下错误:
23:04:11.573 [info] Running MyAppWeb.Endpoint with Cowboy using http://:::4000
23:04:11.652 [error] Failed to start Ranch listener MyAppWeb.Endpoint.HTTPS in :ranch_ssl:listen([certfile: '/Users/FJ/projects/elixir/my_app/_build/prod/lib/my_app/priv/ssl/cert.crt', keyfile: '/Users/FJ/projects/elixir/my_app/_build/prod/lib/my_app/priv/ssl/priv.key', port: 443]) for reason :eacces (permission denied)
我不明白为什么会发生这种情况,因为我已经授予了文件几乎所有可能的读取权限:
ls -la priv/ssl/
total 16
drwxr-xr-x 4 FJ staff 128 Apr 25 23:09 ./
drwxr-xr-x 9 FJ staff 288 Apr 25 23:09 ../
-rw-r--r-- 1 FJ staff 1708 Apr 25 23:02 cert.crt
-rw-r--r-- 1 FJ staff 1708 Apr 25 23:03 priv.key
我在本地使用MacOS,但在我的生产环境(Alpine Linux)中我遇到了同样的错误。
这是生产端点配置的 SSL 部分:
https: [port: 443,
otp_app: :my_app,
keyfile: "priv/ssl/priv.key",
certfile: "priv/ssl/cert.crt"
]
我有同样的错误,并且使用
sudo MIX_ENV=prod mix phx.server
运行有效。在我的例子中,这似乎是关于在 443 上运行服务器的权限错误,并且有关证书的错误具有误导性。