【问题标题】:Organize home server docker containers behind nginx proxy [resolved]在 nginx 代理后面组织家庭服务器 docker 容器 [已解决]
【发布时间】:2019-10-05 03:35:26
【问题描述】:

我有一个家庭服务器,主要用于我想组织的自托管应用程序(笔记、git 服务器、Jenkins 服务器等),因此我不必记住每个容器的所有端口。我希望设置如下结构:

我希望根端点路由到运行 google 的 cadvisor 的容器以监控我所有容器的状态,/jenkins 路由到 Jenkins,/pihole 到 pi-hole 等。

根据我对配置架构的理解,以下是我设置 docker-compose 和 nginx.conf 文件的方法:

docker-compose.yml:

version: '3'
services:
    webserver:
        image: nginx:alpine
        container_name: webserver
        restart: unless-stopped
        tty: true
        ports:
            - "80:80"
            - "443:443"
        volumes:
            - ./:/var/www
            - ./nginx/conf.d/:/etc/nginx/conf.d/
        restart: unless-stopped

    cadvisor:
        image: 'google/cadvisor'
        volumes:
            - /:/rootfs:ro
            - /var/run:/var/run:ro
            - /sys:/sys:ro
            - /var/lib/docker/:/var/lib/docker:ro
            - /dev/disk/:/dev/disk:ro
        ports:
            - "8090:8090"

    pi-hole:
        container_name: pihole
        image: pihole/pihole:latest
        ports:
            - "53:53/tcp"
            - "53:53/udp"
            - "67:67/udp"
            - "8070:8070/tcp"
            - "4437:4437/tcp"
        environment:
            TZ: 'America/Chicago'
            # WEBPASSWORD: 'set a secure password here or it will be random'
        # Volumes store your data between container upgrades
        volumes:
            - './etc-pihole/:/etc/pihole/'
            - './etc-dnsmasq.d/:/etc/dnsmasq.d/'
        dns:
          - 127.0.0.1
          - 1.1.1.1
        # Recommended but not required (DHCP needs NET_ADMIN)
        #   https://github.com/pi-hole/docker-pi-hole#note-on-capabilities
        cap_add:
            - NET_ADMIN
        restart: unless-stopped

    cowyo:
        image: 'schollz/cowyo'
        ports:
            - "8050:8050"
        volumes:
            - './cowyo/data/:/data/'
        restart: unless-stopped

    jenkins:
        image: 'bitnami/jenkins:2'
        ports:
            - '8080:8080'
            - '8443:8443'
            - '50000:50000'
        volumes:
            - 'jenkins_data:/bitnami'
        restart: unless-stopped

volumes:
    jenkins_data:
        driver: local

nginx.conf:

worker_processes 1;

events { worker_connections 1024; }

http {

    sendfile on;

    upstream docker-cadvisor {
        server cadvisor:8090;
    }

    upstream docker-pihole {
        server pi-hole:8070;
    }

    upstream docker-cowyo {
        server cowyo:8050;
    }

    upstream docker-jenkins {
        server jenkins:8080;
    }

    server {
        listen 80;

        location / {
            proxy_pass         http://docker-cadvisor;
            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 80;

        location /pihole {
            proxy_pass         http://docker-pihole;
            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 80;

        location /cowyo {
            proxy_pass         http://docker-cowyo;
            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 80;

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

}

关于我做错了什么有什么想法吗?任何帮助将不胜感激。

编辑:它现在运行方式的问题是,当我转到上述网址之一时,我收到“无法访问此网站”错误。

Edit2:上述问题是由错误的 nginx.conf 文件引起的,导致 docker 容器无法正常启动。解决后,我得到一个“502 Bad Gateway”。

Edit3 [分辨率]:我的解决方案在this stack overflow answer。 TLDR 是我必须在我的 docker-compose.yml 文件的 nginx 部分中添加“network_mode:host”行。

【问题讨论】:

    标签: docker nginx docker-compose nginx-reverse-proxy


    【解决方案1】:

    您遇到的错误是什么? Tre 下面的配置,如果您没有得到预期的结果,请查看相应的错误日志。

    events {
        worker_connections 1024;
    }
    
    http {
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
    
        access_log  /var/log/nginx/access.log  main;
    
        sendfile            on;
        tcp_nopush          on;
        tcp_nodelay         on;
        keepalive_timeout   65;
        types_hash_max_size 2048;
    
        include             /etc/nginx/mime.types;
        default_type        application/octet-stream;
    
       upstream docker-cadvisor {
            server cadvisor:8090;
        }
    
        upstream docker-pihole {
            server pi-hole:8070;
        }
    
        upstream docker-cowyo {
            server cowyo:8050;
        }
    
        upstream docker-jenkins {
            server jenkins:8080;
        }
    
    server {
       listen 80;
       server_name home.server;
       fastcgi_param home.server $host;
    
       location / {
           proxy_set_header X-Forwarded-Host $host:$server_port;
           proxy_set_header X-Forwarded-Server $host;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_set_header Host $host;
           proxy_connect_timeout      300;
           proxy_send_timeout         300;
           proxy_read_timeout         300;
           proxy_pass         http://docker-cadvisor;
       }
               access_log /tmp/cadvisor-access.log main;
               error_log /tmp/cadvisor-error.log error;
    }
    server {
       listen 80;
       server_name home.server;
       fastcgi_param home.server $host;
    
       location /jenkins {
           proxy_set_header X-Forwarded-Host $host:$server_port;
           proxy_set_header X-Forwarded-Server $host;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_set_header Host $host;
           proxy_connect_timeout      300;
           proxy_send_timeout         300;
           proxy_read_timeout         300;
           proxy_pass         http://docker-jenkins;
       }
               access_log /tmp/jenkins-access.log main;
               error_log /tmp/jenkins-error.log error;
    }
    server {
       listen 80;
       server_name home.server;
       fastcgi_param home.server $host;
    
       location /cowyo {
           proxy_set_header X-Forwarded-Host $host:$server_port;
           proxy_set_header X-Forwarded-Server $host;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_set_header Host $host;
           proxy_connect_timeout      300;
           proxy_send_timeout         300;
           proxy_read_timeout         300;
           proxy_pass         http://docker-cowyo;
       }
               access_log /tmp/cowyo-access.log main;
               error_log /tmp/cowyo-error.log error;
    }
    server {
       listen 80;
       server_name home.server;
       fastcgi_param home.server $host;
    
       location /pihole {
           proxy_set_header X-Forwarded-Host $host:$server_port;
           proxy_set_header X-Forwarded-Server $host;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_set_header Host $host;
           proxy_connect_timeout      300;
           proxy_send_timeout         300;
           proxy_read_timeout         300;
           proxy_pass         http://docker-pihole;
       }
               access_log /tmp/pihole-access.log main;
               error_log /tmp/pihole-error.log error;
    }
    }
    

    【讨论】:

    • 编辑了原始帖子以包含当我尝试上述错误之一时,我收到“无法访问此页面”错误。
    • 在进行建议的更改后,我收到一个 nginx 错误“冲突的服务器名称”被忽略。此外,当我转到我的域时,nginx 正在返回 404。
    【解决方案2】:

    我觉得你应该改成

    upstream docker-cadvisor {
        server 127.0.0.1:8090;
    }
    
    upstream docker-pihole {
        server 127.0.0.1:8070;
    }
    
    upstream docker-cowyo {
        server 127.0.0.1:8050;
    }
    
    upstream docker-jenkins {
        server 127.0.0.1:8080;
    }
    

    【讨论】:

    • 很遗憾,这并没有为我解决问题。
    猜你喜欢
    • 2020-08-11
    • 1970-01-01
    • 1970-01-01
    • 2017-07-06
    • 2017-06-09
    • 2021-05-04
    • 2018-03-09
    • 2017-08-11
    • 2019-05-19
    相关资源
    最近更新 更多