我正在使用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: