我正在尝试设置将托管我的 Web 应用程序的服务器。对于每个应用程序,入口点都是一个 nginx 服务器,打包在 docker 容器中,其端口 80 转发到主机上的某个位置。服务器的端口 80 由 nginx 代理服务器监听,该服务器选择与Host
请求标头相对应的应用程序。
下面是我的简单、完全静态应用程序的 nginx 配置:
server {
listen 80;
location / {
root /usr/share/nginx/html;
index index.html;
}
}
应用程序的端口 80 绑定到主机的端口 8000。
以下是代理的配置:
server {
listen 80;
location / {
root /usr/share/nginx/html;
index index.html;
}
}
server {
listen 80;
# not real DNS, just an example
server_name static.myserver.net;
location / {
proxy_pass http://127.0.0.1:8000;
}
}
DNS记录myserver.net
和static.myserver.net
服务器的IP绑定。
但是当我尝试连接到时static.myserver.net
,出现错误 502 和如下代理日志条目:
2016/06/04 13:26:58 [error] 5#5: *2 connect() failed (111: Connection refused) while connecting to upstream, client: 100.100.100.100, server: static.myserver.net, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8000/", host: "static.myserver.net"
应用程序的 nginx 日志是空的。
myserver.net:8000
但从Web 和127.0.0.1:8000
主机都可以完全访问。那么问题出在哪里?
答案1
问题已经找到。配置似乎正确,但代理服务器也设置为 Docker 容器。因此,地址127.0.0.1
指向 Docker 容器,而不是主机。proxy_pass http://real_host_ip:8000;
工作正常。