Error 502 using an nginx reverse proxy

docker

#1

Heyo!

I’m having a bit of trouble with getting nextcloud to work with a reverse proxy via domain name. I currently have it setup with docker, nginx, gitea and nextcloud.

I can access the gitea instance by domain name and port, but I can only access the nextcloud by port. Trying to navigate by domain name results in a bad gateway error message.

nginx_proxy     | 2018/08/10 00:17:34 [error] 8#8: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 172.19.0.1, server: cloud.example.ca, request: "GET / HTTP/1.1", upstream: "http://172.19.0.4:3001/", host: "cloud.example.ca"

My docker-compose.yml

version: '3.1'

services:

  nginx:
    container_name: nginx_proxy
    image: nginx:latest
    restart: always
    volumes: 
// Here I'm swapping out my default.conf for the container's by mounting my 
directory over theirs.
      - ./nginx-conf:/etc/nginx/conf.d
    ports:
      - 80:80
      - 443:443
    networks:
      - proxy

  nextcloud_db:
    container_name: nextcloud_db
    image: mariadb:latest
    restart: always
    volumes:
      - nextcloud_db:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD_FILE: /run/secrets/cloud_db_root
      MYSQL_PASSWORD_FILE: /run/secrets/cloud_db_pass
      MYSQL_DATABASE: devcloud
      MYSQL_USER: devcloud
    secrets:
      - cloud_db_root
      - cloud_db_pass
    networks:
      - database

  gitea_db:
    container_name: gitea_db
    image: mariadb:latest
    restart: always
    volumes:
      - gitea_db:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD_FILE: /run/secrets/cloud_db_root
      MYSQL_PASSWORD_FILE: /run/secrets/cloud_db_pass
      MYSQL_DATABASE: gitea
      MYSQL_USER: gitea
    secrets:
      - cloud_db_root
      - cloud_db_pass
    networks:
      - database

  nextcloud:
    image: nextcloud
    container_name: nextcloud
    ports:
      - 3001:80
    volumes:
      - nextcloud:/var/www/html
    restart: always
    networks:
      - proxy
      - database

  gitea:
    container_name: gitea
    image: gitea/gitea:latest
    environment:
      - USER_UID=1000
      - USER_GID=1000
    restart: always
    volumes:
      - gitea:/data
    ports:
      -  3000:3000
      -  22:22
    networks:
      - proxy
      - database

volumes:
  nextcloud:
  nextcloud_db:
  gitea:
  gitea_db:

networks:
  proxy:
  database:

secrets:
  cloud_db_pass:
    file: cloud_db_pass.txt
  cloud_db_root:
    file: cloud_db_root.txt

My nginx “default.conf” that gets mounted over top of the container’s /etc/nginx/conf.d

upstream nextcloud {
         server nextcloud:3001;
}

upstream gitea {
         server gitea:3000;
}

server {
       listen 80;
       listen [::]:80;
       server_name cloud.example.ca;

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

server {
       listen 80;
       listen [::]:80;
       server_name git.example.ca;

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

Any idea why we’re not playing nice with nginx in this case? Also, this question was posted on stackoverflow (for reference to other comments/suggestions) as well.

Thanks so much for the awesome software. I can’t wait to deploy it!


#2

I resolved my problem after reading more documentation. You cannot access next cloud on port 80 in a “live test” I believe was the issue.