Дженкинс URL localhost: 8080 перенаправляет меня на localhost, ломая веб-страницу - PullRequest
0 голосов
/ 27 февраля 2019

У меня проблемы с прокси Jenkins.Контейнер Jenkins находится за моим прокси NGINX.Я получаю к нему доступ в http://localhost:8000. После входа в систему меня пинают в http://localhost. Некоторые ссылки на Jenkins также делают то же самое и удаляют порт, который тормозит экран.Я получаю сообщение об ошибке из заголовка на моей странице «Управление Jenkins» и пытаюсь добавить URL proxy_pass, но ничего не работает.

Мой файл конфигурации NGINX выглядит так ...

server {
   listen       8000;
   server_name  "";

   access_log off;

   location / {

       proxy_set_header X-Forwarded-Proto $scheme;
       proxy_set_header X-Forwarded-Port $server_port;
       proxy_set_header X-Forwarded-Host $host;
       proxy_pass         http://jenkins_master_1:8080;
       proxy_redirect http://jenkins_master_1:8080 http://localhost:8000;

       proxy_max_temp_file_size 0;

       proxy_connect_timeout      150;
       proxy_send_timeout         100;
       proxy_read_timeout         100;

       proxy_buffer_size          8k;
       proxy_buffers              4 32k;
       proxy_busy_buffers_size    64k;
       proxy_temp_file_write_size 64k;    

   }

}

Мой файл docker-compose.yml выглядит примерно так ...

version: '3'

# Services are the names of each container
services:
  master:
    # Where to build the container from a Dockerfile
    build: ./jenkins-master
    # Open which ports to
    ports: 
      - "50000:50000"
    # Connecting volumes to in a container
    volumes:
      - jenkins-log:/var/log/jenkins
      - jenkins-data:/var/jenkins_home
    # Adding the service to a network
    networks: 
      - jenkins-net

  nginx:
    build: ./jenkins-nginx
    ports:
      - "8000:8000"
    networks: 
      - jenkins-net

# List of volumes to create
volumes: 
  jenkins-data:
  jenkins-log:

# List of netorks to create
networks: 
  jenkins-net:

Я пытаюсь выучить Docker и Jenkins и следовал учебному пособию, jenkins_master_1 из docker-compose.Любая помощь или руководство будут очень благодарны.

Спасибо

Ответы [ 3 ]

0 голосов
/ 28 февраля 2019

Предположение 1: NGINX находится перед вашим приложением, принимает подключения через порт 80, а затем переходит на внутренний порт 8080.

Предположение 2: приложение Jenkins и NGINX находятся на одном сервере.

Вы должны получать к нему доступ изначально из порта 80, а не 8080, если вы используете прокси.

NGINX получает запрос на 80, затем переходит к бэкенду 8080. Из браузера вы не должны видеть8080, если вы используете прокси.Если вы используете 8080, и он что-то делает, то вы идете прямо в приложение .... иначе, в обход прокси.

Итак, как начать адресовать его:

(1.)Перейдите к http://localhost,, который должен пройти через ваш прокси-сервер (если он настроен правильно)

(2.) В разделе «Управление Jenkins-> Настройка системы -> URL-адрес Jenkins» убедитесь, что URL-адрес установлен наhttp://localhost

(3.) Лучше использовать полное доменное имя для имени сервера в конфигурации NGINX, затем убедитесь, что Jenkins прослушивает только соединения на локальном узле в конфигурации Jenkins.xml.Jenkins.xml должен иметь адрес прослушивания, установленный на 127.0.0.1.Тогда внешние запросы к этому полному доменному имени не смогут обойти прокси, так как Jenkins будет разрешать соединения только с локального хоста (из NGINX, или вы играете с браузером на локальном хосте).

Тогда, в идеале, выиметь: http://fqdn - > NGINX прослушивает порт 80 -> Jenkins на 127.0.0.1:8080.Пользователь с браузером (безопасно за пределами вашего сервера) никогда не видит порт 8080.

0 голосов
/ 02 июля 2019

Добавление заголовков X-Forwarded- * является правильным решением.

Без таких заголовков я получил много ошибок, например, меня перенаправили на https://jenkinsci:8080 после того, как я установил исходный пароль и нажал кнопку продолжения.Много раз, когда я посещаю https://jenkins.mydomain.com и нажимаю на ссылки на веб-странице, меня перенаправляют на https://jenkinsci:8080. И https://jenkinsci:8080 не может быть посещено, очевидно.Я не знаю почему.Возможно, tomact нужна информация о заголовках X-Forwarded- *.

Эта статья - Jenkins за обратным прокси-сервером NGinX настоятельно рекомендуется для тех, кто хочет запускать jenkins за nginx, даже если jenkins и nginx создаются через докер-контейнер.И еще раз, вам лучше добавить эти заголовки X-Forwarded- *.

Пример файла конфигурации nginx vhost:

server {
charset utf8;

access_log   /var/log/nginx/jenkins.yourdomain.com.access_log  main;

listen       443 ssl http2;
server_name  jenkins.yourdomain.com;


ssl_certificate     /etc/nginx/ssl/yourdomain.com.crt;
ssl_certificate_key /etc/nginx/ssl/yourdomain.com.key;
ssl_session_cache    shared:SSL:1m;
ssl_session_timeout  5m;
ssl_ciphers  HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers  on;

location / {

    proxy_set_header        Host $host:$server_port;
    proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header        X-Forwarded-Proto $scheme;
    proxy_http_version 1.1;
    proxy_request_buffering off;
    proxy_buffering off;

    proxy_pass   http://jenkinsci:8080; #jenkinsci is the service/container name specified in the docker-compose.yml file
}

}

0 голосов
/ 27 февраля 2019

Попробуйте добавить директиву proxy_redirect в блок location.Это дает указание веб-серверу возвращать коды ответа HTTP 301/302, отличные от рассчитанных самим сервером.Иногда веб-сервер не может правильно рассчитать свой адрес, как в докере, где у контейнера нет информации о внешнем мире и что соединение проксировано / переадресовано.

location / {
    proxy_pass http://jenkins_master_1:8080;
    proxy_redirect http://jenkins_master_1:8080 http://localhost:8080;
}

SRC: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect

...