使用不同端口的nginx和docker容器实现反向代理

使用不同端口的nginx和docker容器实现反向代理,nginx,docker,reverse-proxy,docker-container,Nginx,Docker,Reverse Proxy,Docker Container,我在不同的端口上有三个docker容器,并且希望使用nginx对每个容器实现反向代理,这样我就可以通过传递关键字而不是端口来导航到每个容器。喜欢而不是http://localhost:3000我想像http://localhost/app1 我用下面的dockerfile创建了nginx图像 FROM nginx:alpine COPY nginx.conf /etc/nginx/nginx.conf COPY index.html usr/share/nginx/html 我的nginx c

我在不同的端口上有三个docker容器,并且希望使用nginx对每个容器实现反向代理,这样我就可以通过传递关键字而不是端口来导航到每个容器。喜欢而不是
http://localhost:3000
我想像
http://localhost/app1

我用下面的dockerfile创建了nginx图像

FROM nginx:alpine
COPY nginx.conf /etc/nginx/nginx.conf
COPY index.html usr/share/nginx/html
我的nginx conf文件如下所示:

worker_processes 1;


events { worker_connections 1024; }

http {

    sendfile on;

    upstream app1 {
        server localhost:3000;
    }

    upstream app2 {
        server localhost:3001;
    }

    server {
        listen 3000;

        location /app1 {
            proxy_pass         http://localhost:3000;
            proxy_redirect     off;
            proxy_set_header   Host $host;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Host $server_name;
        }
    }

    server {
        listen 3001;

        location /app2 {
            proxy_pass         http://localhost:3001;
            proxy_redirect     off;
            proxy_set_header   Host $host;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Host $server_name;
        }
    }
}

但是在从图像创建nginx容器之后。我看到了创建的容器。但当我尝试使用localhost访问时,它超时了,所以nginx没有运行,或者我错过了什么。我无法加载带有localhost/app1或app2的容器,甚至localhost不工作。需要帮助。提前感谢。

启动容器时,您正在暴露端口80和443,但我看不到您在nginx配置中监听这些端口

请尝试将
listen 3000
替换为
listen 80
,然后尝试访问
localhost/app1

在启动docker容器时,我还可以看到您正在使用
--link
。因此,我认为应该使用
app1
app2
而不是
localhost
。请让我知道,如果有什么我错过了,所以它不是这样的情况。您还必须确保您的应用程序可以在这些端口(3000和3001)上访问

另外,您的两个位置应位于同一服务器块中:

server {
    listen 80;

    location /app1 {
        proxy_pass         http://app1:3000;
        proxy_redirect     off;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Host $server_name;
    }

    location /app2 {
        proxy_pass         http://app2:3001;
        proxy_redirect     off;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Host $server_name;
    }
}

谢谢你的回答。我把它改成了80端口,但现在我得到了500端口error@Jes这通常意味着你的应用程序正在崩溃。你应该检查你的应用程序日志