Detailliertes Tutorial zur Konfiguration von Docker nginx + https-Subdomains

Detailliertes Tutorial zur Konfiguration von Docker nginx + https-Subdomains

Heute habe ich zufällig einem Freund beim Umzug seines Servers geholfen und dabei die Grundausstattung des Servers konfiguriert, bin dabei jedoch auf einige Probleme gestoßen. Es stellt sich heraus, dass das aktuelle Google Chrome/Safari http zwangsweise in https konvertiert.

Ich wusste zunächst nicht, was los war und habe die Domänennamen-Einträge zurückgesetzt. Darüber hinaus kann der Domänenname beim Pingen erfolgreich in die Serveradresse aufgelöst werden. Daher habe ich meine Aufmerksamkeit auf den Prozess von http -> https gerichtet. Ich habe den integrierten Browser von WeChat verwendet und festgestellt, dass es möglich war, auf den http-Domänennamen zuzugreifen. Richten Sie also das Zertifikat ein.

Das Zertifikat, das ich hier verwende, ist ebenfalls das kostenlose acme.sh, das auf GitHub zu finden ist. Laden wir es zuerst herunter.

locken https://get.acme.sh | sh

Laden Sie dann Bash neu

Quelle ~/.bashrc

Zu diesem Zeitpunkt können Sie acme.sh --help eingeben, um die relevante Ausgabe deutlich anzuzeigen.

Konfigurieren Sie Acme

Nach Abschluss der Installation beginnen wir mit der Erstellung von Zertifikaten. Hier verwenden wir direkt die DNS-API, um die Domänennamenüberprüfung und andere Vorgänge abzuschließen.

Weitere Einzelheiten finden Sie unter dnsapi

Nehmen wir als Beispiel Godady

Legen Sie zunächst den Schlüssel und das Geheimnis in der Terminalkonfigurationsdatei fest (vom Dienstanbieter erhalten).

exportiere GD_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"
exportiere GD_Secret="asdfsdfsdfdfdfdf"

Als nächstes geben wir direkt den Befehl ein

acme.sh --issue --dns dns_gd -d demo.com -d *.demo.com

Hier wird eine Zertifikatsdatei generiert. Normalerweise wird es unter /root/.acme.sh/xxx.com/xxx.com.cer gespeichert.

Um die Wartung unseres Docker-Volumes zu erleichtern, erstellen wir einen Ordner zum Speichern dieser Zertifikate

mkdir /opt/www/nginx/ssl

Geben Sie den Befehl erneut ein, um das Zertifikat im SSL-Verzeichnis abzulegen

acme.sh --install-cert -d demo.com \
--key-file /opt/www/nginx/ssl/demo.com.key \
--fullchain-file /opt/www/nginx/ssl/demo.com.crt\

Zu diesem Zeitpunkt können Sie zwei Dateien unter /opt/www/nginx/ssl sehen

An diesem Punkt ist die Konfiguration des Domänennamenzertifikats abgeschlossen. Dann konfigurieren wir docker-compose.yml

Erstellen von Containern mit Docker-Compose

Version: '3.5'
Leistungen:
 App:
  Bild: nginx:1.19.8
  Häfen:
   - 80:80
   -443:443
  Bände:
   - ./conf/nginx.conf:/etc/nginx/nginx.conf # Konfigurationsdatei - /opt/www:/opt/www # Projektverzeichnis - /opt/www/nginx/ssl:/opt/www/ssl # Zertifikatsdatei neu starten: immer
Netzwerke:
 Standard:
  Name: Standardnetzwerk

Nachdem wir die YML-Datei geschrieben haben, konfigurieren wir nginx. Bevor wir die nginx-Einstellungen konfigurieren, müssen wir zuerst die Schlüsselaustauschdatei DHE-Parameterdatei konfigurieren

openssl dhparam -out /opt/www/nginx/ssl/dhparam.pem 2048

Dann konfiguriere ich /.well-known/acme-challenge . Auf dieses Verzeichnis muss let's encrypt daher müssen wir dieses Verzeichnis zuerst konfigurieren.

Erstellen Sie zunächst ein Verzeichnis mkdir /opt/www/letsencrypt und konfigurieren Sie dann den folgenden Server in der nginx-Konfigurationsdatei

Server {
    hören Sie 80 Standardserver;
    hören Sie [::]:80 Standardserver;
    Servername _;

    Standort /.well-known/acme-challenge {
        root /opt/www/letsencrypt;
    }

    Standort / {
        gibt 301 https://$host$request_uri zurück;
    }
 }

Die obige Konfiguration leitet alle HTTP-Anfragen auf HTTPS um.

Dann konfigurieren wir unseren eigenen Domänennamen,

Server {
    hören Sie 443 SSL HTTP2 Standardserver;
    hören Sie [::]:443 ssl http2 Standardserver;

    Servername demo.com;

    Stammverzeichnis /opt/www/html;
    index.html index.htm index.php;

   # Diffie-Hellman-Schlüsselaustausch ssl_dhparam /opt/www/ssl/dhparam.pem;

    SSL-Protokolle TLSv1 TLSv1.1 TLSv1.2;
    SSL_CIPHERS 'ECDHE-ECDSA-CHACHA20-POLY1305: ECDHE-RSA-CHACHA20-Poly1305: ECDHE-ECDSA-AES128-GCM-SHA256: ECDHE-RSA-AES128-GCM-SHA256: ECDHE-ECDS256-RSA-AES256-GCM-SHA384: ECDHE-ECDS256-GCM-SHA384: ECDHE-ECDS256-GCM-SHA384: ECDHE-ECDS256: 384. ECDHE-ECDSA-AES256-SHA384: ECDHE-ECDSA-AES256-SHA: ECDHE-RSA-AES256-SHA: DHE-RSA-AES128-SHA256 -RSA-DES-CBC3-SHA: EDH-RSA-DES-CBC3-SHA: AES128-GCM-SHA256: AES256-GCM-SHA384: AES128-SHA256: AES256-SHA256: AES128-SHA: AES256-SHA: DES-CBC3-SHA:! DSS ';
    ssl_prefer_server_ciphers ein;

    ssl_session_cache gemeinsam genutzt: SSL: 50 m;
    SSL-Sitzungszeitüberschreitung 1d;


    #Zertifikatsdatei ssl_certificate /opt/www/ssl/demo.com.crt;
    SSL-Zertifikatsschlüssel /opt/www/ssl/demo.com.key;

    # HSTS-Preload-Unterstützung aktivieren add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"; 
    add_header X-Frame-Optionen SAMEORIGIN;
    add_header X-Inhaltstyp-Optionen nosniff;
    add_header X-XSS-Schutz "1; Modus=blockieren";

    Zugriffsprotokoll /var/log/nginx/demo.com.access.log;
    Fehlerprotokoll /var/log/nginx/demo.com.error.log;
 }

Wenn Subdomains konfiguriert werden müssen, kopieren Sie einfach die obige Konfiguration und ändern Sie diese Speicherorte. Andere Konfigurationen können unverändert bleiben. Der Domain Name Service Provider muss außerdem einen A-Record hinzufügen

Server {
    listen 443 ssl http2; #Beachten Sie, dass hier kein Standardserver vorhanden ist 
    listen [::]:443 ssl http2; #Beachten Sie, dass hier kein Standardserver vorhanden ist

    Servername example.demo.com; #Subdomäne Zugriffsprotokoll /var/log/nginx/example.demo.com.access.log;
    Fehlerprotokoll /var/log/nginx/example.demo.com.error.log;
 }

Die endgültige Nginx-Konfiguration lautet:

Ereignisse {
Arbeiterverbindungen 1024;
}

http {
 mime.types einschließen;
 Standardtyp Anwendung/Oktett-Stream;

 sendfile an;

 Keepalive-Timeout 300;
 
 Server {
    hören Sie 80 Standardserver;
    hören Sie [::]:80 Standardserver;
    Servername _;

    Standort /.well-known/acme-challenge {
        root /opt/www/letsencrypt;
    }

    Standort / {
        gibt 301 https://$host$request_uri zurück;
    }
 }
 
 Server {
    hören Sie 443 SSL HTTP2 Standardserver;
    hören Sie [::]:443 ssl http2 Standardserver;

    Servername demo.com;

    Stammverzeichnis /opt/www/html;
    index.html index.htm index.php;

   # Diffie-Hellman-Schlüsselaustausch ssl_dhparam /opt/www/ssl/dhparam.pem;

    SSL-Protokolle TLSv1 TLSv1.1 TLSv1.2;
    SSL_CIPHERS 'ECDHE-ECDSA-CHACHA20-POLY1305: ECDHE-RSA-CHACHA20-Poly1305: ECDHE-ECDSA-AES128-GCM-SHA256: ECDHE-RSA-AES128-GCM-SHA256: ECDHE-ECDS256-RSA-AES256-GCM-SHA384: ECDHE-ECDS256-GCM-SHA384: ECDHE-ECDS256-GCM-SHA384: ECDHE-ECDS256: 384. ECDHE-ECDSA-AES256-SHA384: ECDHE-ECDSA-AES256-SHA: ECDHE-RSA-AES256-SHA: DHE-RSA-AES128-SHA256 -RSA-DES-CBC3-SHA: EDH-RSA-DES-CBC3-SHA: AES128-GCM-SHA256: AES256-GCM-SHA384: AES128-SHA256: AES256-SHA256: AES128-SHA: AES256-SHA: DES-CBC3-SHA:! DSS ';
    ssl_prefer_server_ciphers ein;

    ssl_session_cache gemeinsam genutzt: SSL: 50 m;
    SSL-Sitzungszeitüberschreitung 1d;


    #Zertifikatsdatei ssl_certificate /opt/www/ssl/demo.com.crt;
    SSL-Zertifikatsschlüssel /opt/www/ssl/demo.com.key;

    # HSTS-Preload-Unterstützung aktivieren add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"; 
    add_header X-Frame-Optionen SAMEORIGIN;
    add_header X-Inhaltstyp-Optionen nosniff;
    add_header X-XSS-Schutz "1; Modus=blockieren";

    Zugriffsprotokoll /var/log/nginx/demo.com.access.log;
    Fehlerprotokoll /var/log/nginx/demo.com.error.log;
 }

}

An diesem Punkt ist unsere Konfiguration im Wesentlichen abgeschlossen.

Führen Sie nun einfach den Befehl aus

docker-compose -f docker-compose.yml up -d

Sie können die +https-Multidomänennamenkonfiguration von nginx in Docker abschließen

Dies ist das Ende dieses Artikels über das ausführliche Tutorial zur Konfiguration von Docker Nginx + HTTPS-Subdomains. Weitere relevante Inhalte zur Konfiguration von Docker Nginx HTTPS finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Verwenden Sie Docker, um Nginx zu installieren und Probleme und Lösungen zur Portweiterleitung zu konfigurieren
  • Docker stellt Nginx bereit und konfiguriert Reverse-Proxy
  • Starten Sie die auf Docker basierende nginxssl-Konfiguration
  • So stellen Sie nginx mit Docker bereit und ändern die Konfigurationsdatei
  • nginx generiert automatisch Konfigurationsdateien im Docker-Container
  • Detaillierte Erläuterung der Nginx-Plugin-Konfiguration und Dateien unter Docker

<<:  JavaScript implementiert den Div-Maus-Drag-Effekt

>>:  Fassen Sie einige allgemeine Prinzipien des Webdesigns und der Webproduktion zusammen

Artikel empfehlen

Entwicklung einer Vue Element-Frontend-Anwendung zum Abrufen von Backend-Daten

Inhaltsverzeichnis Überblick 1. Erfassung und Ver...

Mysql speichert Baumstruktur durch Adjazenzliste (Adjazenzliste)

Der folgende Inhalt stellt den Prozess und die Lö...

So entschlüsseln Sie Linux-Versionsinformationen

Das Anzeigen und Interpretieren von Informationen...

Detaillierte Erläuterung der Datentypprobleme bei der JS-Array-Indexerkennung

Als ich ein WeChat-Applet-Projekt schrieb, gab es...

MySQL-Variablenprinzipien und Anwendungsbeispiele

In der MySQL-Dokumentation können MySQL-Variablen...

MySQL Online-Übung zur Deadlock-Analyse

Vorwort Ich glaube, dass jeder beim Erlernen von ...

Beispielcode für MySQL-Datensicherung und -wiederherstellung

1. Datensicherung 1. Verwenden Sie den Befehl mys...

Uniapps Erfahrung in der Entwicklung kleiner Programme

1. Erstellen Sie ein neues UI-Projekt Zunächst ei...