Как настроить NGINX, чтобы избежать 502 Bad Gateway при взаимодействии с контейнером Docker?

Я выполнил следующие шаги:

  1. Установил Nginx
  2. Защитил Nginx с помощью Let’s Encrypt
  3. Установил Jenkins
  4. Настроил Jenkins с SSL за обратным прокси-сервером Nginx
  5. Настроил конвейер непрерывной интеграции с Jenkins (в этом документе говорится о Ubuntu 16.04)
  6. Установил докер

Итак, цель состоит в том, чтобы управлять развертыванием приложения React на моем testdomain.com позже, к настоящему времени я просто хочу создать папку dist, сгенерированную после ‘npm build’, в / var / lib / jenkins / workspace / , только то. Для этой цели я запущу его в конвейере Jenkins с докером.

К настоящему времени я могу получить доступ к моему jenkins.testdomain.com, запустить конвейер, чтобы запустить процесс после нажатия на мое репо, и начать запускать этапы; но именно здесь, когда начинается сбой nginx, когда конвейер достигает фазы доставки (давайте прочитаем фазу npm build).
В этот момент я читал вывод консоли Jenkins, и я вижу, когда он застревает на этом этапе, чтобы в конечном итоге показать 502 Bad Gateway.
После этого мне нужно будет перезапустить Jenkins systemctl, чтобы снова получить доступ. После перезапуска конвейера работа возобновляется и, похоже, работа выполнена: /

В /var/log/nginx/error.log для nginx:
*1 connect() failed (111: Connection refused) while connecting to upstream, client: 85.146.85.194, server: jenkins.testdomain.com, request: “GET /job/Basic%20NodeJS-React%20app/8/console HTTP/1.1”, upstream: “https://127.0.0.1:8080/job/Basic%20NodeJS-React%20app/8/console”, host: “jenkins.testdomain.com”, referrer: “https://jenkins.testdomain.com/job/Basic%20NodeJS-React%20app/8/”

*1 SSLdohandshake() failed (SSL: error:1408F10B:SSL routines:ssl3getrecord:wrong version number) while SSL handshaking to upstream, client: 85.146.85.194, server: jenkins.testdomain.com, request: “GET /favicon.ico HTTP/1.1”, upstream: “https://127.0.0.1:8080/favicon.ico”, host: “jenkins.testdomain.com”, referrer: “https://jenkins.testdomain.com/job/Basic%20NodeJS-React%20app/8/console”

В Jenkinsfile моего приложения node-js-react агент выглядит так (после теста из nginx -t)

pipeline {
    agent {
        docker {
            image 'node:6-alpine' 
            args '-p 3000:80' 
        }
    }
    environment {
            CI = 'true'
    }
    stages {
            // Build, Test, and Deliver stages
    }
}

И моя конфигурация jenkins.testdomain.com (/etc/nginx/sites-available/jenkins.testdomain.com) выглядит так:
server {
listen 80;

    root /var/www/jenkins.testdomain.com/html;
    server_name jenkins.testdomain.com www.jenkins.testdomain.com;

    location / {
      proxy_set_header    Host $host;
      proxy_set_header    X-Real-IP $remote_addr;
      proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;

      # Fix the "It appears that your reverse proxy set up is broken" error.
      proxy_pass          http://localhost:8080;

      # High timeout for testing
      proxy_connect_timeout 1200s;
      proxy_send_timeout 1200s;
      proxy_read_timeout 1200s;

      proxy_redirect      http://localhost:8080 https://jenkins.testdomain.com;

      # Required for new HTTP-based CLI
      proxy_http_version 1.1;
      proxy_request_buffering off;

      # Required for HTTP-based CLI to work over SSL
      proxy_buffering off;
    }

    # Certbot auto-generated lines...
}

Любая помощь по этому поводу будет полезна, за 2-3 дня я попробовал несколько вещей, чтобы избежать этой ошибки, но в какой-то момент она возвращается.

2 симпатии

Через несколько дней после моего последнего сообщения я понял, что основной и единственной причиной отказа сервера была нехватка ресурсов.

Итак, я использовал сервер с 1 ГБ ОЗУ, 25 ГБ жесткого диска и т. Д. (Самый простой), поэтому я решил обновить его, чтобы использовать как минимум 2 ГБ ОЗУ, и действительно, это заставило его работать так, как я ожидал. До сих пор все работает нормально, и эта проблема больше не повторялась.

Надеюсь, это поможет, если у кого-то возникнет такая же проблема.