HTTPS для одного приложения, работающего внутри док-контейнера - PullRequest
0 голосов
/ 16 октября 2019

Я запускаю различные приложения на моем производственном сервере внутри док-контейнеров. Допустим, я хочу, чтобы безопасность SSL / TSL была только для моего jenkins-сервера, работающего внутри одного из док-контейнеров;Для реализации этого я использую nginx-reverse-proxy и Let's Encrypt CA.

Имейте в виду:

  • SSL зарегистрированный хост DNS / имя_сервера: www.example.com
  • Мой сервер jenkins работает на порт 8080 (открыт) внутри докера с conatiner и именем хоста: jenkinsserver
  • Я использую nginx и jenkinserver в одной сети, скажем, jen-network
  • Контейнер nginxserver связан с jenkinsserver контейнер через external_link.

docker-compose.yml для nginx:

version: '3'
   services:
      nginxserver:
          image: nginx:latest
          container_name: nginxserver
          hostname: nginxserver
          restart: always
          ports:
              - 8888:553
          volumes:
              - ./conf.d:/etc/nginx/conf.d
              - dockervolumes/var/log/nginx/:/var/log/nginx/
              - /path/to/letsencrypt/www.example.com/fullchain.pem:/etc/ssl/private/fullchain.pem
              - /path/to/letsencrypt/www.example.com/privkey.pem:/etc/ssl/private/privkey.pem
          networks:
              - jen-network
          external_links:
              - 'jenkinsserver:jenkinsserver'

networks:
    jen-network:
       external : true

nginx.conf:

upstream jenkins {
  server  jenkinsserver:8080;
}

server {
  listen        553 ssl default_server;
  server_name   www.exapmle.com;
  error_log     /var/log/nginx/error.log warn;
  access_log    /var/log/nginx/access.log main;

  add_header Strict-Transport-Security    "max-age=31536000; includeSubDomains" always;
  add_header X-Frame-Options              SAMEORIGIN;
  add_header X-Content-Type-Options       nosniff;
  add_header X-XSS-Protection             "1; mode=block";

  #ssl
  ssl_protocols               TLSv1 TLSv1.1 TLSv1.2;
  ssl_ecdh_curve              secp384r1;
  ssl_ciphers                 "ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384 OLD_TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 OLD_TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256";
  ssl_prefer_server_ciphers   on;
  ssl_dhparam                 /etc/nginx/dhparam-4096.pem;
  ssl_certificate             /etc/ssl/private/fullchain.pem;
  ssl_certificate_key         /etc/ssl/private/privkey.pem;
  ssl_session_timeout         10m;
  ssl_session_cache           shared:SSL:10m;
  ssl_session_tickets         off;
  ssl_stapling                on;
  ssl_stapling_verify         on;


  location / {
    proxy_pass  http://jenkins;
    proxy_redirect      http://jenkins $scheme://example.com;

    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;
  }

ПРОБЛЕМА ЗАКЛЮЧЕНА:

все HTTP-запросы перенаправляются на HTTPS;из-за этого я не могу просматривать другие приложения, работающие на других портах (кроме 8888) в моем браузере.

Например:

http://www.example.com:8888 перенаправляется на http s : //www.example.com: 8888 и я могу получить доступ к своему интерфейсу Дженкинса.

Но http://www.example.com:9090 также перенаправляются на http s : //www.example.com: 9090 , но я не хочу, чтобы это произошло.

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

...