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

我有不同的端口上的三个docker容器,并希望实现与每个容器的Nginx反向代理,以便我可以通过传递关键字而不是端口导航到每个容器。 喜欢而不是http://localhost:3000我想通过像http://localhost/app1

我用下面的dockerfile创build了nginx镜像。

 FROM nginx:alpine COPY nginx.conf /etc/nginx/nginx.conf COPY index.html usr/share/nginx/html 

和我的nginx conf文件看起来像

 worker_processes 1; 

事件{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; } } 

}

但从图像创buildnginx容器后。 我看到创build的容器。 但是当我试图访问本地主机超时,所以Nginx没有运行或我错过了什么。 我无法加载容器localhost / app1或app2甚至本地主机不工作。 需要帮助。 提前致谢。

当您启动容器时,您正在显示端口80和443,但是我没有看到您正在监听nginxconfiguration中的这些端口。

请尝试更换listen 3000 ,然后尝试访问localhost/app1

我也可以看到,你正在使用 – --link当你开始你的docker集装箱。 所以我认为你应该使用app1app2而不是localhost 。 请让我知道,如果有一些我错过了,所以情况并非如此。 您还必须确保您的应用程序可以在这些端口(3000和3001)上访问。

你的2个位置也应该在同一个服务器块中:

 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; } }