ssl - 使用 Phoenix/Elixir 和 nginx 在服务器上设置 https

标签 ssl nginx https elixir phoenix-framework

我知道如何使用 nginx 为 clojure 网络应用程序设置 https。如何为 Phoenix 做到这一点? 在 prod.exs 我有这个:

config :my_app, MyApp.Endpoint,
  url: [host: "my_website.com", port: 443],
  http: [port: 4000],
#  https: [port: 443,
#          keyfile: System.get_env("SOME_APP_SSL_KEY_PATH"),
#          certfile: System.get_env("SOME_APP_SSL_CERT_PATH")],

  cache_static_manifest: "priv/static/manifest.json"

我有这个:

ssl_certificate:  /etc/letsencrypt/live/my_app.com/fullchain.pem;
ssl_certificate_key: /etc/letsencrypt/live/my_app.com/privkey.pem;

我也想在 Phoenix 上使用 nginx。

1) 我应该从“prod.exs”中完全删除“http: [port: 4000]”吗?

2) 我应该取消注释 "https: [port: 443,..."吗?或者我应该同时拥有它们?我不想通过 http 访问网站,或者我会让 nginx 通过将用户从 http 重定向到 https 来处理它。

3) 或者我应该删除 https 和 http 让 nginx 处理吗?

4) 关键“url”和它的“端口”怎么样?

最佳答案

如果您使用 Nginx 来终止连接的 SSL 部分,那么您可以保留为 HTTP 和您喜欢的任何端口配置的应用服务器(只要您配置 Nginx 转发到它,4000 就可以)。如果您的服务器配置正确,它不会响应 HTTP 端口 4000 请求,因此无法绕过 SSL。

您在应用服务器级别引用的 SSL 配置将应用服务器配置为终止 SSL 连接(不需要 Nginx)。由于 cowboy,Phoenix 应用程序都是“全功能”网络服务器.因此,它们可以处理 SSL 终止以及为应用程序的动态和静态 Assets 提供服务。

URL 配置使您的应用程序知道它的域并可以生成完整的 url 和路径。

关于ssl - 使用 Phoenix/Elixir 和 nginx 在服务器上设置 https,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39079244/

相关文章:

linux - nginx 已安装但站点未加载

nginx - Nginx 上 Drupal 的 AMP 参数错误

某些站点上的 Java 8 https 连接失败

Apache 上的 Django 无效的 HTTP_HOST header - 使用 Require 修复?

ios - Xing API SSL 错误

java - SSLContext 和 PKCS12 keystore - 适用于 JVM 但不适用于 Android

php - 使用 cURL 的 ftp 上传中的未知 SSL 协议(protocol)错误

django - 为什么使用 nginx 服务的网站没有应用样式

java - 如何从 Java 应用程序访问 HTTPS URL

android - Android 2.2 和 2.3 的 SSL