【问题标题】:Why is Nginx returning a 502 error when I run it via docker为什么当我通过 docker 运行 Nginx 时返回 502 错误
【发布时间】:2021-10-26 14:59:11
【问题描述】:

我在端口 1337 上有一个节点 js 应用程序。我正在尝试通过 nginx 和 docker 为其添加反向代理。 我正在创建以下 DOCKERFILE:

FROM nginx:alpine

COPY ./nginx.conf /etc/nginx/nginx.conf

ENTRYPOINT ["nginx", "-g", "daemon off;"]

我的 nginx 配置:

events{
    worker_connections 50000;
}

http {

    server {
        listen  80;
    location / {
        proxy_pass http://localhost:1337;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
    }

}

我运行了这些命令:

docker build -t back-nginx-docker .
docker run -d -p 80:80 back-nginx-docker

然后我得到错误 502 :(

【问题讨论】:

    标签: node.js docker nginx dockerfile


    【解决方案1】:

    您的 docker-container 在他自己的网络中运行。它无法与主机上的端口通信。

    要更改,您可以执行以下步骤之一:

    1. 使用主机网络
      您可以在主机网络中启动您的 docker-container(但它不适用于 Windows)。

      ~ docker run -d -p 80:80 --network=host back-nginx-docker
      
    2. 使用 host-ip 代替 localhost
      获取 docker-network-adapter 的 ip。

      ~ docker network inspect bridge --format='{{(index .IPAM.Config 0).Gateway}}'
      

      并在你的 nginx.conf 中使用它。通常是172.17.0.1

      location / {
         proxy_pass http://172.17.0.1:1337;
         proxy_http_version 1.1;
         proxy_set_header Upgrade $http_upgrade;
         proxy_set_header Connection 'upgrade';
         proxy_set_header Host $host;
         proxy_cache_bypass $http_upgrade;
      }
      

      只有在您的节点应用程序将侦听0.0.0.0:1337 而不是127.0.0.1:1337 时,它才会起作用


    最好使用环境变量而不是“硬编码”地址。

    Server Fault How can I use environment variables in Nginx.conf

    【讨论】:

      猜你喜欢
      • 2016-04-16
      • 2020-11-12
      • 1970-01-01
      • 1970-01-01
      • 2017-02-03
      • 1970-01-01
      • 2020-12-15
      • 1970-01-01
      • 2021-08-07
      相关资源
      最近更新 更多