502 错误网关 Elixir/Phoenix
502 Bad Gateway Elixir/Phoenix
我已经设置了一个新的 Ubuntu 18.04 服务器并部署了我的 phoenix 应用程序,但是在尝试访问它时出现 502 错误。
我还没有域名,因为我要从另一台服务器转移一个,所以只是尝试连接 IP 地址。
Phoenix 应用程序已部署 运行,我可以使用 edeliver ping 通它。
产品会议:
config :app, AppWeb.Endpoint,
load_from_system_env: false,
url: [host: "127.0.0.1", port: 4013],
cache_static_manifest: "priv/static/cache_manifest.json",
check_origin: true,
root: ".",
version: Mix.Project.config[:version]
config :logger, level: :info
config :phoenix, :serve_endpoints, true
import_config "prod.secret.exs"
Nginx 配置文件:
server {
listen 80;
server_name _;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://127.0.0.1:4013;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Nginx 错误日志:
2020/05/14 22:28:23 [error] 22908#22908: *24 connect() failed (111: Connection refused) while connecting to upstream, client: ipaddress, server: _, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:4013/", host: "ipaddress"
编辑:
确认应用程序存在的 OTP 日志的最后两个条目
===== ALIVE Fri May 15 07:33:19 UTC 2020
===== ALIVE Fri May 15 07:48:19 UTC 2020
编辑 2:
我已经发布了一个要点,详细说明了我从一个干净的 Ubuntu 盒子到我现在所处位置所采取的所有步骤:https://gist.github.com/phollyer/cb3428e6c23b11fadc5105cea1379a7c
谢谢
您必须将 server: true
添加到您的配置中,例如:
config :wtmitu, WtmituWeb.Endpoint,
server: true, # <-- this line
load_from_system_env: false,
...
您不必将它添加到 dev
环境中,因为 mix phx.server
已经为您完成了。
已解决如下:
有两个问题需要解决。
- 需要将
config :app, AppWeb.Endpoint, server: true
添加到 prod.secret.exs
或 prod.exs
。
- 我有一个 运行 过程遗留下来,最初是因为错误地将
staging
部署到同一台服务器。我本来是登录服务器的,然后用./bin/app stop
停止了staging,可能这就留下了一个进程运行,也可能是后来我莫名其妙的启动了这个进程。反正我用ps ux
列出了运行个进程,发现其中一个进程在它的路径中列出了staging
,所以我杀掉了all运行 与部署相关的流程,包括暂存和生产,以及 kill -9 processId
,重新部署到生产,现在一切正常。
我已经设置了一个新的 Ubuntu 18.04 服务器并部署了我的 phoenix 应用程序,但是在尝试访问它时出现 502 错误。
我还没有域名,因为我要从另一台服务器转移一个,所以只是尝试连接 IP 地址。
Phoenix 应用程序已部署 运行,我可以使用 edeliver ping 通它。
产品会议:
config :app, AppWeb.Endpoint,
load_from_system_env: false,
url: [host: "127.0.0.1", port: 4013],
cache_static_manifest: "priv/static/cache_manifest.json",
check_origin: true,
root: ".",
version: Mix.Project.config[:version]
config :logger, level: :info
config :phoenix, :serve_endpoints, true
import_config "prod.secret.exs"
Nginx 配置文件:
server {
listen 80;
server_name _;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://127.0.0.1:4013;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Nginx 错误日志:
2020/05/14 22:28:23 [error] 22908#22908: *24 connect() failed (111: Connection refused) while connecting to upstream, client: ipaddress, server: _, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:4013/", host: "ipaddress"
编辑:
确认应用程序存在的 OTP 日志的最后两个条目
===== ALIVE Fri May 15 07:33:19 UTC 2020
===== ALIVE Fri May 15 07:48:19 UTC 2020
编辑 2:
我已经发布了一个要点,详细说明了我从一个干净的 Ubuntu 盒子到我现在所处位置所采取的所有步骤:https://gist.github.com/phollyer/cb3428e6c23b11fadc5105cea1379a7c 谢谢
您必须将 server: true
添加到您的配置中,例如:
config :wtmitu, WtmituWeb.Endpoint,
server: true, # <-- this line
load_from_system_env: false,
...
您不必将它添加到 dev
环境中,因为 mix phx.server
已经为您完成了。
已解决如下:
有两个问题需要解决。
- 需要将
config :app, AppWeb.Endpoint, server: true
添加到prod.secret.exs
或prod.exs
。 - 我有一个 运行 过程遗留下来,最初是因为错误地将
staging
部署到同一台服务器。我本来是登录服务器的,然后用./bin/app stop
停止了staging,可能这就留下了一个进程运行,也可能是后来我莫名其妙的启动了这个进程。反正我用ps ux
列出了运行个进程,发现其中一个进程在它的路径中列出了staging
,所以我杀掉了all运行 与部署相关的流程,包括暂存和生产,以及kill -9 processId
,重新部署到生产,现在一切正常。