Docker-Compose - обратный прокси-сервер NGinx - SSL - PullRequest
0 голосов
/ 06 января 2019

Я использую docker-compose для запуска (позже даже больше) контейнеров для веб-приложений. Я просто хотел сделать сайт доступным (пожалуйста, не смейтесь над Wordpress, я действительно не лучший веб-дизайнер), используйте NGinx в качестве обратного прокси-сервера и защитите эти (а затем и другие) сервисы через SSL. Конечно, для этого есть готовые контейнеры, но я готовлюсь стать ИТ-специалистом (нем. Ausbildung zum Fachinformatiker) и хотел сделать это сам. Я посмотрел на них, но не нашел ничего, что могло бы помочь мне с этим вариантом использования.

С тем, что написано ниже, у меня есть рабочий HTTP -> HTTPS перенаправление, сертификат отображается как действительный, только у меня нет картинок или CSS. Любая другая конфигурация NGinx приводит к 502.

Может ли быть так, что NGinx получает запрос к 443 и ожидает его от Apache (Wordpress)? Apache не имеет сертификатов и перенаправляется на: 80. Зачем? NGinx должен получить все сертификаты, а затем служить обратным прокси-сервером для поддоменов и их контейнеров. Не хватает ли там HTTP, то есть до NGinx?

Может быть, то, что я сделал ниже, могло бы быть более элегантным, я также был бы благодарен за предложения. Заранее большое спасибо и извинения, если это «глупый» вопрос, но я немного отчаиваюсь.

nginx.conf:

worker_processes 1;

events { worker_connections 1024; }

http {

    sendfile on;

    upstream wordpress {
        server wordpress_web:80;
#       server wordpress_web:443;
    }

    proxy_set_header   Host $host;
    proxy_set_header   X-Real-IP $remote_addr;
    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header   X-Forwarded-Host $server_name;

    server {
        listen 80;
        server_name URL;

        return 301 https://$host$request_uri;
    }

    server {
        listen 443 ssl;
        server_name URL;

        ssl_certificate /etc/letsencrypt/live/URL/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/URL/privkey.pem;

        location / {
            proxy_pass         http://wordpress;
            proxy_redirect     off;

            valid_referers none blocked URL;
            if ($invalid_referer) {
                return   403;
            }
        }
    }
}

докер-compose.yml:

version: '3'
services:
  nginx:
    links:
      - wordpress_web
    image: nginx:latest
    container_name: reverse_nginx
    restart: always
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
      - /etc/letsencrypt/:/etc/letsencrypt/
      - /var/run/docker.sock:/tmp/docker.sock:ro
    environment:
      DEFAULT_HOST: default.vhost
    ports:
      - 80:80
      - 443:443
    networks:
      - reverseproxy

  sql_db:
    image: mysql:5.7
    container_name: wordpress_db
    restart: unless-stopped
    volumes:
      - db_data:/var/lib/mysql
    environment:
       MYSQL_ROOT_PASSWORD: roottest
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress
    networks:
      - db_net

  wordpress_web:
    links:
      - sql_db
    image: wordpress:latest
    container_name: wordpress_web
    restart: unless-stopped
    volumes:
      - /var/www/html/:/var/www/html/
    expose:
      - "443"
    environment:
      WORDPRESS_DB_HOST: sql_db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
    networks:
      - reverseproxy
      - db_net

networks:
  reverseproxy:
  db_net:
...