Docker-Compose-NGinx反向代理-SSL

时间:2019-01-06 20:06:13

标签: docker ssl nginx docker-compose

我正在使用docker-compose为Web应用程序启动(甚至更多)容器。我只是想提供一个网站(请不要嘲笑Wordpress,我确实不是最好的网页设计师),使用NGinx作为反向代理,并通过SSL保护这些(以及其他)服务。当然有为此目的准备的容器,但是我正在接受培训,成为一名IT专家(德语: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;
            }
        }
    }
}

docker-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:

0 个答案:

没有答案