Einführung
Ich habe einen Entwickler-Server (derzeit mit Ubuntu 14.04 LTS), auf dem ich seit einiger Zeit verschiedene Entwicklungstools auf verschiedenen Ports hoste. Da die Ports schwer zu merken sein können, habe ich mich entschieden, Port 80 für alle meine Dienste zu verwenden und die Portweiterleitung intern basierend auf dem Hostnamen durchzuführen.
Anstatt domain.com:5432 zu schreiben, kann ich einfach über sub.domain.com darauf zugreifen
Beispielsweise hat die Anwendung X, die den Port 7547 verwendet und auf sub.domain.com ausgeführt wird, die folgende nginx-Konfiguration:
upstream sub {
server 127.0.0.1:7547;
}
server {
listen 80;
server_name sub.domain.com www.sub.domain.com;
access_log /var/log/nginx/sub.log combined;
location / {
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_pass http://127.0.0.1:7547;
proxy_set_header Authorization "";
}
}
Die Frage
Ist es bei der von mir gewählten aktuellen Konfigurationsstruktur möglich, letsencrypt zu verwenden und die verschiedenen Dienste unter https auszuführen?
nginx
https
jira
lets-encrypt
0x450
quelle
quelle
Antworten:
Ja, Sie können Nginx-Proxy-Anforderungen an HTTP-Server senden und dann selbst über HTTPS auf Clients antworten. Wenn Sie dies tun, möchten Sie sichergehen, dass der nginx <-> Proxy-Connect wahrscheinlich nicht von jemandem beschnüffelt wird, von dem Sie einen Angriff erwarten. Zu den sicherheitsgerichteten Ansätzen könnten gehören:
Es ist unwahrscheinlich, dass das Proxying zu einem anderen Host im öffentlichen Internet sicher genug ist.
Hier finden Sie Anweisungen zum Beziehen eines Let's Encrypt-Zertifikats über denselben Webserver, den Sie als Proxy verwenden.
Fordern Sie Ihr erstes Zertifikat bei Let's Encrypt an
Ändern Sie Ihre
server
Klausel, damit das Unterverzeichnis.well-known
von einem lokalen Verzeichnis aus bedient werden kann, z.http://sub.domain.com/.well-known
Hier suchen die Let's Encrypt-Server nach Antworten auf die von ihnen gestellten Herausforderungen.Sie können dann den certbot- Client verwenden, um ein Zertifikat von Let's Encrypt mithilfe des Webroot- Plugins (als Root) anzufordern :
Ihr Schlüssel, Ihr Zertifikat und Ihre Zertifikatkette werden nun in installiert
/etc/letsencrypt/live/sub.domain.com/
Nginx für die Verwendung Ihres Zertifikats konfigurieren
Erstellen Sie zunächst eine neue Server-Klausel wie folgt:
Nginx neu laden:
Stellen Sie sicher, dass HTTPS jetzt funktioniert, indem Sie
https://sub.domain.com
undhttps://www.sub.domain.com
in Ihrem Browser (und allen anderen Browsern, die Sie speziell unterstützen möchten) aufrufen und überprüfen, dass sie keine Zertifikatfehler melden.Empfohlen: Lesen Sie auch raymii.org: Starke SSL-Sicherheit auf nginx und testen Sie Ihre Konfiguration bei SSL Labs .
(Empfohlen) Leiten Sie HTTP-Anforderungen an HTTPS um
Wenn Sie bestätigt haben, dass Ihre Site mit der
https://
Version der URL funktionierthttp://sub.domain.com
, leiten Sie sie zur HTTPS-Version der Site weiter , anstatt dass einige Benutzer unsicheren Inhalt bereitstellen, weil sie dazu gegangen sind .Ersetzen Sie Ihre gesamte Port 80-
server
Klausel durch:Sie sollten diese Zeile jetzt auch in der Konfiguration von Port 443 auskommentieren, damit die Browser nicht einmal die HTTP-Version der Site testen:
Erneuern Sie Ihr Zertifikat automatisch
Sie können diesen Befehl (als root) verwenden, um alle Certbot bekannten Zertifikate zu erneuern und nginx mit dem neuen Zertifikat neu zu laden (das denselben Pfad wie Ihr vorhandenes Zertifikat hat):
certbot wird nur versuchen, Zertifikate zu erneuern, die älter als 60 Tage sind. Daher ist es sicher (und empfehlenswert!), diesen Befehl sehr regelmäßig und wenn möglich automatisch auszuführen . Sie könnten beispielsweise den folgenden Befehl eingeben
/etc/crontab
:Sie können Erneuerungen entweder mit einem Testlauf testen, bei dem die Staging-Server von Let's Encrypt kontaktiert werden, um eine echte Prüfung der Kontaktaufnahme mit Ihrer Domain durchzuführen. Die resultierenden Zertifikate werden jedoch nicht gespeichert:
Oder Sie können eine vorzeitige Verlängerung erzwingen mit:
Hinweis: Sie können so oft trocken laufen, wie Sie möchten. Für echte Erneuerungen gelten jedoch die Grenzwerte für die Verschlüsselungsrate .
quelle
certbot
ein anderes Tool verwenden, dürfen Sie nicht vergessen, Ihre Domain sowohl im WWW- als auch im Nicht-WWW-Format anzugeben, damit sie funktioniert.location /.well-known
musst du.well-known
im Weg auslassen. Verwenden Siealias /var/www/sub.domain.com
, nichtalias /var/www/sub.domain.com/.well-known
location '/.well-known' {
. Ich bin mir nicht sicher, ob es sich um eine Versionssache oder nur um mein Setup handelt, aber für den Fall, dass jemand anderes feststeckt.Ja, Sie können
nginx
https als Endpunkt verwenden und über http mit Backends zusammenarbeiten. Zum Beispiel meine Konfiguration:Aber wie ich weiß, müssen Sie mit "Verschlüsseln" alle Unterdomänen angeben, wenn Sie ein Zertifikat erhalten. Wenn dies ein Problem ist, wählen Sie "URL"
https://host/service
anstelle von " URL"https://service.host
quelle