Nginx 502错误网关,同时尝试通过Nginx访问Gitlab

时间:2019-06-14 08:34:18

标签: docker nginx docker-compose gitlab

正在尝试通过docker-compose文件设置Gitlab。但是无法访问。我在这里看到过类似的问题,但没有一个对我有用 这是我的docker-compose文件

version: '2'
 services:
  nginx:
    container_name: nginx_loadbalance
    restart: always
    image: nginx
    logging:
        driver: "json-file"
        options:
            max-size: "10m"
            max-file: "10"
    ports:
     - 443:443
     - 80:80
    volumes:
     - ./nginx:/etc/nginx/conf.d:ro
     - ./nginx/ssl:/etc/nginx/ssl:ro
     - ./pass:/etc/nginx/pass:ro
    links:
     - gitlab
  redis:
    image: sameersbn/redis:latest
    container_name: redis
    volumes:
     - /mnt/mgdata/volumes/redis:/var/lib/redis:Z
  postgresql:
    image: sameersbn/postgresql:latest
    container_name: postgresql
    volumes:
      - /mnt/mgdata/volumes/postgresql:/var/lib/postgresql:Z
    environment:
      - DB_USER=gitlab
      - DB_PASS=password
      - DB_NAME=gitlabhq_production
      - DB_EXTENSION=pg_trgm
  gitlab:
    image: sameersbn/gitlab:latest
    container_name: gitlab
    links:
      - redis
      - postgresql
    volumes:
      - /mnt/mgdata/volumes/gitlab:/home/git/data:Z
    environment:
      - DEBUG=true
      - DB_ADAPTER=postgresql
      - DB_HOST=postgresql
      - DB_PORT=5432
      - DB_USER=gitlab
      - DB_PASS=password
      - DB_NAME=gitlabhq_production

      - REDIS_HOST=redis
      - REDIS_PORT=6379

      - TZ=Asia/Kolkata
      - GITLAB_TIMEZONE=Kolkata

      - GITLAB_HTTPS=true
      - SSL_SELF_SIGNED=true

      - GITLAB_HOST=www.mydomain.com
      - GITLAB_PORT=5001
      - GITLAB_SSH_PORT=10022
      - GITLAB_RELATIVE_URL_ROOT=/gitlab
      - GITLAB_SECRETS_DB_KEY_BASE=dc0nqwd6m7mnEmRf51VJ
      - GITLAB_SECRETS_SECRET_KEY_BASE=ARSoM4HfImdTV1OTRfLC
      - GITLAB_SECRETS_OTP_KEY_BASE=mqQmwgmIuu2SyVv3sJXB

      - GITLAB_ROOT_PASSWORD=gitlab123
      - GITLAB_ROOT_EMAIL=myemail.gmail.com

      - GITLAB_NOTIFY_ON_BROKEN_BUILDS=true
      - GITLAB_NOTIFY_PUSHER=false

      - GITLAB_EMAIL=mygmail.gmail.com
      - GITLAB_EMAIL_REPLY_TO=mygmail.gmail.com
      - GITLAB_INCOMING_EMAIL_ADDRESS=mygmail.com

      - GITLAB_BACKUP_SCHEDULE=monthly
      - GITLAB_BACKUP_TIME=04:00
    ports:
      - "10080:80"
      - "10022:22"
      - "5001:443"
    expose:
      - "5001"

这是我的Nginx配置文件:

upstream gitlab{
  server gitlab:5001;
}   

server {
  server_name myIpAddress mydomain.com;
  listen 80;
    server_name _;
    return 301 https://$host$request_uri;
}

server {
  server_name myIpAddress mydomain.com;
  listen 443 ssl http2;
  listen [::]:443 ssl http2;

  # add Strict-Transport-Security to prevent man in the middle attacks
  add_header Strict-Transport-Security "max-age=31536000";
  error_log /var/log/nginx/error.log warn;
  proxy_set_header Host $http_host; # required for Docker client sake
  proxy_set_header X-Real-IP $remote_addr; #pass on real client IP
  client_max_body_size 0; # disable any limits to avoid HTTP 413 for large image uploads
  # required to avoid HTTP 411: see issue #1486 (https://github.com/dotcloud/docker/issues/1486)
  chunked_transfer_encoding on;
  ssl_certificate /etc/nginx/ssl/fullchain.pem;
  ssl_certificate_key /etc/nginx/ssl/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA;
    ssl_session_cache shared:SSL:50m;
    ssl_prefer_server_ciphers on;

#ssl_prefer_server_ciphers on;
#ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
#ssl_ecdh_curve secp384r1;
#ssl_session_cache shared:SSL:10m;
#ssl_session_tickets off;
#ssl_stapling on;
# Disable preloading HSTS for now.  You can use the commented out header line that includes
# the "preload" directive if you understand the implications.
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
#add_header X-Frame-Options DENY;
#add_header X-Content-Type-Options nosniff;

ssl_dhparam /etc/nginx/ssl/certs/dhparam.pem;   

 location / {
  proxy_set_header X-Real-IP $http_referer;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header X-Forwarded-Proto $scheme;
  proxy_set_header REMOTE_ADDR $remote_addr;
  proxy_pass https://gitlab;
  proxy_http_version 1.1;
}

}

当我运行 docker ps 命令时,我可以看到所有容器都已启动并正在运行。即使我检查了日志,一切都很好。 尝试访问Gitlab时,在我的浏览器中收到502错误的网关错误。

以下是 Nginx负载平衡容器日志:

connect() failed (111: Connection refused) while connecting to upstream, client: clientIp, server: serverIp, request: "GET /favicon.ico HTTP/2.0", upstream: "https://172.27.0.4:5001/favicon.ico", host: "mydomain.com"

我的疑问是否正确,我不知道,但是当我运行docker ps时,可以在端口映射之前为所有容器看到0.0.0.0:port,但对于nginx_loadbalance我在5001之前看不到它。无法找出问题所在。

这是docker ps命令的结果

CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS                                                                           NAMES
ec151703cf28        nginx                         "nginx -g 'daemon of…"   16 minutes ago      Up 16 minutes       0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp                                        nginx_loadbalance
360f49185a16        sameersbn/gitlab:latest       "/sbin/entrypoint.sh…"   16 minutes ago      Up 16 minutes       5001/tcp, 0.0.0.0:10022->22/tcp, 0.0.0.0:10080->80/tcp, 0.0.0.0:5001->443/tcp   gitlab
50049db6c6b4        sameersbn/postgresql:latest   "/sbin/entrypoint.sh"    16 minutes ago      Up 16 minutes       5432/tcp                                                                        postgresql
38f3bd8eab4e        sameersbn/redis:latest        "/sbin/entrypoint.sh"    16 minutes ago      Up 16 minutes       6379/tcp                                                                        redis

1 个答案:

答案 0 :(得分:0)

尝试删除:

  

在docker-compose上的EXPOSE:5001

并测试此命令以检查是否有响应:

  

wget -O- http://localhost:5001/

     

wget -O- https://localhost:5001/

在您的nginx配置上,最好在上游声明中使用其他名称

upstream up_gitlab{
  server gitlab:5001;
} 
...
proxy_set_header REMOTE_ADDR $remote_addr;
proxy_pass https://up_gitlab;
proxy_http_version 1.1;
...

希望有帮助