Понимать обратный прокси в сочетании с докером

Я использую Nginx-прокси в Docker-контейнере. И я должен запустить несколько приложений на сервере. Я хочу запустить их все в контейнере докера, кроме одного. Я запускаю Джира Стечение в контейнере. У меня ушло много времени на настройку приложений и Nginx-config. Теперь я хочу также запустить Graylog2 на сервере, и я столкнулся с теми же проблемами, что и в Jira/Confluence. Наверное, потому что я не очень понимаю, как все это работает. Вот почему я сделал следующее изображение: сервер-установка

Вот как я понимаю обратный прокси. Nginx-conf выглядит так:

upstream jenkins {
  server 43.3.34.333:8080 fail_timeout=0;
}

upstream docker-jira {
    server jira:8080;
}

upstream docker-conf {
        server conf:8090;
}

upstream docker-graylog {
    server graylog:9000;
}

server {
    listen 80 default_server;
    listen [::]:80 default_server;


    server_name mySite.de;
    return 301 https://mySite.de;
}


server {

    # SSL configuration

    listen 443 ssl http2 default_server;

    listen [::]:443 ssl http2 default_server;

    server_name mySite.de;

    include snippets/ssl-mySite.de;

    include snippets/ssl-params.conf;

    location /jenkins {
            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_pass              http://jenkins;
            proxy_redirect      http://jenkins $scheme://mySite.de;
            # Required for new HTTP-based CLI
            proxy_http_version 1.1;
            proxy_request_buffering off;
            proxy_buffering off; # Required for HTTP-based CLI to work over SSL
            # workaround for https://issues.jenkins-ci.org/browse/JENKINS-45651
            add_header 'X-SSH-Endpoint' 'jenkins.domain.tld:50022' always;
            client_max_body_size 2M;
    }

    location /graylog {
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Graylog-Server-URL http://$server_name/api;
        proxy_pass       http://docker-graylog/graylog;
    }

    location /jira {

        proxy_set_header X-Forwarded-Host $host;

        proxy_set_header X-Forwarded-Server $host;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_pass http://docker-jira/jira;

        client_max_body_size 100M;

        add_header X-Frame-Options ALLOW;

    }

    location /confluence {

        proxy_set_header X-Forwarded-Host $host;

        proxy_set_header X-Forwarded-Server $host;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_pass http://docker-conf/confluence;

        proxy_redirect http://docker-conf/confluence https://mySite.de;

        client_max_body_size 100M;

        add_header X-Frame-Options SAMEORIGIN;

    }

    location /synchrony {

        proxy_set_header X-Forwarded-Host $host;

        proxy_set_header X-Forwarded-Server $host;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_pass http://mySite.de:8091/synchrony;

        proxy_http_version 1.1;

        proxy_set_header Upgrade $http_upgrade;

        proxy_set_header Connection "Upgrade";

        client_max_body_size 100M;

    }

}

Чтобы запустить Graylog2 через прокси-сервер, вы должны установить некоторые настройки ( документация Graylog2):

  • установить web_listen_uri
  • установить rest_listen_uri
  • установить web_endpoint_uri

Я сделал это так:

Когда я попал на https://mysite.de/graylog я получил ошибку 502 Bad Gateway. Nginx-журнал:

connect() failed (111: Connection refused) while connecting to upstream, client: 33.11.102.157, server: mySite.de, request: "GET /graylog HTTP/2.0", upstream: "http://172.18.0.9:9000/graylog", host: "mySite.de"

Моя сеть:

NETWORK ID          NAME                   DRIVER              SCOPE
6c9de2d6b0ac        MyNet                   bridge              local

Я действительно не понимаю

0 ответов

Оставьте переадресацию 80–>443, которую вы выполняете, с помощью NGINX, выполняющего SSL-завершение, а затем отправляющего в бэкэнд через http.

Измените их, чтобы прослушивать IP-адрес локальной сети или DNS-имя докера:

web_listen_uri = http://docker-graylog:9000/graylog
rest_listen_uri = http://docker-graylog:9000/api

Примечание. Проблема с вашей текущей конфигурацией заключается в том, что она прослушивает только локальный хост, а поступающий извне запрос никогда не поступит в приложение, поскольку он не прослушивает внешние подключения. Он только прослушивает соединения в контейнере Graylog. NGINX не может достичь серого журнала на локальном хосте:9000 по локальной сети.

Плохой шлюз указывает на то, что ваш прокси, вероятно, работает, но невозможно установить соединение с приложением.

Подробнее об этом: https://forums.docker.com/t/access-to-localhost-from-bridge-network/22948/2

Этот конфиг в основном то, что у вас уже есть, но скопировал его из документации серого журнала. Ваша текущая конфигурация прокси может работать как есть.

upstream docker-graylog {
server graylog:9000;
}

server
{
listen      443 ssl spdy;
server_name mySite.de;
# <- your SSL Settings here!

location /graylog
{
  proxy_set_header Host $http_host;
  proxy_set_header X-Forwarded-Host $host;
  proxy_set_header X-Forwarded-Server $host;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header X-Graylog-Server-URL https://$server_name/api;
  proxy_pass       http://docker-graylog/graylog;
}
}
Другие вопросы по тегам