En conséquence, je modifierai et ajouterai les paramètres Nginx et j'essaierai d'ajouter l'authentification SSL (HTTPS) et BASIC.
Structure du répertoire (extrait)
$ tree
.
├── app
├── docker-compose.yml
└── web
├── conf.d
│ └── app.conf
└── ssl
├── server.crt
└── server.key
--Modification de docker-compose.yml
--Modifier / ajouter des fichiers dans le répertoire web
--Modifier conf.d / app.conf
--Préparation du certificat / clé (répertoire ssl /
)
Besoin de chacun
le détail est juste en dessous:
docker-compose.yml
Fixé comme suit:
docker-compose.yml
version: '3'
services:
web:
container_name: web
image: nginx:alpine
depends_on:
- app
ports:
- "80:80"
- "${PORT:-8443:443}"
volumes:
- ./web/conf.d:/etc/nginx/conf.d
- ./web/ssl:/etc/nginx/ssl
networks:
- nginx_network
app:
container_name: app
image: test_fastapi_app
build:
context: ./app
dockerfile: Dockerfile
expose:
- 8000
networks:
- nginx_network
# volumes:
# - ./app/app:/app/app
# command: "uvicorn app.main:app --host 0.0.0.0 --proxy-headers --forwarded-allow-ips * --reload"
networks:
nginx_network:
driver: bridge
Si vous extrayez uniquement la partie où il y a une différence,
docker-compose.yml(Extrait)
services:
web:
ports:
# - "80:80"
- "${PORT:-8443:443}"
volumes:
- ./web/conf.d:/etc/nginx/conf.d
- ./web/ssl:/etc/nginx/ssl
--Modification du mappage de port pour SSL
web / ssl
contenant le certificat / la clé est monté dans / etc / nginx / ssl
du conteneur Nginx.web / ssl
(clé / certificat)web
└── ssl
├── server.crt
└── server.key
Préparez ceux qui correspondent à server.crt
et server.key
dans ↑ et placez-les respectivement dans le répertoire web / ssl
.
Dans cet exemple, le script (one-liner) qui a généré automatiquement le certificat oleore est placé tel quel:
make_key.sh
#!/usr/bin/env sh
openssl req -batch -new -x509 -newkey rsa:4096 -nodes -sha256 \
-subj /CN=example.com/O=example -days 3650 \
-keyout ./server.key \
-out ./server.crt
web/conf.d/app.conf
Réécrivez le fichier de configuration Nginx.
conf:conf.d/app.conf
upstream backend {
server app:8000;
}
server {
listen 443 ssl;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
ssl_protocols TLSv1.2 TLSv1.3;
# server_name _;
index index.html index.htm;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Server $http_host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect http:// https://;
proxy_pass http://backend;
}
# log
# access_log /var/log/nginx/access.log;
# error_log /var/log/nginx/error.log;
}
server_tokens off;
Changements critiques:
Listen 80
comme suit, la clé / certificat placé par le montage du volume dans le conteneur est spécifié et rendu HTTPS. listen 443 ssl;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
ssl_protocols TLSv1.2 TLSv1.3;
--Modifié / ajouté proxy _ ***
dans location /
«Je ne me souviens pas beaucoup des détails parce que je l'ai fait tellement et j'ai eu beaucoup d'essais et d'erreurs. .. ..
――Il peut donc être mélangé avec des paramètres inutiles. .. ..
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Server $http_host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect http:// https://;
Pour le moment, avec ça
docker-compose up -d
Si vous accédez à https: // localhost: 8443 (port défini par vous-même), etc., vous pouvez confirmer que la communication https est utilisée.
Au fait, passons à la certification BASIC
--Générer .htpasswd
à l'avance
.htpasswd
lui-même est le même que celui d'Apache httpd etc.web / conf.d
:.
├── app
├── docker-compose.yml
└── web
├── conf.d
| ├── .htpasswd
│ └── app.conf
└── ssl
web / conf.d / app.conf
:conf:conf.d/app.conf
upstream backend {
server app:8000;
}
server {
listen 443 ssl;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
ssl_protocols TLSv1.2 TLSv1.3;
# basic-auth
auth_basic "BASIC AUTH";
auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
# server_name _;
index index.html index.htm;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Server $http_host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect http:// https://;
proxy_pass http://backend;
}
# log
# access_log /var/log/nginx/access.log;
# error_log /var/log/nginx/error.log;
}
server_tokens off;
↑ J'ai ajouté ce qui suit:
app.conf (partie supplémentaire)
# basic-auth
auth_basic "BASIC AUTH";
auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
peut apparaître comme une chaîne de caractères lorsque vous êtes invité à vous authentifier (peut-être que cela dépend du navigateur), alors réécrivez-le comme il convient. --ʻAuth_basic_user_file
est chargé en spécifiant le chemin de .htpasswd
qui est monté en volume dans le conteneur.Avec cela, par exemple, l'authentification peut être effectuée comme suit:
(* Cette fois, c'est mon certificat, donc un avertissement est émis)
--Redirect de http vers https avec Nginx
https://qiita.com/fisherman08/items/e39e67e85ef07a1ef3db
Authentification BASIQUE dans Nginx
http://vdeep.net/nginx-basic-authentication
https://www.yoheim.net/blog.php?q=20170804
https://qiita.com/kotarella1110/items/be76b17cdbe61ff7b5ca
https://qiita.com/STSynthe/items/5387bc33e7be315ae338
https://qiita.com/ekzemplaro/items/0385c34c4325da2f2af6
https://note.com/club_cloud/n/n581d1995139f
--Générer .htpasswd
https://asakawajunya.hatenablog.com/entry/20130706/1373046305
https://qiita.com/shell/items/5606d37a802e39479036
https://www.junk-works.science/generate-htpasswd-with-openssl/
https://www.luft.co.jp/cgi/htpasswd.php
Une doublure de mon certificat
https://qiita.com/ngyuki/items/27e56196fbf2d68a9f7f
https://qiita.com/marcy-terui/items/2f63d7f170ff82531245
https://nekonenene.hatenablog.com/entry/2019/08/10/153430
Recommended Posts