Il existe plusieurs conteneurs de sites Web différents exécutés sur un hôte Docker. Comment transférer correctement le trafic des ports 80 et 443 vers les conteneurs correspondants ?
PHP中文网2017-06-20 10:05:52
0
2
1358
Aide. . S'il existe un tutoriel rédigé par Dalao, vous pouvez également poster le lien vers l'article. . Après une partie de Baidu, je suis tombé dans le coma. .
Le proxy nginx peut également être exécuté en tant que deux conteneurs distincts en utilisant l'image jwilder/docker-gen et l'image officielle nginx.
Vous souhaiterez peut-être faire cela pour éviter que le socket docker ne soit lié à un service de conteneur exposé publiquement (évitez de monter le socket docker dans le conteneur exposé nginx). C'est mieux d'un point de vue sécurité.
Pour exécuter le proxy nginx en tant que conteneur distinct, vous aurez besoin de :
1) Pour monter le fichier modèle nginx.tmpl dans le conteneur docker-gen. Vous pouvez obtenir le dernier nginx.tmpl officiel avec une commande telle que :
Ensuite, démarrez tous les conteneurs à proxy comme décrit précédemment.
Si pour une raison quelconque vous ne pouvez pas utiliser l'option docker --volumes-from, vous pouvez spécifier le nom ou l'identifiant du conteneur nginx avec la variable NGINX_PROXY_CONTAINER.
Chiffrons
Pour utiliser le service Let's Encrypt pour créer automatiquement un certificat valide pour les hôtes virtuels.
Définissez les variables d'environnement suivantes pour activer la prise en charge de Let's Encrypt pour un conteneur proxy. Ces variables d'environnement doivent être déclarées dans chaque conteneur d'application à proxy.
LETSENCRYPT_HOST
LETSENCRYPT_EMAIL
La variable LETSENCRYPT_HOST variable most likely needs to be the same as the VIRTUAL_HOST doit très probablement être la même que la variable VIRTUAL_HOST et doit être un domaine accessible au public. Spécifiez plusieurs hôtes avec un délimiteur virgule.
Les variables d'environnement suivantes sont facultatives et paramétrent le fonctionnement du client Let's Encrypt.
LETSENCRYPT_KEYSIZE
La variable LETSENCRYPT_KEYSIZE détermine la taille de la clé demandée (en bits, par défaut 4096).
certificats multi-domaines (SAN)
Si vous souhaitez créer des certificats multi-domaines (SAN), ajoutez le domaine de base comme premier domaine de la LETSENCRYPT_HOST variable d'environnement.
certificats de test
Si vous souhaitez créer des certificats de test qui n'ont pas les limites de 5 certificats/semaine/domaine, définissez le LETSENCRYPT_TEST environment variable with a value of true (dans les conteneurs où vous demandez des certificats avec LETSENCRYPT_HOST). Si vous souhaitez faire cela globalement pour tous les conteneurs, définissez ACME_CA_URI comme décrit ci-dessous.
Renouvellement automatique du certificat
Toutes les heures (3600 secondes), les certificats sont vérifiés et chaque certificat qui expirera dans les 30 prochains jours (90 jours / 3) est renouvelé.
Variables d'environnement de conteneur facultatives
Variables d'environnement de conteneur Letsencrypt-nginx-proxy-companion facultatives pour une configuration personnalisée.
ACME_CA_URI - Directory URI for the CA ACME API endpoint (default: https://acme-v01.api.letsencrypt.org/directory). If you set it's value to https://acme-staging.api.letsencrypt.org/directory Letsencrypt utilisera des serveurs de test qui n'ont pas les limites de 5 certificats/semaine/domaine. Vous pouvez également créer des certificats de test par conteneur (voir Chiffrons les certificats de test)
DEBUG - Set it to true pour activer le débogage du script du point d'entrée et la génération de certificats LetsEncrypt, ce qui pourrait vous aider à identifier tout problème de configuration.
L'étiquette "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy=true" - définissez cette étiquette sur le conteneur nginx-proxy pour indiquer au conteneur docker-letsencrypt-nginx-proxy-companion de l'utiliser comme proxy.
ACME_TOS_HASH - Passons un hachage TOS alternatif à simp_le, pour prendre en charge l'implémentation ACME d'autres autorités de certification.
Exemples :
Si vous voulez d'autres exemples d'utilisation de ce conteneur, regardez :
Étant donné que le conteneur ne peut lier directement que le port de l'hôte, par exemple, j'ai 10 conteneurs Web, alors ces conteneurs ont tous besoin de 80 ou 443, donc le paramètre -p n'est pas réalisable, donc utilisez un conteneur comme passerelle inverse conteneur proxy, utilisez nginx, le conteneur nginx pour -p et d'autres conteneurs Web tels que php-fpm et node. Accès via nginx en tant que proxy inverse Le certificat est également directement transmis au serveur nginx et le transfert 443 peut être effectué.
En fait, ce sont les bases, mais elles n'ont rien à voir avec Docker
Cet article est un environnement lnmp, /a/11...
S'il existe plusieurs services backend php-fpm ou node ou python, alors nginx devrait être comme suit
折腾了一个下午,找到了docker的解决方案
github:https://github.com/JrCs/docke...
把重要重点部分摘出来
Conteneurs séparés (méthode recommandée)
Le proxy nginx peut également être exécuté en tant que deux conteneurs distincts en utilisant l'image jwilder/docker-gen
et l'image officielle nginx.
Vous souhaiterez peut-être faire cela pour éviter que le socket docker ne soit lié à un service de conteneur exposé publiquement (évitez de monter le socket docker dans le conteneur exposé nginx). C'est mieux d'un point de vue sécurité.
Pour exécuter le proxy nginx en tant que conteneur distinct, vous aurez besoin de :
1) Pour monter le fichier modèle nginx.tmpl dans le conteneur docker-gen. Vous pouvez obtenir le dernier nginx.tmpl officiel avec une commande telle que :
2) Définissez la variable d'environnement
NGINX_DOCKER_GEN_CONTAINER
sur le nom ou l'identifiant du conteneur docker-gen.Exemples :
Premier démarrage de nginx (image officielle) avec les volumes :
Deuxièmement, démarrez le conteneur docker-gen avec les volumes partagés et le fichier modèle :
Ensuite, démarrez ce conteneur (la variable NGINX_DOCKER_GEN_CONTAINER doit contenir le nom ou l'identifiant du conteneur docker-gen) :
Ensuite, démarrez tous les conteneurs à proxy comme décrit précédemment.
Si pour une raison quelconque vous ne pouvez pas utiliser l'option docker --volumes-from, vous pouvez spécifier le nom ou l'identifiant du conteneur nginx avec la variable
NGINX_PROXY_CONTAINER
.Chiffrons
Pour utiliser le service Let's Encrypt pour créer automatiquement un certificat valide pour les hôtes virtuels.
Définissez les variables d'environnement suivantes pour activer la prise en charge de Let's Encrypt pour un conteneur proxy. Ces variables d'environnement doivent être déclarées dans chaque conteneur d'application à proxy.
LETSENCRYPT_HOST
LETSENCRYPT_EMAIL
La variable
LETSENCRYPT_HOST
variable most likely needs to be the same as theVIRTUAL_HOST
doit très probablement être la même que la variableVIRTUAL_HOST
et doit être un domaine accessible au public. Spécifiez plusieurs hôtes avec un délimiteur virgule.Les variables d'environnement suivantes sont facultatives et paramétrent le fonctionnement du client Let's Encrypt.
LETSENCRYPT_KEYSIZE
La variable
LETSENCRYPT_KEYSIZE
détermine la taille de la clé demandée (en bits, par défaut 4096).certificats multi-domaines (SAN)
Si vous souhaitez créer des certificats multi-domaines (SAN), ajoutez le domaine de base comme premier domaine de la
LETSENCRYPT_HOST
variable d'environnement.certificats de test
Si vous souhaitez créer des certificats de test qui n'ont pas les limites de 5 certificats/semaine/domaine, définissez le
LETSENCRYPT_TEST
environment variable with a value oftrue
(dans les conteneurs où vous demandez des certificats avec LETSENCRYPT_HOST). Si vous souhaitez faire cela globalement pour tous les conteneurs, définissez ACME_CA_URI comme décrit ci-dessous.Renouvellement automatique du certificat
Toutes les heures (3600 secondes), les certificats sont vérifiés et chaque certificat qui expirera dans les 30 prochains jours (90 jours / 3) est renouvelé.
Exemple :
Variables d'environnement de conteneur facultatives
Variables d'environnement de conteneur Letsencrypt-nginx-proxy-companion facultatives pour une configuration personnalisée.
ACME_CA_URI
- Directory URI for the CA ACME API endpoint (default:https://acme-v01.api.letsencrypt.org/directory
). If you set it's value tohttps://acme-staging.api.letsencrypt.org/directory
Letsencrypt utilisera des serveurs de test qui n'ont pas les limites de 5 certificats/semaine/domaine. Vous pouvez également créer des certificats de test par conteneur (voir Chiffrons les certificats de test)Par exemple
DEBUG
- Set it totrue
pour activer le débogage du script du point d'entrée et la génération de certificats LetsEncrypt, ce qui pourrait vous aider à identifier tout problème de configuration.L'étiquette "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy=true" - définissez cette étiquette sur le conteneur nginx-proxy pour indiquer au conteneur docker-letsencrypt-nginx-proxy-companion de l'utiliser comme proxy.
ACME_TOS_HASH
- Passons un hachage TOS alternatif à simp_le, pour prendre en charge l'implémentation ACME d'autres autorités de certification.Exemples :
Si vous voulez d'autres exemples d'utilisation de ce conteneur, regardez :
Exemples de Karl Fathi
Plus d'exemples de Karl
Exemples de George Ilyes
Exemple simple de composition de docker de Dmitry
注意,这里有个坑,也怪我自己没看清楚,如果镜像已经expose端口就设置VIRTUAL_HOST、LETSENCRYPT_HOST、LETSENCRYPT_EMAIL就行,如果没有就得在设置好三个环境变量之后自己加入--exposer 容器内应用服务端口 参数启动。如果容器是discourse这样的,就得在app.yml内设置好环境变量之后把端口映射的80:80改为未占用端口:80,然后再保存重建启动。
Étant donné que le conteneur ne peut lier directement que le port de l'hôte, par exemple, j'ai 10 conteneurs Web, alors ces conteneurs ont tous besoin de 80 ou 443, donc le paramètre -p n'est pas réalisable, donc utilisez un conteneur comme passerelle inverse conteneur proxy, utilisez nginx, le conteneur nginx pour -p et d'autres conteneurs Web tels que php-fpm et node. Accès via nginx en tant que proxy inverse Le certificat est également directement transmis au serveur nginx et le transfert 443 peut être effectué.
En fait, ce sont les bases, mais elles n'ont rien à voir avec Docker
Cet article est un environnement lnmp,
/a/11...
S'il existe plusieurs services backend php-fpm ou node ou python, alors nginx devrait être comme suit