Я использую 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: