上游 html 连接被拒绝 - NGINX

上游 html 连接被拒绝 - NGINX

我在 Docker 容器上运行一个 html 文件,其 URL 为:http://localhost:80 我想要使用 NGINX 将其重定向到另一个端口,例如 http://localhost:8080。我对此进行了以下配置:

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include mime.types;
    sendfile on;
    upstream web {
    server 127.0.0.1:80;

}

    server {
    listen       8080;
    resolver 127.0.0.11;
    autoindex off;
    
    server_name _;
    server_tokens off;

    location / {
        proxy_pass http://web;
    }
}
}

但是当我访问 http://localhost:8080 时,出现 502 错误网关错误,以下是我通过 nginx 容器收到的错误:

[error] 22#22: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 172.17.0.1, server: _, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:80/", host: "localhost:8080"

这是我启动 nginx docker 的方式:

docker run --name nginx -v c:/Users/ds-nginx-conf-main:/etc/nginx -p 8080:8080 -d nginx

以下是 Web 容器或预激容器的 docker compose 文件:

version: "3.7"

services:   
    web:
        build: ui
        ports:
          - 80:80
        depends_on:
          - api
    api:
        build: app
        environment:
          - PORT=80
        ports:
          - 8020:80
    
    test:
        build:        
          context: ./
          dockerfile: ./test/Dockerfile

答案1

Docker 容器内的进程在其自己的命名空间内运行。

每个容器都有自己的虚拟环回接口,与主机的环回接口是分开的。

如果您想从一个容器内部访问另一个容器,则需要将这些容器链接在一起。

docker run --link othercontainer ...

然后您可以通过名称从第二个容器访问第一个容器。

其他选项是在 docker 内部创建一个由两个容器使用的网络,或者让两个容器使用主机网络(通常不鼓励这样做,因为它增加了容器的攻击面)。

相关内容