我知道如何使用nginx为clojure网络应用设置https。如何为凤凰城做到这一点?
在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;
我也想在凤凰城使用nginx。
1)我应该删除" http:[port:4000],"完全来自" prod.exs"?
2)我应该取消注释" https:[port:443,...." ?或者我应该同时拥有它们?我不希望网站可以通过http访问,或者我让nginx通过将用户从http重定向到https来处理它。
3)或者我应该删除https和http并让nginx处理它?</ p>
4)关键&#34; url&#34;和它的&#34;端口&#34;?
答案 0 :(得分:6)
如果您使用Nginx来终止连接的SSL部分,那么您将为HTTP和您喜欢的任何端口配置应用服务器(只要您将Nginx配置为转发它就可以使用4000)。如果您的服务器配置正确,它将无法应答HTTP端口4000请求,因此无法绕过SSL。
您在应用服务器级别引用的SSL配置会将应用服务器配置为终止SSL连接(无需Nginx)。由于cowboy,Phoenix应用程序都是“全功能”Web服务器。因此,他们可以处理SSL终止以及为应用程序的动态和静态资产提供服务。
URL配置是您的应用程序知道其域并可以生成完整的URL和路径。
答案 1 :(得分:2)
如果您在Phoenix应用程序前面使用nginx,则使用nginx终止ssl连接(您的选项3)。您仍需要在Phoenix中配置http,因为nginx将使用http代理您的应用。因此:
config :my_app, MyApp.Endpoint,
url: [host: "my_website.com", port: 4000],
http: [port: 4000]
假设您将在端口4000上配置nginx代理到您的应用。您还需要将host
配置密钥调整为您网站的基本网址,因为您生成的任何网址都将使用这个基本名称(如Jason所说)。