0
votes

Docker Compose de Nginx, Express, Ssl Ssl Obtenez 502 Bad Gateway

J'essaie de trouver un moyen de publier Nginx, Express et SSL de SSL de Nginx, Express et LetSencrypt en utilisant Docker-Compose. Il y a beaucoup de documents à ce sujet, alors j'ai référencé cela et essayé de faire ma propre configuration, j'ai la réussite de configurer nginx + ssl à partir de ce https://medium.com/@pentacent/nginx -et -et-laisse-chiffrer-with-docker-in-moins-ther-5-minutes-b4b8a60d3a71

donc maintenant je veux mettre des exemples de nodejs express app dans Nginx + SSL Docker-Compose. Mais je ne sais pas pourquoi, je reçois 502 Bad Gateway de nginx plutôt que d'express ''s initial Page.

Je teste cette application avec mon domaine gauche et sur AWS EC2 Ubuntu16 . Je pense qu'il n'y a aucun problème à propos des paramètres DNS DNS et Règles de sécurité. Tous les 80, 443, 3000 ports ont déjà ouvert. Et quand je l'ai testé sans application Express, il affiche la page bien par défaut Nginx.

NGinx Conf in /etc/nginx/conf.dleight/strong><

Pré>

docker-compose.yml xxx

dockerfile d'express xxx

Je pense que SSL fonctionne bien, mais il y a quelques problèmes entre Express App et nginx . Comment puis-je résoudre ce problème?


0 commentaires

4 Réponses :


1
votes
location / {
    proxy_pass http://app:3000
}

3 commentaires

Wow, vous avez exactement raison. Maintenant, je peux voir la page. Merci beaucoup!


J'ai bownvoté parce que - liens est legacy. Il est recommandé d'utiliser Réseaux définis par l'utilisateur .


Mise à jour de la réponse pour inclure également la route réseau définie par l'utilisateur.



0
votes

Je pense que peut-être une source de confusion ici est la façon dont la désignation "localhost" se comporte parmi les services de course à pied dans Docker-Compose. La façon dont Docker-compose orchestre vos conteneurs, chacun des conteneurs se comprend pour être "localhost", donc "localhost" ne se réfère pas à la machine hôte (et si je ne me trompe pas, il n'y a aucun moyen pour un conteneur en cours d'exécution sur L'hôte pour accéder à un service exposé sur un port hôte, en dehors de certains exploits de sécurité). Pour démontrer: xxx pré>

reconstruction p>

$ docker-compose exec app /bin/bash -c "curl http://localhost:2999"
curl: (7) Failed to connect to localhost port 2999: Connection refused


0 commentaires

1
votes

AVERTISSEMENT FORT>: Le - Link CODE> Le drapeau est une fonctionnalité héritée de Docker. Cela peut éventuellement être supprimé. Sauf si vous avez absolument besoin de continuer à l'utiliser, nous vous recommandons d'utiliser Réseaux définis par l'utilisateur pour faciliter la communication entre deux conteneurs au lieu d'utiliser - link code>. p>

Définir des réseaux dans votre docker-compose.yml code> et configure vos services avec le réseau approprié: p> xxx pré>

note forte >:: le service code> code> ne publie plus ses ports de l'hôte, il n'expose que le port 3000 (réf. Exposant et publication des ports ), il est uniquement disponible pour les services connectés au réseau code> Backend code>. Le service nginx code> a un pied dans les deux backend code> et frontal code> réseau pour accepter le trafic entrant à partir du frontend code> et proxy les connexions à l'application code> dans le backend code> (réf. réseau multi-hôte ). p>

avec Réseaux définis par l'utilisateur Vous pouvez résoudre le nom du service: P>

user nginx;
worker_processes 1;

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

events {
  worker_connections 1024;
}
http {
  upstream app {
    server app:3000 max_fails=3;
  }
  server {
    listen 80;
    server_name example.com;
    return 301 https://$server_name$request_uri;
  }
  server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name example.com;
    server_tokens off;

    location / {
        proxy_pass http://app;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }

    ssl_certificate /etc/letsencrypt/live/sendpi.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/sendpi.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
  }
}


0 commentaires

0
votes

Tâches
  • Construire l'application Nodejs
  • Ajouter une fonctionnalité SSL de la case (pouvant fonctionner automatiquement)

    solution

    HTTPS : //github.com/evertramos/docker-commose-letsencrypt-nginx-proxy-companion

    / {path_to_the_project} /Docker-commose.yml xxx

    / {path_to_the_project} /.env xxx

    N'oubliez pas de Connecter le domaine à votre serveur avant de lancer un conteneur là.

    Comment ça marche?

    Il suffit d'exécuter docker-composition up --build -d


0 commentaires