我目前正在尝试将我的应用程序后端部署为具有暴露到我的根服务器的端口的Docker容器。
[如果我尝试用http://example.com:3000
卷曲后端,则会超时,如果我通过nginx尝试(下面的视图配置),则会收到一个空响应(curl: (52) Empty reply from server
)。
server {
listen 443 ssl;
server_name www.example.com example.com;
client_max_body_size 50m;
ssl_certificate ... # managed by Certbot
ssl_certificate_key ... # managed by Certbot
location /backend/ {
proxy_pass http://localhost:3000/;
}
}
但是,如果我尝试从服务器本身卷曲它,则没有问题。
这是docker ps
命令的相关输出:
COMMAND CREATED STATUS PORTS NAMES
"node dist/server.js" 9 minutes ago Up 8 minutes 0.0.0.0:9100->3000/tcp backend
期望卷曲(在根服务器上运行时有效:]
$ curl http://localhost:3000
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Cannot GET /</pre>
</body>
</html>
您nginx正在运行ssl(端口443),因此您的卷曲应该是:
curl -i https://example.com/backend/
。
不指定任何后端端口。
问题出在我服务器上的iptables。一些规则被删除,导致违反了Docker配置。
简单的sudo service docker stop
是诀窍。