使用Nginx proxy_pass的多个Docker容器

时间:2018-03-06 13:13:28

标签: docker nginx nginx-reverse-proxy

我有以下设置:

  • 安装了Docker的1台计算机
  • 1个域名(例如mydomain.com
  • 3个容器
    • Portainer(收听端口9000)
    • Jupyter(收听8888号港口)
    • Nginx的

我遇到的问题是从外部代理请求(使用nginx容器)。因此,当我访问mydomain.com/juputer时,应该指向jupyter容器,而mydomain.com/portainer应该指向portainer容器。从本地计算机访问这两个容器很好。

我设法让prtainer容器可以从外部访问,但不能使其适用于其他容器。

通过portainer访问mydomain.com/portainer时,所有链接都会被正确重定向(mydomain.com/portainer/#/dashboardmydomain.com/portainer/#/containers等)但是当尝试访问jupyter容器时,我会获得404和该网址已更改为mydomain.com/tree?tree?是Jupyter的一部分,但我希望链接为mydomain.com/jupyter/tree?

我在nginx.conf尝试过其他一些配置选项,但似乎没有什么对我有用

这是可以从Nginx方或其特定应用程序修复的内容(如果可能,应编辑应用程序的配置)

nginx.conf:

worker_processes 1;

events { worker_connections 1024; }

http {

log_format compression '$remote_addr - $remote_user [$time_local] '
    '"$request" $status $upstream_addr '
    '"$http_referer" "$http_user_agent" "$gzip_ratio"';

#172.17.0.2 and 172.17.0.4 are the containers internal ip
#ips will be replaced by names in the future

upstream portainer {
    server 172.17.0.2:9000;
}

upstream jupyter {
    server 172.17.0.4:8888;
}   

server {
    listen 80;
    access_log /var/log/nginx/access.log compression;

    location /portainer/ {
        proxy_pass         http://portainer/;
        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 /jupyter/ {
        proxy_pass         http://jupyter/;
        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;
    }
}

}

0 个答案:

没有答案